docker-compose安装loki套件(loki+grafana)
loki进行日志聚合处理 类似elk中的es
grafana是日志显示,类似elk中的kibana,可以通过各种标签和表达式过滤显示日志
docker-compose.yml内容如下
version: "3"
networks:
loki:
services:
loki:
image: grafana/loki
restart: always
environment:
- TZ=Asia/Shanghai
- LANG=zh_CN.UTF-8
ports:
- 3100:3100
networks:
- loki
grafana:
image: grafana/grafana:master
restart: always
environment:
- TZ=Asia/Shanghai
- LANG=zh_CN.UTF-8
ports:
- 3000:3000
networks:
- loki
安装loki的docker plugin
命令行运行
docker plugin install grafana/loki-docker-driver:latest –alias loki –grant-all-permissions
当有新版本时, 更新plugins
docker plugin disable loki –force
docker plugin upgrade loki grafana/loki-docker-driver:latest –grant-all-permissions
docker plugin enable loki
systemctl restart docker
对于loki的docker plugin有两种使用方式。
- 配置daemon.json,收集此后创建的所有容器的日志(注意,是配置daemon.json后重启docker服务后创建的容器才会把日志输出到loki)。
- 新建容器时指定logging类型为loki,这样只有指定了logging的容器才会输出到loki
全局收集配置
编辑daemon.json。linux下默认路径是/etc/docker/daemon.json (需要sudo), windows则默认是%userprofile%.docker\daemon.json
{
“log-driver”: “loki”,
“log-opts”: {
“loki-url”: “http://YOUR_IP:3100/loki/api/v1/push”,
“max-size”: “50m”,
“max-file”: “10”,
“loki-pipeline-stages”: “- multiline:\n firstline: ‘^[\d{2}:\d{2}:\d{2} \w{4}]’\n”
},
“registry-mirrors”: [“https://registry.docker-cn.com”]
}
记得把YOUR_IP换成loki所在主机的IP,一般都是本机的局域网地址,如果loki映射的端口换了记得这里也需要换。镜像仓库地址也可以换成自己云服务的。
其中max-size表示日志文件最大大小,max-file表示最多10个日志文件,都是对单个容器来说的, multiline是配置多行识别(默认最多128行),转为单行, firstline表示单条日志的首行正则表达式
我的是 [03:00:32 INFO] 开头这种格式,所以对应正则是^[\d{2}:\d{2}:\d{2} \w{4}] 按照你自己的日志开头编写对应正则替换即可
然后重启docker服务。
sudo systemctl restart docker
在此之后创建的容器默认都会把日志发送到loki。
如果不全局配置,而只想特定的容器进行日志收集,则根据启动容器的方式,有两种配置方法。
docker run配置日志输出到loki
通过docker run启动容器,可以通过–log-driver来指定为loki。示例如下
docker run –rm –name=grafana –log-driver=loki –log-opt loki-url=”http://YOUR_IP:3100/loki/api/v1/push” –log-opt max-size=50m –log-opt max-file=10 grafana/grafana
–log-driver=loki指定日志驱动器为loki
–log-opt loki-url则指定了loki的url
–log-opt max-size日志最大大小
–log-opt max-file日志文件最大数量
docker-compose 配置日志输出到loki
docker-compose 小于3.4可以对需要日志输出的配置添加配置如下
logging:
driver: loki
options:
loki-url: “http://YOUR_IP:3100/loki/api/v1/push”
max-size: “50m”
max-file: “10”
loki-pipeline-stages: |
– multiline:
firstline: ‘^[\d{2}:\d{2}:\d{2} \w{4}]’
注意:max-size和max-file这里需要加引号 multiline已经在上文解释过了就不再赘述了
对于3.4及其以上版本可以通过定义模板来减少代码量
version: “3.4”
x-logging:
&loki-logging
driver: loki
options:
loki-url: “http://YOUR_IP:3100/loki/api/v1/push”
max-size: “50m”
max-file: “10”
loki-pipeline-stages: |
– multiline:
firstline: ‘^[\d{2}:\d{2}:\d{2} \w{4}]’
services:
host:
container_name: grafana
image: grafana/grafana
environment:
– TZ=Asia/Shanghai
– LANG=zh_CN.UTF-8
logging: *loki-logging
&loki-logging表示定义模板
*loki-logging表示引用模板。对于多个服务就只需要对应加上一行 logging: *loki-logging 即可。相比之前的版本可谓是大大简化了
Grafana显示和过滤日志
一开始安装的时候将grafana映射到了宿主机的3000端口,所以地址就为 http://YOUR_IP:3000
grafana默认用户名密码是admin和admin
第一次进入需要修改admin的密码
添加loki数据源
选择loki。
因为一开始安装grafana和loki是在一个docker-compose里,所以默认在同一个子网下,因此可以url可以直接写http://loki:3100。如果grafana和loki是分开的,则需要改为填loki所在的宿主机ip
点击 保存和测试 。会提示链接成功。
查看过滤日志
左侧菜单栏选择探索
label里有对应选项可以选择。 compose_project就是docker-compose的项目名 compose_service就是其中的服务名 container_name就是容器名。这几个基本就够我们定位到具体的某个容器了。
关键字查询 |~ “keyword” 文档链接: LogQL文档
然后是时间段选择
注意:Serilog默认日志格式是 “[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj}{NewLine}{Exception}” 其中日志等级是3位,loki识别不到,最好是4位,所以需要把Level:u3改为u4
安装plugin
docker plugin install grafana/loki-docker-driver:latest --alias loki --grant-all-permissions
更新
docker plugin disable loki --force
docker plugin upgrade loki grafana/loki-docker-driver:latest --grant-all-permissions
docker plugin enable loki
systemctl restart docker
离线安装
1. 在公网安装插件
2. 压缩
tar -czvf loki-plugin.tgz /var/lib/docker/plugins/cd2785b1ddbdefeaf2ec69f7db97baed6e3e1ad2e1788c3f38bb6377723b8dc1/
3. 离线状态
tar -zxvf loki-plugin.tgz -C /
4. 重启 docker 服务
systemctl restart docker
使用 plugin
配置daemon.json 收集此后创建的所有容器的日志
{
"log-driver": "loki",
"log-opts": {
"loki-url": "http://ip_or_hostname_where_Loki_run:3100/loki/api/v1/push",
"max-size": "50m",
"max-file": "10"
}
}
systemctl restart docker
生效
重新创建的 docker 才会正确输出日志
docker-compose down
docker-compose up -d
QA
查看 loki 日志
sudo journalctl -u docker.service | grep loki
查看 loki 配置
docker plugin inspect loki
发表回复