在Zabbix for Nginx中创建发现规则

Creating a discovery rule in Zabbix for Nginx

提问人:archer1 提问时间:11/18/2023 最后编辑:archer1 更新时间:11/22/2023 访问量:31

问:

我有一台运行 nginx 的服务器,不同的 Web 资源有大量的配置,每个配置都有自己的重定向规则和上游。

错误不时出现在不同的日志中(每个域都有自己的日志),例如(不同域的三个示例)。

2023/11/17 16:00:27 [error] 90304#90304: *16977866956 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 10.0.0.1, server: my1.site.com, request: "GET /papi/1.0/40-a46a-bdd7e4749 HTTP/1.1", upstream: "http://10.0.0.2:30415/60-d74f", host: "my1.site.com"
2023/11/17 16:00:27 [error] 90305#90305: *16977868169 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 10.0.58.1, server: my2.site.com, request: "PUT /papi/1.0/b9ad-4c28 HTTP/1.1", upstream: "http://10.0.0.3:30415/papi/1.0/c28-b913-02aebafeea", host: "my2.site.com"
2023/11/17 16:00:28 [error] 90301#90301: *16977870167 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 10.0.0.8, server: my3.site.com, request: "GET /papi/1.0/d-6329-4c78-ba08 HTTP/1.1", upstream: "http://10.0.0.92:30415/912d-6329-", host: "my3.site.com"

我需要从Zabbix接收有关日志中是否存在错误的信息,例如,我正在尝试计算最后一分钟的匹配次数

awk '($0 >= from)' from="$(LC_ALL=C date +"%Y/%m/%d %H:%M" -d -1minute)" /var/log/nginx/*  | grep "Connection timed out" | wc -l

我将发现的错误数发送给Zabbix,如果错误数大于我的触发阈值,则触发触发器。例如,图表

但是我有很多不同的域在 Nginx 上提供服务,并且我也有几个这样的环境和其他域。因此,由此产生的错误数量不是特别有用,因为无法了解发生了哪些特定域错误

根据我提供的日志,也许有一个选项,不仅可以接收有关特定时间段内错误数量的信息,还可以将它们与域进行比较并将所有这些信息传输到Zabbix。

理想情况下,为此,请在 zabix 模板中使用发现规则。也就是说,根据收到的有关该域的数据和为该域发现的错误数,自动创建一个带有该域名称和触发器的新项,以便将来发现的所有错误都与该域进行比较,如果Zabbix中已经存在该域的项, 并且不需要(例如,已将新配置添加到新域的 Nginx),再次创建一个新项目

我仍然无法弄清楚如何正确实现它。也许有人有一个简单的解决方案?

nginx 监控 zabbix-custom-reports

评论


答:

0赞 Iron Bishop 11/22/2023 #1

您可以创建发现来查找所有域,例如sed '/.*host: "\([^"]\)".*/\1/' | uniq

然后创建一个项目原型,将域作为参数 () 添加到已有的脚本中。生成的命令示例:$1awk '($0 >= from)' from="$(LC_ALL=C date +"%Y/%m/%d %H:%M" -d -1minute)" /var/log/nginx/* | grep "Connection timed out" | grep $1 | wc -l