运维123 - 夜莺监控（nighting n9e）
type: channel
link: https://www.sddts.cn/index.php/category/%E5%A4%9C%E8%8E%BA%E7%9B%91%E6%8E%A7/
items: 庆祝夜莺监控 5 周年
items: 使用夜莺插件监控阿里云资源遇到告警不告问题
items: 容器化部署夜莺监控v6.5.0
items: 升级夜莺监控从6.4.0到6.5.0
items: 从n9e版本v6 ga升级到6.4.0
items: 夜莺如何自定义数据采集脚本

庆祝夜莺监控 5 周年
type: item
date: 2025-04-28T02:36:58+00:00
description: 1 感想伴随着数字化的发展，逐渐成为生产、生活等方方面面的底座支撑。就像国家电网在保障电力供应，运维保障数字稳定。运维的过程包括架构分析、业务部署、监控、备份、安全等方面，而监控既是保障业务运行的探针，也是伴随数字生命周期的哨兵。数字基础设施包括计算和通信，基于 TCP/IP 等协议协同工作。保障数字基础设施稳定运行的指标也是基于 TCP/IP协议等，涉及 CPU、MEM、DISK 等操作系统监控物理资源；数据库、中间件等应用监控等。夜莺监控系统拥有扎实的架构设计，包含丰富的监控插件，为运维保障数字基础设施稳定运行提供了重要工作支持。2 方案当前，我在进行的是物联网公司的运维监控工作，涉及测试、生产、学习等环境。因此，分别部署测试夜莺、生产夜莺、学习夜莺共三套夜莺监控系统，相互隔离，降低复杂度。另外，针对不同监控类型，也部署多套 nagios、uptime-kuma。最终，统一接入 FlashDuty 实现统一告警平台。图：整体监控方案每天起床第一件事，也是查看 FlashDuty 告警。每天上班第一件事就是打开 FlashDuty 查看是否有告警。图：办公电脑浏览器页面（包含 uptime-kuma6 套，nagios2 套，夜莺监控 3 套）每天下班第一件事也是打开 FlashDuty 查看是否有告警。下班途中，我会经常关注 FlashDuty 手机客户端以及飞书告警通知信息。夜莺系统已经伴随整个运维保障工作。工作过程中，我会有一台单独的笔记本电脑放在我在左手边，作为运维监控大屏以及告警信息通知。图：现场办公环境照片3 实践3.1 部署监控代理在一台主机中，部署 agent 并调整 config.toml 文件。将 categraf 文件夹打包，放到 123pan。开启 123pan 直链功能。实际部署中就可以直接刷命令了。部署 agent 之后，可以在夜莺监控平台“基础设施-机器列表”里打标签，也可以通过在 categraf 的config.toml中打标签。监控对象少的情况下，使用第一种方式方便一些。机器多得时候，使用后者直接在 categraf 配置文件打标签会方便一些。3.2 配置其他监控日常使用到的中间件包括 Nginx、Mongodb、MySQL 等。为了方便监控配置，使用飞书整理了一张表格，竖列是中间件的名称，横列是针对中间件的部署、配置、运行以及夜莺监控配置等内容。categraf 监控配置也十分清晰，只需要找到对应目录对应文件，参考配置方法并修改相关参数即可。图： 包含中间件部署夜莺监控内容的飞书表格3.3 定制监控仪表夜莺监控系统部署过程方便，默认内置大量仪表盘开箱即用。日常工作中，面对多项目，多主机等环境，进行了若干实践调整，主要包括：针对主机监控，标签使用“项目名称-服务名称-主机名称”。针对中间件监控，标签使用“项目-中间件类型-实例名称”。图：Host 监控仪表盘页面图：中间件 RabbitMQ 监控仪表盘页面3.4 统一告警接收将部署各种监控的告警，包括 nagios、uptime-kuma、夜莺等纷纷接入 FlashDuty，实现统一告警平台。图：FlashDuty 集成中心页面4 实战4.1 数据支撑判断在物联网系统中，数十万设备通过连接服务接入平台。平台中的 JAVA 程序有内存泄露，通过剩余内存判断是否需要紧急重启。不着急的话就尽量在凌晨重启（可以下班了。可以睡觉了。）。图：长连接服务器集群监控仪表盘页面4.2 监控避免失误去年出了档子事儿，一大早7 点起来满手机全是告警。稳了稳神儿，发现原来是云平台没有续费。说来也巧，接手这一摊子时，费用告警不在我这里，包括手机短信和邮箱统统不在。而且，客户经理正在休假。好家伙，通过支付宝快速充值后，恢复了足足 4 个小时，好在集群和服务最终恢复了。亡羊补牢为时不晚，除了修改云平台费用相关告警通知外，使用夜莺监控通过云平台 SDK 设置费用告警。图：剩余金额监控仪表盘另外，举一反三，把第三方短信剩余条数也做了监控。图：剩余短信监控仪表盘5 祝愿数字化已经进入到了人工智能时代，数字基础设施与电力基础设施一样越来越重要。保障数字基础设施稳定运行的重要支撑力量落在了夜莺身上。祝愿夜莺监控越来越好。祝愿夜莺的兄弟们工作顺利，身体健康。愿与夜莺的兄弟们一起努力，共筑数字基础设施稳定运行保障防线。

使用夜莺插件监控阿里云资源遇到告警不告问题
type: item
date: 2024-04-30T08:32:00+00:00
description: 哥们发来消息，最近使用夜莺阿里云插件对云服务，包括ECS、RDS等进行了监控，但是设置告警的时候没有告警产生。首先，通过添加一个process_total的本地监控指标设置了一个告警，测试是否可以告警，以此检查alarm功能是正常的。然后，哥们说看下categraf的配置。一行一行看了下，发现了一个delay指标。这个指标过去还真没有遇到过。读了几遍官方文档的介绍，说真，理解水平有限，还是无法准确理解。但是，有一点是了解到了。与传统得categraf采集host指标不一样，阿里云插件工作的时候采集到的阿里云资源指标可能不是实时的，而这个地方的2m就是2m。哈哈，[scode type="blue"]猜测，categraf使用agent拉取阿里云的时候，因为阿里云的监控数据不是实时的，所以会设置delay参数，查询10分钟前的数据。对，如此一来，监控告警失效以及时序指标查询出不来 两个问题就对上了。[/scode]然后，哥们重新设置了采集参数，将delay设置成2m，把告警规则频率设置成了300s。观察中...观察到了60s一次的数据采集。监控指标出现了一批。看来这个delay参数以及告警策略生效参数有点搞头。删除了测试告警设置。修改了监控指标，告警恢复了一批。然后就是全部恢复了。最终，设置delay 2m，采集period 60s，告警规则执行频率60s，持续时长120s。有时间把老秦的视频再看一遍，进一步学习夜莺工作的原理。

容器化部署夜莺监控v6.5.0
type: item
date: 2023-11-29T03:17:00+00:00
description: 一、目标搭建夜莺6.5.0系统部署categraf采集脚本实现云主机数据上报增加监控分类，包括linux云主机、redis、mysql、mongodb、opentsdb等增加告警配置二、搭建夜莺6.5.0系统准备1台云主机，2C4G50GB做好系统参数优化登录服务器192.168.124.145cd /opt/ mkdir n9e cd n9e wget https://download.flashcat.cloud/n9e-v6.5.0-linux-amd64.tar.gz tar xzvf n9e-v6.5.0-linux-amd64.tar.gz cd docker cd compose-bridge docker-compose up -d然后记得删除/opt/n9e/initsql文件夹rm -rvf /opt/n9e/initsql三、部署categraf采集脚本实现云主机数据上报mkdir -p /opt/categraf cd /opt/categraf wget https://download.flashcat.cloud/categraf-v0.3.39-linux-amd64.tar.gz tar xzvf categraf-v0.3.39-linux-amd64.tar.gz cat <<'EOF'> /opt/categraf/conf/config.toml [global] # whetherr print configs print_configs = false # add label(agent_hostname) to series # "" -> auto detect hostname # "xx" -> use specified string xx # "$hostname" -> auto detect hostname # "$ip" -> auto detect ip # "$hostname-$ip" -> auto detect hostname and ip to replace the vars hostname = "$hostname-$ip" # will not add label(agent_hostname) if true omit_hostname = false # s | ms precision = "ms" # global collect interval interval = 15 # input provider settings; optional: local / http providers = ["local"] disable_usage_report = true # [global.labels] # region = "shanghai" # env = "localhost" [writer_opt] batch = 1000 chan_size = 1000000 writers url = "http://192.168.124.145:17000/prometheus/v1/write" # Basic auth username basic_auth_user = "" # Basic auth password basic_auth_pass = "" ## Optional headers # headers = ["X-From", "categraf", "X-Xyz", "abc"] # timeout settings, unit: ms timeout = 5000 dial_timeout = 2500 max_idle_conns_per_host = 100 [http] enable = false address = ":9100" print_access = false run_mode = "release" [ibex] enable = false ## ibex flush interval interval = "1000ms" ## n9e ibex server rpc address Servers = ["192.168.124.145:20090"] ## temp script dir metaDir = "./meta" [http_provider] # HttpRemoteProvider插件，通过Http请求的方式获取Categraf的配置 # 通过设置global中的provider为HttpRemoteProvider启用 # example request: GET /categraf/configs?agent=categraf&host…

升级夜莺监控从6.4.0到6.5.0
type: item
date: 2023-11-29T01:20:00+00:00
description: 备份cd /opt/ mkdir bak.20231129 rsync -avzP n9e /opt/bak.20231129/ rsync -avzP integrations /opt/bak.20231129/ mkdir -p /opt/tmp下载解压cd /opt/tmp wget https://download.flashcat.cloud/n9e-v6.5.0-linux-amd64.tar.gz tar xzvf n9e-v6.5.0-linux-amd64.tar.gz rsync -avzP n9e /opt/ rsync -avzP integrations /opt/重启服务重新启动服务 systemctl status n9e systemctl restart n9e systemctl status n9e查看

从n9e版本v6 ga升级到6.4.0
type: item
date: 2023-11-06T04:56:00+00:00
description: 打开页面，查找升级方法升级方法v6 小版本升级到 下载 页面，下载安装包，直接替换原来的二进制 和 integration 目录，重启进程即可下载https://flashcat.cloud/download/nightingale/cd /opt/ mkdir bak.20231106 rsync -avzP n9e /opt/bak.20231106/ rsync -avzP integrations /opt/bak.20231106/mkdir -p /opt/tmp cd /opt/tmp wget https://download.flashcat.cloud/n9e-v6.4.0-linux-amd64.tar.gz tar xzvf n9e-v6.4.0-linux-amd64.tar.gz rsync -avzP n9e /opt/ rsync -avzP integrations /opt/ 重新启动服务systemctl status n9e systemctl restart n9e systemctl status n9e 检查升级是否成功

夜莺如何自定义数据采集脚本
type: item
date: 2023-11-02T02:29:00+00:00
description: [root@localhost input.exec]# cat ip_counter_from_snmp.sh!/bin/bashcontent=$(cat /proc/net/snmp | grep "Ip:" | tail -n 1)value=$(echo $content | awk '{print $2}')echo "ip_counter_from_snmp_Forwarding{} $value"value=$(echo $content | awk '{print $3}')echo "ip_counter_from_snmp_DefaultTTL{} $value"value=$(echo $content | awk '{print $4}')echo "ip_counter_from_snmp_InReceives{} $value"value=$(echo $content | awk '{print $5}')echo "ip_counter_from_snmp_InHdrErrors{} $value"value=$(echo $content | awk '{print $6}')echo "ip_counter_from_snmp_InAddrErrors{} $value"value=$(echo $content | awk '{print $7}')echo "ip_counter_from_snmp_ForwDatagrams{} $value"value=$(echo $content | awk '{print $8}')echo "ip_counter_from_snmp_InUnknownProtos{} $value"value=$(echo $content | awk '{print $9}')echo "ip_counter_from_snmp_InDiscards{} $value"value=$(echo $content | awk '{print $10}')echo "ip_counter_from_snmp_InDelivers{} $value"value=$(echo $content | awk '{print $11}')echo "ip_counter_from_snmp_OutRequests{} $value"value=$(echo $content | awk '{print $12}')echo "ip_counter_from_snmp_OutDiscards{} $value"value=$(echo $content | awk '{print $13}')echo "ip_counter_from_snmp_OutNoRoutes{} $value"value=$(echo $content | awk '{print $14}')echo "ip_counter_from_snmp_ReasmTimeout{} $value"value=$(echo $content | awk '{print $15}')echo "ip_counter_from_snmp_ReasmReqds{} $value"value=$(echo $content | awk '{print $16}')echo "ip_counter_from_snmp_ReasmOKs{} $value"value=$(echo $content | awk '{print $17}')echo "ip_counter_from_snmp_ReasmFails{} $value"value=$(echo $content | awk '{print $18}')echo "ip_counter_from_snmp_FragOKs{} $value"value=$(echo $content | awk '{print $19}')echo "ip_counter_from_snmp_FragFails{} $value"value=$(echo $content | awk '{print $20}')echo "ip_counter_from_snmp_FragCreates{} $value"