Loki 收集日之后配置钉钉告警通知
·
接上篇,上一篇已经配置了如何安装部署Loki + Promtail + Grafana收集日志与展示日志,接下里配置日志持久化存储以及日志告警。
1、创建数据存储目录,并设置好权限。
2、配置日志查询语句,用来检测过去 5 分钟内 ERROR 日志是否超过 5 条
sum(count_over_time({job="system-logs"} |= "ERROR" [5m])) > 5
| 部分 | 含义 |
|---|---|
{job="system-logs"} |
筛选出所有 job="system-logs" 的日志(就是你的系统日志) |
|= "ERROR" |
日志内容中包含 ERROR 这个关键词(区分大小写) |
[5m] |
时间范围:过去 5 分钟 |
count_over_time(...[5m]) |
统计这 5 分钟内有多少条日志 |
sum(...) |
汇总(如果有多个来源,把它们加起来) |
> 5 |
如果总数大于 5,就触发告警 |

3、配置触发速度和恢复速度

4、第五步接入告警方式,我这选择钉钉通知告警


5、配置通知消息

6、测试验证
配置完成后测试一下看看能否发送消息到钉钉群
(1)、写入几条告警日志进行测试
echo "ERROR: 测试告警触发 - 模拟服务异常" >> /var/log/messages
(2)、点击测试

也可以在服务器上手动触发进行测试
curl -X POST \
'https://oapi.dingtalk.com/robot/send?access_token=f35ed80e3e61c87451bbd4d2c0a492cd6c607a21288abaa029cbd93783cf0af6' \
-H 'Content-Type: application/json' \
-d '{
"msgtype": "text",
"text": {
"content": "ERROR:这是一条测试消息"
}
}'

这个时候收到的告警有个超链接,默认地址可能打不开,需要改一下才行,改成真实地址

重启 Grafana 容器
docker compose restart grafana
(3). 重新触发一条告警,验证链接
发一条新的 ERROR 日志,等告警触发后,钉钉消息里的链接应该变成:
http://192.168.158.183:3001/alerting/list
点开就能正常跳转了。如果不生效的话,就得要进入容器里改了
进入 Grafana 容器:
docker exec -it --user root loki-grafana-1 /bin/bash
编辑配置文件:
vi /etc/grafana/grafana.ini
1. 找到 [server] 部分,修改 root_url:
按 / 搜索 root_url:
找到这一行:
;root_url = %(protocol)s://%(domain)s:%(http_port)s/
在下面新增一行
root_url = http://192.168.158.183:3001
2. 保存退出
3. 重启 Grafana:
docker compose restart grafana
更快的方法:用 echo 直接追加
如果 vi 用不惯,也可以用这个命令直接追加配置(覆盖默认值):
docker exec --user root loki-grafana-1 bash -c 'echo -e "\n[server]\nroot_url = http://192.168.158.183:3001" >> /etc/grafana/grafana.ini'
验证
重启后,发几条 ERROR 日志触发告警,看钉钉消息里的链接是否变成了 http://192.168.158.183:3001/alerting/list
这个时候直接点击钉钉群新收到的日志告警就能直达告警规则列表了

对于配置文件稍做了一些改动
promtail-config.yaml
[root@prometheus loki]# cat promtail-config.yaml
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url: http://loki:3100/loki/api/v1/push
scrape_configs:
- job_name: system
static_configs:
- targets: [localhost]
labels:
job: system-logs
host: prometheus
__path__: /var/log/{*.log,messages*}
- job_name: docker
docker_sd_configs:
- host: unix:///var/run/docker.sock
refresh_interval: 10s
relabel_configs:
- source_labels: [__meta_docker_container_name]
regex: '/(.*)'
target_label: container
- source_labels: [__meta_docker_container_log_stream]
target_label: stream
[root@prometheus loki]#
docker-compose.yaml
[root@prometheus loki]# cat docker-compose.yaml
version: "3.3"
networks:
loki:
services:
loki:
image: grafana/loki:latest
restart: always
ports:
- "3100:3100"
volumes:
- ./loki-data:/loki
command: -config.file=/etc/loki/local-config.yaml
networks:
- loki
promtail:
image: grafana/promtail:latest
restart: always
volumes:
- /var/log:/var/log
- ./promtail-config.yaml:/etc/promtail/config.yml:ro
- /var/run/docker.sock:/var/run/docker.sock
- ./promtail-positions:/tmp # 新增:持久化采集进度
command: -config.file=/etc/promtail/config.yml
networks:
- loki
grafana:
image: grafana/grafana:latest
restart: always
ports:
- "3001:3000"
volumes:
- ./grafana-data:/var/lib/grafana
- ./grafana-plugins:/var/lib/grafana/plugins # 可选:插件持久化
environment:
- GF_PATHS_PROVISIONING=/etc/grafana/provisioning
- GF_AUTH_ANONYMOUS_ENABLED=true
- GF_AUTH_ANONYMOUS_ORG_ROLE=Admin
- GF_FEATURE_TOGGLES_ENABLE=alertingSimplifiedRouting,alertingQueryAndExpressionsStepMode
- GF_SERVER_ROOT_URL=http://192.168.158.183:3001
- GF_SERVER_SERVE_FROM_SUB_PATH=true
entrypoint:
- sh
- -euc
- |
mkdir -p /etc/grafana/provisioning/datasources
cat <<EOF > /etc/grafana/provisioning/datasources/ds.yaml
apiVersion: 1
datasources:
- name: Loki
type: loki
access: proxy
orgId: 1
url: http://loki:3100
basicAuth: false
isDefault: true
version: 1
editable: false
EOF
/run.sh
networks:
- loki
[root@prometheus loki]#
钉钉机器人配置
到这里日志采集、存储、展示、告警已全部跑通。

更多推荐




所有评论(0)