Grafana Loki
Loki的第一个稳定版本于2019年11月19日发布 是 Grafana Labs 团队最新的开源项目 是一个水平可扩展,高可用性,多租户的日志聚合系统 Loki 特性
Loki 组成
loki
是主服务器,负责存储日志和处理查询promtail
是代理,负责收集日志并将其发送给 lokiGrafana
用于 UI 展示演示环境拓扑
运行 grafana loki
$ docker run -ti -p 3000:3000 grafana/grafana:master
$ docker run -ti -p --name loki 3100:3100 grafana/loki:2.4.1
启动 promtail ,将 promtail 配置文件拷贝到宿主机
$ docker run -ti --name promtail grafana/promtail:2.4.1 -config.file=/etc/promtail/config.yml
$ mkdir /data/soft/promtail
$ docker cp promtail:/etc/promtail/config.yml /data/soft/promtail/config.yml
收集 nginx 日志
$ vim /data/soft/promtail/config.yml
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url: http://192.168.0.11:3100/loki/api/v1/push
scrape_configs:
- job_name: system
static_configs:
- targets:
- localhost
labels:
job: nginxlogs # job 名称
__path__: /var/log/nginx/*log # 收集日志路径
挂载 nginx 日志文件目录和 promtail 配置文件到容器
$ docker run -ti --name promtail \
-v /var/log/nginx/:/var/log/nginx/ \
-v /data/soft/promtail/config.yml:/etc/promtail/config.yml \
grafana/promtail:2.4.1 -config.file=/etc/promtail/config.yml
访问 grafana 面板
http://192.168.0.11:3000
添加数据源
配置 Loki 地址
使用 Loki
Explore
查询表达式
{filename="/var/log/nginx/pcb.access.log",job="nginxlogs"}
匹配运算符
{filename="/var/log/nginx/pcb.access.log",job="nginxlogs"} |~ "\"nx_status\":200"
将需要收集的日志挂载到 promtail 容器
promtail 配置说明
- targets:
- localhost
labels:
job: logsname1
__path__: /var/log/path1/*log
- targets:
- localhost
labels:
job: logsname2
__path__: /var/log/path2/*log
promtail 报 429 错误
level=warn ts=2021-12-02T06:27:01.372586524Z caller=client.go:349 component=client host=192.168.0.11:3100 msg="error sending batch, will retry" status=429 error="server returned HTTP status 429 Too Many Requests (429): entry with timestamp 2021-12-02 06:27:01.316127865 +0000 UTC ignored, reason: 'Per stream rate limit exceeded (limit: 3MB/sec) while attempting to ingest for stream '{filename=\"/var/log/nginx/nginx.log\", job=\"nginxlogs\"}' totaling 1697740B, consider splitting a stream via additional labels or contact your Loki administrator to see if the limt can be increased' for stream: {filename=\"/var/log/nginx/nginx.log\", job=\"nginxlogs\"},"
增加 Loki 限制
limits_config:
enforce_metric_name: false
reject_old_samples: true
reject_old_samples_max_age: 168h
ingestion_rate_mb: 40
ingestion_burst_size_mb: 20