Loki+Grafana监控docker容器日志

文章介绍了如何通过Loki和Grafana搭建一个日志收集系统,以安全地查看和管理Docker容器的日志,避免直接使用ssh和dockerlogs带来的安全隐患。作者警告该方法不适用于生产环境,因日志量大可能导致服务器性能下降。推荐了一个适用于生产环境的替代方案,并详细列出了安装Loki、loki-docker-driver和Grafana的步骤,以及如何配置容器以使用loki日志驱动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目标:最近开发人员时常需要查看各个环境项目中容器日志,而直接通过ssh终端使用docker logs命令查看日志不太安全,这会导致很多人员知道服务器的账户和密码,有没有一种可以收集所有容器日志的平台系统。那么这套系统就是Loki+Grafana组合。

重要提醒:不要用于生产环境,否则loki容器日志过多导致服务器CPU占满,生成环境会异常缓慢,博主在摸索过程中吃亏了,血淋淋的教训。

适用于生产环境的方法,移步至另一篇博客:http://t.csdn.cn/cOiqD

最终效果:与docker logs控制台的信息一致,可实时显示,也可以过滤。

需要的工具:Loki,loki-docker-driver,Grafana

通过安装 docker loki plugin 直接采集docker容器日志,并推送至loki。不需要promtail应用。

现在使用的环境和版本:grafana/loki:2.8.2

在安装之前可以了解这个信息,docker容器控制台包含了标准输出和错误输出,我在容器的log日志中只有少量的信息。通过logging driver驱动转发给对应的应用。docker容器默认是json-file。

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即可 

添加成功 

点击左侧探索, 进入查看页面。完成添加。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值