Loki日志系统简介
Loki是 Grafana Labs 团队发布的开源项目,是一个水平可扩展,高可用性,多租户的日志聚合系统。
项目受 Prometheus 启发,官方的介绍就是:Like Prometheus, but for logs.,类似于 Prometheus 的日志系统。
与其他日志聚合系统相比,Loki具有下面的一些特性:
- 不对日志进行全文索引,通过存储压缩非结构化日志和仅索引元数据,Loki 操作起来会更简单,更省成本。
- 通过使用与 Prometheus相同的标签记录流对日志进行索引和分组,这使得日志的扩展和操作效率更高。 特别适合储存 Kubernetes Pod 日志; 诸如 Pod标签之类的元数据会被自动删除和编入索引。
- 受 Grafana 原生支持。
Loki 由以下3个部分组成:
- loki是主服务器,负责存储日志和处理查询。
- promtail是代理,负责收集日志并将其发送给 loki 。
- Grafana用于 UI展示。
官网:https://grafana.com/oss/loki
dcker部署loki
如果用于测试或开发环境,则可以使用Docker或Docker Compose安装Loki和Promtail。对于生产,建议使用Tanka或Helm安装。
参考:https://grafana.com/docs/loki/latest/installation/docker/
下载配置文件
mkdir -p /data/loki/config && cd /data/loki/config
wget https://raw.githubusercontent.com/grafana/loki/v1.5.0/cmd/loki/loki-local-config.yaml -O loki-config.yaml
wget https://raw.githubusercontent.com/grafana/loki/v1.5.0/cmd/promtail/promtail-docker-config.yaml -O promtail-config.yaml
运行loki容器
docker run -d --name loki \
--restart always \
-p 3100:3100 \
-v /data/loki/config:/mnt/config \
grafana/loki:1.5.0 \
-config.file=/mnt/config/loki-config.yaml
运行promtail容器
docker run -d --name promtail \
--restart always \
-v /data/loki:/mnt/config \
-v /var/log:/var/log \
grafana/promtail:1.5.0 \
-config.file=/mnt/config/promtail-config.yaml
说明:promtail作为日志收集代理可部署在任意要收集日志的节点上,配置文件中指定loki节点IP地址即可,另外需要挂载要收集的节点日志文件目录到promtail容器中。
运行grafana容器
docker run -d --name=grafana \
--restart always \
-p 3000:3000 \
-v grafana-storage:/var/lib/grafana \
grafana/grafana
查看loki metrics数据
http://192.168.93.9:3100/metrics
查看loki运行状态
http://192.168.93.9:3100/ready
如果想要收集指定目录及所有子目录下以.log结尾的日志文件,修改promtail-config.yaml 配置文件:
# cat promtail-config.yaml
......
__path__: /var/log/**/*.log
配置grafana数据源
访问grafana,默认用户密码为admin/admin。
选择左侧设置—>Data Sources—>Add data source,搜索Loki配置HTTP URL为
http://192.168.93.9:3100
完成后选择左侧设置—>Preferences,修改底部默认时区为Asia/Shanghai。
选择左侧Explore查看日志,可以基于文件名或标签查看:
docker-compose部署
下载docker-compose文件
wget https://raw.githubusercontent.com/grafana/loki/v1.5.0/production/docker-compose.yaml -O docker-compose.yaml
修改docker-compose文件
version: "3"
services:
loki:
image: grafana/loki:1.5.0
restart: always
ports:
- "3100:3100"
command: -config.file=/etc/loki/local-config.yaml
volumes:
- loki-config:/etc/loki
networks:
- loki
promtail:
image: grafana/promtail:1.5.0
restart: always
volumes:
- /var/log:/var/log
- promtail-config:/etc/promtail
command: -config.file=/etc/promtail/docker-config.yaml
networks:
- loki
grafana:
image: grafana/grafana
restart: always
ports:
- "3000:3000"
depends_on:
- loki
- promtail
volumes:
- grafana-storage:/var/lib/grafana
networks:
- loki
networks:
loki:
volumes:
loki-config:
promtail-config:
grafana-storage:
启动容器
docker-compose up -d
查看运行状态
# docker-compose ps
Name Command State Ports
---------------------------------------------------------------------------------
loki_grafana_1 /run.sh Up 0.0.0.0:3000->3000/tcp
loki_loki_1 /usr/bin/loki -config.file ... Up 0.0.0.0:3100->3100/tcp
loki_promtail_1 /usr/bin/promtail -config. ... Up
loki日志插件
Loki支持Docker插件,该插件将从Docker容器读取日志并将其发送到Loki。可以将插件配置为将日志发送到私有Loki实例或Grafana Cloud。
参考:https://github.com/grafana/loki/blob/master/docs/sources/clients/docker-driver/_index.md
主机安装docker插件
docker plugin install grafana/loki-docker-driver:latest --alias loki --grant-all-permissions
docker plugin ls
docker配置使用插件,修改/etc/docker/daemon.json并重启docker
{
"debug" : true,
"log-driver": "loki",
"log-opts": {
"loki-url": "http://192.168.93.9/loki/api/v1/push",
"loki-batch-size": "400"
}
}
新建容器查看日志