概述
PLG日志系统具有轻量化,部署简单,配置单一,浪费资源少等优势,模块组成由Prontaik+Loki+Grafaba组成。
Promtail
Promtail 是代理,负责收集日志并将其发送给loki。对标ELK中的Logstash。
Promtail是一个日志收集的代理,它的主要工作模式是发现存储在磁盘上的日志文件,并将其与一组标签关联的日志文件转发到 Loki,它通常部署到需要监视应用程序的每台机器/容器上。Promtail主要是用来发现目标、将标签附加到日志流以及将日志推送到Loki。截止到目前,Promtail可以跟踪两个来源的日志:本地日志文件和systemd日志(仅支持AMD64架构)
Loki
Loki 是主服务器,负责存储日志和处理查询。对标ELK中的ElasticSearch。
Loki是一组可以组成一个功能齐全的日志堆栈组件,与其它日志系统不同的是,Loki只建立日志标签的索引而不索引原始日志消息,为日志数据设置一组标签,这意味着Loki的运营成本更低,效率也能提高几个数量级
Grafana
Grafana提供用户界面。对标ELK中的Kibana
Grafana是一款开源的可视化和分析软件,它允许用户查询、可视化、警告和探索监控指标。Grafana主要提供时间序列数据的仪表板解决方案,支持超过数十种数据源
处理流程
服务部署
- 服务端部署
- 创建yml文件
vim /data/plg/docker-compose.yml
version: "3"
networks:
loki:
services:
loki:
image: grafana/loki:2.6.1
container_name: PLG_loki
restart: unless-stopped
ports:
- "3100:3100"
volumes:
- /data/plg/etc/loki:/etc/loki
- /data/plg/data/loki:/loki
command: -config.file=/etc/loki/local-config.yaml
networks:
- loki
promtail:
image: grafana/promtail:2.6.1
container_name: PLG_promtail
restart: unless-stopped
volumes:
- /data/cc/logs/:/161/ #映射日志文件目录
- /data/plg/etc/promtail:/etc/promtail
command: -config.file=/etc/promtail/config.yml
networks:
- loki
grafana:
image: grafana/grafana:latest
container_name: PLG_grafana
restart: unless-stopped
ports:
- "3000:3000"
volumes:
#- /data/plg/etc/grafana/grafana.ini:/etc/grafana/grafana.ini
- /data/plg/data/grafana/:/var/lib/grafana/
- /data/plg/logs/grafana:/var/log/grafana
environment:
- GF_SECURITY_ADMIN_USER=admin #设置用户名admin
- GF_SECURITY_ADMIN_PASSWORD=Weihu12345 #设置密码(不设置默认admin/admin)
networks:
- loki
- 编写配置文件
- loki
vim /data/plg/etc/loki/local-config.yaml
auth_enabled: false #启用认证
server:
http_listen_port: 3100 #监听端口
common:
path_prefix: /loki #数据目录
storage:
filesystem:
chunks_directory: /loki/chunks
rules_directory: /loki/rules
replication_factor: 1 #副本数量,测试的情况下或者日志本身并不具备高数据安全要求的情况下就设置为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
limits_config:
# 这部分配置是为了增加日志采集的限制,默认的限制是很小的,很容易触发报错
# # 需要注意的是,报错本身只是会丢日志,不会导致采集器或者loki宕机
enforce_metric_name: false
reject_old_samples: true
reject_old_samples_max_age: 168h
ingestion_rate_mb: 40 #修改每用户摄入速率限制,即每秒样本量,默认值为4M
ingestion_burst_size_mb: 20 #修改每用户摄入速率限制,即每秒样本量,默认值为6M
chunk_store_config:
#max_look_back_period: 168h #回看日志行的最大时间,只适用于即时日志
max_look_back_period: 0s
table_manager:
retention_deletes_enabled: true #日志保留周期开关,默认为false
retention_period: 128h #日志保留周期
#配置alertmanager地址
ruler:
alertmanager_url: http://192.168.0.161: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
- promtail
vim /data/plg/etc/promtail/config.yml
server:
http_listen_port: 9080 #http监听端口
grpc_listen_port: 0
positions:
filename: /etc/promtail/positions.yaml #配置文件位置
clients:
- url: http://192.168.0.161:3100/loki/api/v1/push #Loki服务器推送地址
scrape_configs:
#多个日志目录配置多个job项
- job_name: obc-161-*log #job名称,相当于elk的索引
static_configs:
- targets:
- localhost #日志存放主机Loki地址
labels:
job: obclog-161-*log #标签
__path__: /161/obc/*.log #日志位置不支持下级目录,支持同级多个目录例如:/data/{A,B,C}/*log
3.启动服务
docker-compose -f /data/plg/docker-compose.yml up -d
4.Grafana接入Loki数据源
- 添加loki数据源
- 搜索日志