Loki+promtail+Grafana监控docker容器日志

该文介绍了如何在生产环境中利用Loki、Promtail和Grafana监控Docker容器的日志。首先,在日志服务器上部署Loki和Grafana,然后在需要监控的主机上配置Promtail来收集日志。通过修改Promtail配置文件,可以特定于某个容器进行日志监控。当容器ID变化时,使用sed命令动态替换配置文件中的容器ID,确保日志监控的连续性。
摘要由CSDN通过智能技术生成

目标:监控docker容器的日志,适用于生产环境

效果:

 需要的工具:Loki,promtail,Grafana

通过安装promtail容器收集日志,并把日志发送给loki存储处理,由Grafana展示日志。

基于 Loki 的日志堆栈由 3 个组件组成:

  • promtail是代理,负责收集日志并发送给 Loki。
  • loki是主服务器,负责存储日志和处理查询。
  • Grafana用于查询和显示日志。

参考官网的信息:Install Grafana Loki with Docker or Docker Compose | Grafana Loki documentation 

这里建议使用单独一台日志服务器安装grafana/loki,和grafana。

在需要监控日志的主机中安装grafana/promtail。

当然也可以安装在一台主机中。

1、在日志服务器的主机中,安装容器grafana/loki:2.8.2

创建目录:/home/apps/loki,

进入目录:cd /home/apps/loki,使用wget下载这个配置文件,下载完成后给执行权限chmod +x loki-config.yaml

wget https://raw.githubusercontent.com/grafana/loki/v2.8.2/cmd/loki/loki-local-config.yaml -O loki-config.yaml

如果无法下载,可以复制下方内容,创建loki配置文件vi loki-config.yaml

auth_enabled: false

server:
  http_listen_port: 3100
  grpc_listen_port: 9096

common:
  instance_addr: 127.0.0.1
  path_prefix: /tmp/loki
  storage:
    filesystem:
      chunks_directory: /tmp/loki/chunks
      rules_directory: /tmp/loki/rules
  replication_factor: 1
  ring:
    kvstore:
      store: inmemory

query_range:
  results_cache:
    cache:
      embedded_cache:
        enabled: true
        max_size_mb: 100

schema_config:
  configs:
    - from: 2020-10-24
      store: boltdb-shipper
      object_store: filesystem
      schema: v11
      index:
        prefix: index_
        period: 24h

ruler:
  alertmanager_url: http://localhost:9093

# By default, Loki will send anonymous, but uniquely-identifiable usage and configuration
# analytics to Grafana Labs. These statistics are sent to https://stats.grafana.org/
#
# Statistics help us better understand how Loki is used, and they show us performance
# levels for most users. This helps us prioritize features and documentation.
# For more information on what's sent, look at
# https://github.com/grafana/loki/blob/main/pkg/usagestats/stats.go
# Refer to the buildReport method to see what goes into a report.
#
# If you would like to disable reporting, uncomment the following lines:
#analytics:
#  reporting_enabled: false

 运行容器

docker run --name loki -d -v /home/apps/loki:/mnt/config -p 3100:3100 grafana/loki:2.8.2 -config.file=/mnt/config/loki-config.yaml

2、在需要监控日志的服务器中,创建promtail容器

 进入目录:cd /home/apps/promtail,使用wget下载这个配置文件,并给执行权限chmod +x promtail-config.yaml,并参考下方的配置,特别注意要增加两项内容,表示通过流水线操作已经定义的docker容器日志。参考文档Configuration | Grafana Loki documentation

wget https://raw.githubusercontent.com/grafana/loki/v2.8.2/clients/cmd/promtail/promtail-docker-config.yaml -O promtail-config.yaml

pipeline_stages:
  - docker: {}

如果无法下载,可以复制下方内容,创建promtail配置文件vi promtail-config.yaml

server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml

clients:
  - url: http://日志服务器IP地址或者容器名:3100/loki/api/v1/push

scrape_configs:
- job_name: 填项目名称-英文:如hello
  pipeline_stages:
  - docker: {}
  static_configs:
  - targets:
    - localhost
    labels:
      job: 填标签名-英文:如hello-dev
      __path__: /var/log/*/*.log

运行promtail容器,这里映射docker的日志路径,一般路径在/var/docker/containers。如果是在本机中运行的有loki,那么在这条运行命令中要加入--link loki,才能支持使用配置中的url填入容器名称。

docker run --name promtail -d -v /home/apps/loki:/mnt/config -v /home/docker/containers/:/var/log -v /etc/localtime:/etc/localtime:ro grafana/promtail:2.8.2 -config.file=/mnt/config/promtail-config.yaml

 3、在日志服务器中,安装grafana

docker run -d --name grafana -e TZ="Asia/Shanghai" -v /etc/localtime:/etc/localtime:ro -p 3000:3000 grafana/grafana

 4、访问grafana,添加数据源

grafana地址:http://日志服务器IP:3000

默认用户名和密码为:admin/admin

更改grafana为中文界面

左侧点击connections,连接 

添加连接,搜索Loki,选中数据源

添加URL,地址为http://日志服务器主机IP:3100,下方点save/test即可 

添加成功 

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

tips:做到这里的小伙伴,应该还有疑问,我只想监控单个容器的日志,怎么办呢。那么就需要在创建promtail容器时,path路径指定容器镜像名称。固定的容器ID,就可以了。

 但是还是有疑问,我们的容器环境一但更新重启后镜像ID会改变,这个如何解决。这里我用到了sed替换方法,可以参考如下写法。只要每次创建容器要求容器名称是一样的就行。

sed -i "20c \      __path__: /var/log/`docker inspect -f="{{.Id}}" 容器名称`/*.log" /home/apps/loki/promtail-config.yaml

再重启promtail容器

docker restart promtail 

这里表示使用docker命令获取到完整的容器ID,替换promtail-config.yaml文件第20行的内容。

这样就完美的解决掉容器更新带来的问题了。此方法适用于生产环境,首次创建后,生产环境日志过多,会暂时占用过多CPU资源,等待同步完成后,就可以正常查询显示了,实测22G日志文件,用了一上午promtail同步完成。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值