目标:最近开发人员时常需要查看各个环境项目中容器日志,而直接通过ssh终端使用docker logs命令查看日志不太安全,这会导致很多人员知道服务器的账户和密码,有没有一种可以收集所有容器日志的平台系统。那么这套系统就是Loki+Grafana组合。
最终效果:与docker logs控制台的信息一致,可实时显示,也可以过滤。
需要的工具:Loki,loki-docker-driver,Grafana
通过安装 docker loki plugin 直接采集docker容器日志,并推送至loki。不需要promtail应用。
现在使用的环境和版本:grafana/loki:2.8.2
1、在需要监控的主机中,安装容器grafana/loki:2.8.2
创建目录:/home/apps/loki,
进入目录:cd /home/apps/loki,创建loki配置文件vi loki-config.yaml,并给权限chmod 777 ./*,不需要修改。
auth_enabled: false
server:
http_listen_port: 3100
grpc_listen_port: 3110
grpc_server_max_recv_msg_size: 1073741824 #grpc最大接收消息值,默认4m
grpc_server_max_send_msg_size: 1073741824 #grpc最大发送消息值,默认4m
ingester:
lifecycler:
address: 127.0.0.1
ring:
kvstore:
store: inmemory
replication_factor: 1
final_sleep: 0s
chunk_idle_period: 5m
chunk_retain_period: 30s
max_transfer_retries: 0
max_chunk_age: 20m #一个timeseries块在内存中的最大持续时间。如果timeseries运行的时间超过此时间,则当前块将刷新到存储并创建一个新块
schema_config:
configs:
- from: 2023-07-03
store: boltdb
object_store: filesystem
schema: v11
index:
prefix: index_
period: 168h
storage_config:
boltdb:
directory: /opt/loki/index #存储索引地址
filesystem:
directory: /opt/loki/chunks
limits_config:
enforce_metric_name: false
reject_old_samples: true
reject_old_samples_max_age: 168h
ingestion_rate_mb: 30 #修改每用户摄入速率限制,即每秒样本量,默认值为4M
ingestion_burst_size_mb: 15 #修改每用户摄入速率限制,即每秒样本量,默认值为6M
chunk_store_config:
#max_look_back_period: 168h #回看日志行的最大时间,只适用于即时日志
max_look_back_period: 0s
table_manager:
retention_deletes_enabled: false #日志保留周期开关,默认为false
retention_period: 0s #日志保留周期
创建容器grafana/loki:2.8.2,容器挂载卷-v不要删除否则会报错
docker run -d \
--name loki \
--privileged=true \
-v /home/apps/loki:/mnt/config \
-v /home/apps/loki/wal:/wal \
-v /home/apps/loki/index:/opt/loki/index \
-v /home/apps/loki/chunks:/opt/loki/chunks \
-p 3100:3100 \
-p 9096:9096 \
--restart=always \
grafana/loki:2.8.2 -config.file=/mnt/config/loki-config.yaml
这个时候容器会报错重启,因为报错没有权限
解决:进入目录cd /home/apps/loki,授权chmod -R 777 *
删除容器后再执行创建。docker rm -f loki
2、安装loki-docker-driver驱动
docker plugin install grafana/loki-docker-driver:latest --alias loki --grant-all-permissions
3、安装Grafana
docker run -d -p 3000:3000 --name=grafana -v /etc/localtime:/etc/localtime:ro grafana/grafana
本地防火墙开放3100,和3000端口
访问http://主机IP:3000,用户名默认应该是admin/admin
4、为单个容器添加日志驱动
先停止删除原来你想监控的容器。
再重新创建容器:
docker run --log-driver=loki \
--log-opt loki-url="http://你的主机IP:3100/loki/api/v1/push" \
--log-opt loki-retries=5 \
--log-opt loki-batch-size=400 \
--log-opt max-size=50m \
--log-opt max-file=3 \
--restart=always --name 你的容器名 镜像名:镜像版本
5、添加数据源
更改grafana为中文界面
左侧点击connections,连接
添加连接,搜索Loki,选中数据源
添加URL,地址为http://主机IP:3100,下方点save/test即可
添加成功
点击左侧探索, 进入查看页面。完成添加。