docker-compose部署loki+promtail+grafana。 收集项目日志,docker容器日志。全网最详细,不包括k8s
服务介绍
loki 2.6.1 数据库;进行日志聚合处理
promtail 2.1.0 日志收集工具
grafana 9.5.18 日志显示,可以通过各种标签和表达式过滤显示日志
版本和配置文件一致
一、 环境准备
mkdir loki/{conf,data} -p
mkdir promtail
chmod 777 loki/data
二、配置文件准备
loki
vim loki/conf/loki-config.yaml
server:
http_listen_port: 3100
common: #通用配置
path_prefix: /loki
storage:
filesystem:
chunks_directory: /loki/chunks
rules_directory: /loki/rules
replication_factor: 1
ring:
kvstore:
store: inmemory
schema_config:
configs:
- from: 2020-10-24 # 架构配置的生效日期
store: boltdb-shipper # 存储类型
object_store: filesystem # 对象存储类型为文件系统
schema: v11 # 架构版本
index: # 索引配置
prefix: index_ # 索引前缀
period: 24h # 索引周期
storage_config: # 存储相关
boltdb_shipper:
active_index_directory: /loki/boltdb-shipper-active # 活动索引的目录
cache_location: /loki/boltdb-shipper-cache # 缓存位置
cache_ttl: 24h # 缓存的过期时间
shared_store: filesystem # 共享存储类型为文件系统
filesystem:
directory: /loki/chunks # 文件系统的目录
compactor:
working_directory: /loki/boltdb-shipper-compactor # 紧缩器的工作目录
shared_store: filesystem # 共享存储类型为文件系统
limits_config:
reject_old_samples: true # 是否拒绝旧样本
reject_old_samples_max_age: 72h # 72小时之前的样本被拒绝
max_entries_limit_per_query: 9999 # 数值改为自己想要的最大查询行数
ingestion_rate_mb: 32 # mb单位,每个用户每秒的采样率限制 不设置客户端会报错
ingestion_burst_size_mb: 64 # 每个用户允许的采样突发大小
chunk_store_config:
max_look_back_period: 72h # 为避免查询超过保留期的数据,必须小于或等于下方的时间值
table_manager:
retention_deletes_enabled: true # 保留删除开启
retention_period: 72h # 超过72h的块数据将被删除
ruler:
alertmanager_url: http://localhost:9093
promtail
vim promtail/promtail-config.yaml
server: http_listen_port: 9080 #云服务器需开放9080端口 grpc_listen_port: 0 positions: filename: /tmp/positions.yaml #loki地址 clients: - url: http://123.123.123.123:3100/loki/api/v1/push
#我名词定义是 ”环境-服务-文件/容器“ scrape_configs: - job_name: demo-servername-file static_configs: - targets: - localhost labels: client: demo #自定义变量 定义环境 job: servername-file #变量定义类型 __path__: /data/server/logs/*.log #收集程序输出的日志 - job_name: dev-servername-file static_configs: - targets: - localhost labels: client: dev job: servername-file __path__: /data/server/logs/*.log
三、docker-compose.yml文件
vim docker-compose.yml #名称可以自己自定义。 loki+promtail+grafana三个服务可以放不同机器
version: '3' services:
#数据库 loki: container_name: loki image: grafana/loki:2.6.1 ports: - "3100:3100" - "9095:9095" volumes: - ./loki/data:/var/loki - ./loki/conf/loki-config.yaml:/etc/loki/local-config.yaml user: root #不开报错 command: ["-config.file=/etc/loki/local-config.yaml"] #收集 promtail: image: grafana/promtail:2.1.0 container_name: promtail restart: always ports: - 9080:9080 volumes: - ./promtail/promtail-config.yaml:/opt/promtail-config.yaml - /data/server/logs/:/data/server/logs/ #文件日志路径挂到容器 - /etc/localtime:/etc/localtime:ro privileged: true #不开报错 deploy: resources: limits: memory: 2G reservations: memory: 200M logging: driver: json-file options: max-size: "200m" max-file: "4" command: ["-config.file=/opt/promtail-config.yaml"] #web界面。 有的就不需要再部署了,都一样 grafana: image: grafana/grafana:9.5.18 restart: "always" ports: - 3000:3000 container_name: "grafana" volumes: - "./grafana/grafana.ini:/etc/grafana/grafana.ini" #配置文件自行拷贝出来。通过docker run 启动grafana容器。 docker cp拷贝出来后杀掉容器 - "./grafana/grafana-storage:/var/lib/grafana" - "/etc/localtime:/etc/localtime:ro"
启动 一般是没问题的。到这,文件收集结束了。 剩下docker收集
docker-compose -f docker-compose.yml up -d
四、在要被监控的机器docker安装loki插件
loki2.2以上 ,成功会提示 已安装插件****
docker plugin install registry.docker.com/grafana/loki-docker-driver:main --alias loki --grant-all-permissions
五、docker配置loki相关内容
三个方法
1,全局配置; /etc/docker/daemon.json 最后行指定阿里云改成自己得仓库 。 中间指定loki数据库
{ "log-driver": "loki", "log-opts": { "loki-url": "http://123.123.123.123:3100/loki/api/v1/push", "max-size": "50m", "max-file": "10" }, "registry-mirrors": ["https://registry.docker-cn.com"] }
2,docker run 启动配置
docker run --rm --name=nginx --log-driver=loki --log-opt loki-url="http://123.123.123.123:3100/loki/api/v1/push" --log-opt max-size=50m --log-opt max-file=10 grafana/grafanax
3,docker-compose 配置 我用得这个
logging: driver: loki #驱动器指定loki options: loki-url: "http://123.123.123.123:3100/loki/api/v1/push" #指定loki地址 max-size: "50m" #日志最大大小 max-file: "4" #日志最大数量 loki-external-labels: "client=demo,job=servername-docker" #自定义标签。方便查询 文件我是servername-file 这里-docker 方便自己看
配置完重启docker或重启容器
六、配置grafana 全图文小白操作
打开grafana http://123.123.123.123:3000
1,设置中文,方便自己查看
2.添加loki数据源
3,查看日志
4, 使用教程
刚才定义的两个标签。 其他标签不管他,容器传过来的
也可以直接看有哪些文件
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)