请选择 进入手机版 | 继续访问电脑版

loki收集docker容器里运行服务的日志,loki+grafana

[复制链接]
茂忠想你 发表于 2021-1-1 17:45:36 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
Java spring在docker运行,做了logbck后发现日志不输出到容器里目次(挂载目次)而是通过docker log 检察大概还要在pom.xml下加docker插件依赖,非常贫苦
 最背面附上 loki-local-config.yaml和promtail-docker-config.yaml设置文件
平凡收集loki+grafana+promtail
loki举行日志聚合处理  雷同elk中的es
promtail是日志收集,雷同elk中的logstash filebeat等,如果是只收集docker容器的日志则可以用loki的docker plugin替代
grafana是日志显示,雷同elk中的kibana,可以通过各种标签和表达式过滤显示日志
  1. version: "3"services:  loki:    image: grafana/loki    container_name: loki    restart: always    ports:      - "3100:3100"    volumes:      - $PWD:/etc/loki    command: -config.file=/etc/loki/loki-local-config.yaml  promtail:    image: grafana/promtail    container_name: promtail    restart: always    volumes:      - $PWD:/etc/promtail  #当前目次下挂载对应      - /app/promtail:/opt  #挂载      - /app/promtail/log:/var/log  #挂载    command:       -config.file=/etc/promtail/promtail-docker-config.yaml    grafana:    image: grafana/grafana:master    restart: always    environment:    - TZ=Asia/Shanghai    - LANG=zh_CN.UTF-8    ports:    - 3000:3000
复制代码
安装loki的docker plugin
  1. docker plugin install grafana/loki-docker-driver:latest --alias loki --grant-all-permissions
复制代码
docker版本13安装失败了,18 19正常
两种方式 全局和指定容器


  • 设置daemon.json,收集今后创建的所有容器的日志(注意,是设置daemon.json后重启docker服务后创建的容器才会把日志输出到loki)。
  • 新建容器时指定logging范例为loki,这样只有指定了logging的容器才会输出到loki
 
全局收集设置
编辑daemon.json。linux下默认路径是/etc/docker/daemon.json (需要sudo), windows则默认是%userprofile%\.docker\daemon.json
 
  1. {  "log-driver": "loki",  "log-opts": {    "loki-url": "http://YOUR_IP:3100/loki/api/v1/push",    "max-size": "50m",    "max-file": "10"  },  "registry-mirrors": ["https://registry.docker-cn.com"]}
复制代码
 
记得把YOUR_IP换成loki所在主机的IP,一般都是本机的局域网地点,如果loki映射的端口换了记得这里也需要换。镜像堆栈地点也可以换成自己云服务的。
此中max-size表现日志文件最大巨细,max-file表现最多10个日志文件,都是对单个容器来说的。
 
然后重启docker服务。
  1. sudo systemctl restart docker
复制代码
在此之后创建的容器默认都会把日志发送到loki。
 
如果不全局设置,而只想特定的容器举行日志收集,则根据启动容器的方式,有两种设置方法。
docker run设置日志输出到loki
通过docker run启动容器,可以通过--log-driver来指定为loki。示比方下
  1. 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
复制代码
  1. --log-driver=loki指定日志驱动器为loki
复制代码
  1. --log-opt loki-url则指定了loki的url
复制代码
  1. --log-opt max-size日志最大巨细
复制代码
  1. --log-opt max-file日志文件最大数量
复制代码
docker-compose 设置日志输出到loki
docker-compose 小于3.4可以对需要日志输出的设置添加设置如下 
每个容器服务加一个,比方
  1. version: "3"services:  promtail:    image: grafana/promtail    container_name: promtail    restart: always    volumes:      - $PWD:/etc/promtail      - /app/promtail:/opt      - /app/promtail/log:/var/log    command:       -config.file=/etc/promtail/promtail-docker-config.yaml    logging:      driver: loki      options:        loki-url: "http://123.123.123.123:3100/loki/api/v1/push"        max-size: "50m"        max-file: "10"
复制代码
注意:max-size和max-file这里需要加引号
 
对于3.4极其以上版本可以通过界说模板来淘汰代码量
 
  1. 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"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 设置loki 自带查询示例 ,loki文档https://www.bookstack.cn/read/loki/logql.md
网友翻译的中文查询
https://blog.csdn.net/weixin_44267608/article/details/105264432  
最后一图
同名服务大概容器的会全显示日志,比方名字:a  会显示所有a服务或容器的日志 不分主机
主机的会显示这个主机所有发过来的日志,比方主机b  会显示b主机下所有传过来的服务大概容器
 
 




 
附上loki-local-config.yaml
这个似乎不是最新版 ,可以看官方设置 
  1. auth_enabled: falseserver:  http_listen_port: 3100  #端口ingester:  lifecycler:    address: 127.0.0.1 #ip    ring:      kvstore:        store: inmemory      replication_factor: 1    final_sleep: 0s  chunk_idle_period: 5m  chunk_retain_period: 30sschema_config:  configs:  - from: 2018-04-15    store: boltdb    object_store: filesystem    schema: v9    index:      prefix: index_      period: 168h  #生存时间storage_config:  boltdb:    directory: /tmp/loki/index  filesystem:    directory: /tmp/loki/chunkslimits_config:  enforce_metric_name: false  reject_old_samples: true  reject_old_samples_max_age: 168hchunk_store_config:  max_look_back_period: 0table_manager:  chunk_tables_provisioning:    inactive_read_throughput: 0    inactive_write_throughput: 0    provisioned_read_throughput: 0    provisioned_write_throughput: 0  index_tables_provisioning:    inactive_read_throughput: 0    inactive_write_throughput: 0    provisioned_read_throughput: 0    provisioned_write_throughput: 0  retention_deletes_enabled: false  retention_period: 0
复制代码
promtail-docker-config.yaml
 
  1. server:   http_listen_port: 0  grpc_listen_port: 0positions:  filename: /etc/promtail/positions.yaml   # 游标记载上一次同步位置  sync_period: 10s #10秒钟同步一次clients:  - url: http://x.x.x.x:3100/loki/api/v1/pushscrape_configs:- job_name: test-java-log  static_configs:  - targets:      - localhost    labels:      job: test      #name: tt    #多可以命名几个      __path__: /opt/*.log   # docker运行时已经把宿主机的目次 /opt/ 映射给了promtail 容器的 /opt/,所以这个地方可以直接访问log文件
复制代码
 

来源:https://blog.csdn.net/u014756339/article/details/111992382
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题

专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )