loki简介
介绍:Loki 由以下3个部分组成:
loki是主服务器,负责存储日志和处理查询。
promtail是代理,负责收集日志并将其发送给 loki 。
grafana用于 UI 展示。
一、promtail 部署
下载地址:https://github.com/grafana/loki/releases/download/v2.4.1/promtail-linux-amd64.zip
1、解压,下载官方配置模板并修改
mkdir /data/promtail
unzip promtail-linux-amd64.zip
wget https://raw.githubusercontent.com/grafana/loki/main/clients/cmd/promtail/promtail-local-config.yaml
vim promtail-local-config.yaml
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url: http://192.156.71.125:3100/loki/api/v1/push ## 此处lokiserver修改为服务器端地址
scrape_configs:
- job_name: application # job名称,自定义
static_configs:
- targets: # 如测试环境多个应用多个路径,从此行开始复制修改对应的标签
- localhost
labels:
job: tomcat # 监控类型
project: tjhlwjg # 项目名称自定义
host: 192.156.71.125 # 建议修改为本机ip,方便过滤
__path__: /data/tomcat_tjjg/logs/catalina.out # tomcat日志路径
2、启动promtail
cd /data/promtail
nohup ./promtail-linux-amd64 --config.file=promtail.yaml &
二、loki 部署
下载地址:https://github.com/grafana/loki/releases/download/v2.4.1/loki-linux-amd64.zip
1、解压,下载官方配置模板并修改
mkdir /data/loki
unzip loki-linux-amd64
wget https://raw.githubusercontent.com/grafana/loki/master/cmd/loki/loki-local-config.yaml
vim loki-local-config.yaml # 这里不需要alertmanager,注释掉
auth_enabled: false
server:
http_listen_port: 3100
grpc_listen_port: 9096
common:
path_prefix: /tmp/loki
storage:
filesystem:
chunks_directory: /tmp/loki/chunks
rules_directory: /tmp/loki/rules
replication_factor: 1
ring:
instance_addr: 127.0.0.1
kvstore:
store: inmemory
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
# 下面的配置为新增的,不配置日志太大会报错
limits_config:
enforce_metric_name: false
reject_old_samples: true
reject_old_samples_max_age: 168h
ingestion_rate_mb: 30 #修改每用户摄入速率限制,即每秒样本量,默认值为4M
ingestion_burst_size_mb: 15 #修改每用户摄入速率限制,即每秒样本量,默认值为6M
2、启动loki
cd /data/loki
nohup ./loki-linux-amd64 --config.file=loki.yaml &
三、配置grafana
用 docker 启动 grafana:
docker run --restart=always --privileged=true --name grafana -p 3000:3000 -e TZ=Asia/Shanghai -e LANG=zh_CN.UTF-8 grafana/grafana:master
1、添加loki数据源
2、输入loki服务器的ip和端口(3100)、其他默认,然后Save&Test
3、在Explore中选择loki,可以根据自定义的标签进行过滤
4、loki的日志页面如下
四、Loki查看日志
Loki 选择器
查询表达式
- 对于查询表达式的标签部分,将其包装在花括号中{}
- 使用键值对的语法来选择标签
- 多个标签表达式用逗号分隔
{filename="/var/log/nginx/pcb.access.log",job="nginxlogs"}
匹配运算符
- = 等于
- != 不相等
- =~ 正则表达式匹配
- !~ 不匹配正则表达式
Loki 过滤器
搜索表达式
- 搜索表达式可以只是文本或正则表达式
- 表达式接受RE2语法
- 匹配项区分大小写
过滤器类型
- |= 行包含字符串。
- != 行不包含字符串。
- |~ 行匹配正则表达式。
- !~ 行与正则表达式不匹配
{filename="/var/log/nginx/pcb.access.log",job="nginxlogs"} |~ "\"nx_status\":200"
五、promtail 用法
客户端收集日志
将需要收集的日志挂载到 promtail 容器
- 客户端仅启动 promtail 日志收集容器
- -v 宿主机日志目录:/var/log/****
promtail 配置说明
- 支持通配符 *, 表示所有,比如 *.log
- 多个日志目录可以使用 {path1,path2,…pathN} 区分
- 不同的 job 使用 targets 区分
- targets:
- localhost
labels:
job: logsname1
__path__: /var/log/path1/*log
- targets:
- localhost
labels:
job: logsname2
__path__: /var/log/path2/*log
注意事项
promtail 报 429 错误
收集的日志太多了,超过了 loki 的限制
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
参考: