草庐IT

Nightingale + categraf监控方案

LinuxLOVERes 2023-08-06 原文

一、Nightingale介绍:

  1.1、Nightingale简介和架构图

夜莺监控( Nightingale )是一款国产、开源云原生监控分析系统,采用 All-In-One 的设计,集数据采集、可视化、监控告警、数据分析于一体。于 2020 年 3 月 20 日,在 github 上发布 v1 版本,已累计迭代 60 多个版本。从 v5 版本开始与 Prometheus、VictoriaMetrics、Grafana、Telegraf、Datadog 等生态紧密协同集成,提供开箱即用的企业级监控分析和告警能力,已有众多企业选择将 Prometheus + AlertManager + Grafana 的组合方案升级为使用夜莺监控。夜莺监控,由滴滴开发和开源,并于 2022 年 5 月 11 日,捐赠予中国计算机学会开源发展委员会(CCF ODC),为 CCF ODC 成立后接受捐赠的第一个开源项目。夜莺监控的核心开发团队,也是Open-Falcon项目原核心研发人员。

Nightingale 可以接收各种采集器上报的监控数据,转存到时序库(可以支持Prometheus、M3DB、VictoriaMetrics、Thanos等),并提供告警规则、屏蔽规则、订阅规则的配置能力,提供监控数据的查看能力,提供告警自愈机制(告警触发之后自动回调某个webhook地址或者执行某个脚本),提供历史告警事件的存储管理、分组查看的能力。

Nightingale架构图:

1.2、对比其他监控软件

Zabbix

Zabbix 是一款老牌的监控系统,对机器和网络设备的监控覆盖很全,比如支持 AIX 系统,常见的开源监控都是支持 Linux、Windows,AIX 较少能够支持,Zabbix 用户群体广泛,国内很多公司基于 Zabbix 做商业化服务,不过 Zabbix 使用数据库做存储,容量有限,监控大盘不足,配置麻烦,服务器较多的话,很卡。

Open-Falcon

因为开发 Open-Falcon 和 Nightingale 的是一拨人,所以很多社区伙伴会比较好奇,为何要新做一个监控开源软件。核心点是 Open-Falcon 和 Nightingale 的差异点实在是太大了,Nightingale 并非是 Open-Falcon 设计逻辑的一个延续,就看做两个不同的软件就好。

Open-Falcon 是 14 年开发的,当时是想解决 Zabbix 的一些容量问题,可以看做是物理机时代的产物,整个设计偏向运维视角,虽然数据结构上已经开始设计了标签,但是查询语法还是比较简单,无法应对比较复杂的场景。

Nightingale 直接支持 PromQL,支持 Prometheus、M3DB、VictoriaMetrics 多种时序库,支持 Categraf、Telegraf、Datadog-Agent、Grafana-Agent 做监控数据采集,支持 Grafana 看图,整个设计更加云原生。

Prometheus

Nightingale 可以简单看做是 Prometheus 的一个企业级版本,把 Prometheus 当做 Nightingale 的一个内部组件(时序库)

Nightingale 可以接入多个 Prometheus,可以允许用户在页面上配置告警规则、屏蔽规则、订阅规则,在页面上查看告警事件、做告警事件聚合统计,配置告警自愈机制,管理监控对象,配置监控大盘等,就把 Nightingale 看做是 Prometheus 的一个 WEBUI 也是可以的,不过实际上,它远远不止是一个 WEBUI,用一下就会深有感触。

  • Nightingale监控系统部署

  1.1部署方式:

  1. )docker compose部署,使用docker compose 一键部署启动夜莺,这种部署方式,适用于简单测试,不推荐在生产环境使用。
  2. )Helm部署,n9e-helm用于在k8s集群中安装部署Nightingale。维护地址:https://github.com/flashcatcloud/n9e-helm。
  3. )服务端组件部署,夜莺的服务端有两个组件,分别为n9e-webapi和n9e-serveer。n9e-webapi 用于提供 API 给前端 JavaScript 使用,n9e-server 的职责是告警引擎和数据转发器。依赖的组件有 MySQL、Redis、时序库,时序库我们这里使用 Prometheus。

服务端组件部署架构图:

 

其他部署方式还包括VictoriaMetrics,lbex等,具体部署可参考https://n9e.github.io/docs/install/server/ 链接。

1.2服务部署【此处采用服务端组件部署方式】

  1. )服务器资源简介:

机器

ip

操作系统

内存

cpu

Server端(虚拟机)

192.168.48.100

CentOS7.4

1G

1C

Client端(虚拟机)

192.168.48.11

CentOS7.4

1G

1C

  1. )基础环境配置,关闭防火墙,设置主机名,关闭selinux,矫正时间并配置时间同步服务。

systemctl stop firewalld && systemctl disable firewalld

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

date -s ‘时间’

ntpdate ntp.ntsc.ac.cn

reboot

  1. )Server端安装对应组件。【Prometheus,MySQL,redis】

3.1)安装Prometheus。

tar -zxvf prometheus-2.28.0.linux-amd64.tar.gz

编写Prometheus service文件,使用systemd托管。

vi /etc/systemd/system/prometheus.service

[Unit]

Description="prometheus"

Documentation=https://prometheus.io/

After=network.target

[Service]

Type=simple

ExecStart=/data/prometheus/prometheus  --config.file=/data/prometheus/prometheus.yml --storage.tsdb.path=/data/prometheus/data --web.enable-lifecycle --enable-feature=remote-write-receiver --query.lookback-delta=2m

Restart=on-failure

SuccessExitStatus=0

LimitNOFILE=65536

StandardOutput=syslog

StandardError=syslog

SyslogIdentifier=prometheus

[Install]

WantedBy=multi-user.target

systemctl daemon-reload

systemctl enable prometheus

systemctl restart prometheus

systemctl status prometheus

【备注:生产环境下如果需要修改Prometheus的端口,可以修改Prometheus的yml文件,将9090端口修改,然后在systemd代管文件中添加--web.listen-address=:端口 参数。重启Prometheus即可。】

如,需要修改Prometheus的默认端口为19197

vi prometheus.yml

vi /etc/systemd/system/prometheus.service

启动成功后的状态(如下图)

3.2)安装MySQL。

rpm -ivh mariadb-5.5.56-2.el7.x86_64.rpm        

rpm -ivh mariadb-devel-5.5.56-2.el7.x86_64.rpm  

rpm -ivh mariadb-server-5.5.56-2.el7.x86_64.rpm

rpm -ivh mariadb-bench-5.5.56-2.el7.x86_64.rpm  

rpm -ivh mariadb-libs-5.5.56-2.el7.x86_64.rpm   

rpm -ivh mariadb-test-5.5.56-2.el7.x86_64.rpm

vi /etc/my.cnf     #此处改了MySQL的监听端口。

port=30601   #添加监听端口配置。

设置MySQL root登录密码。

mysql -e "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456');"

启动MySQL服务。

systemctl restart mariadb

systemctl enable mariadb

systemctl status mariadb

3.3)安装redis。

rpm -ivh redis-3.2.12-2.el7.x86_64.rpm

vi /etc/redis.conf #此处更改了redis的默认端口,默认为6379端口。

systemctl start redis

systemctl enable redis

4.)Server端安装夜莺组件n9e-webapi,n9e-server。

mkdir /data/n9e

mv n9e-5.8.0.tar.gz /data/n9e

tar -zxvf n9e-5.8.0.tar.gz

将nightingale的sql文件导入MySQL库中。

mysql -uroot -p123456 < docker/initsql/a-n9e.sql

针对n9e server 服务和n9e webapi 服务编写service文件,使用systemd托管。

vi /etc/systemd/system/n9e-server.service

[Unit]

Description=n9e server

Requires=network.target

[Service]

User=root

Group=root

Type=simple

ExecStart=/data/n9e/n9e server --conf=/data/n9e/etc/server.conf

WorkingDirectory=/data/n9e

Restart=always

RestartSec=1

StartLimitInterval=0

[Install]

WantedBy=multi-user.target

vi /etc/systemd/system/n9e-webapi.service

[Unit]

Description=n9e webapi

Requires=n9e-server.service

[Service]

User=root

Group=root

Type=simple

ExecStart=/data/n9e/n9e webapi --conf=/data/n9e/etc/webapi.conf

WorkingDirectory=/data/n9e

SuccessExitStatus=0

LimitNOFILE=65536

StandardOutput=syslog

StandardError=syslog

SyslogIdentifier=n9e-webapi

[Install]

WantedBy=multi-user.target

systemctl daemon-reload

systemctl enable n9e-server

systemctl restart n9e-server

systemctl status n9e-server

systemctl enable n9e-webapi

systemctl restart n9e-webapi

systemctl status n9e-webapi

端口查看,如图,18000为webapi端口,19000为server端口。

 到此步骤,n9e夜莺监控server部署完成。

web浏览器访问:http://192.168.48.100:18000/默认登录用户为root,密码为root.2020

 5.)Client端部署采集器Categraf。

1.)Categraf采集器基本介绍

Categraf 是一款 all-in-one 的采集器,由 快猫团队 开源,代码托管在两个地方:

gitlink: https://www.gitlink.org.cn/flashcat/categraf

github: https://github.com/flashcatcloud/categraf

Categraf 不但可以采集 OS、MySQL、Redis、Oracle 等常见的监控对象,也准备提供日志采集能力和 trace 接收能力,这是夜莺主推的采集器,相关信息请查阅项目 README

Categraf 采集到数据之后,通过 remote write 协议推给远端存储,Nightingale 恰恰提供了 remote write 协议的数据接收接口,所以二者可以整合在一起,重点是配置 Categraf 的 conf/config.toml 中的 writer 部分,其中 url 部分配置为 n9e-server 的 remote write 接口:

 2.)部署Categraf

mv categraf-v0.2.6-linux-amd64.tar.gz /data

cd /data && tar -zxvf categraf-v0.2.6-linux-amd64.tar.gz

vi /etc/systemd/system/categraf.service

   [Unit]

Description="Categraf"

After=network.target

[Service]

User=root

Group=root

ExecStart=/data/categraf-v0.2.6-linux-amd64/categraf

WorkingDirectory=/data/categraf-v0.2.6-linux-amd64

Restart=on-failure

SuccessExitStatus=0

LimitNOFILE=65536

StandardOutput=syslog

StandardError=syslog

SyslogIdentifier=categraf

[Install]

WantedBy=multi-user.target

  vi /data/categraf-v0.2.6-linux-amd64/conf/config.toml

  #配置采集器采集到的数据写入nightingale的server中。

       [[writers]]

url = "http://127.0.0.1:19000/prometheus/v1/write"

  

systemctl daemon-reload

systemctl enable categraf.service

systemctl restart categraf.service

systemctl status categraf.service

操作界面配置机器监控大盘。

在监控看图--监控大盘中导入机器监控大盘 。

然后即可看到机器资源运行情况。

可以配置告警。(此处只在界面上配置了告警,没有配置钉钉,邮箱,企微等告警消息推送,如配置可参考nightingale官网配置告警消息推送)。

 直接在告警规则处导入机器告警规则即可。

下面两个模块可以看到已配置的机器的活跃告警和历史告警。 

最后,博主手写了一份nightingale安装脚本。有需要可以评论留言。

shell参考:

 

 

有关Nightingale + categraf监控方案的更多相关文章

  1. ruby - 在 jRuby 中使用 'fork' 生成进程的替代方案? - 2

    在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',

  2. Observability:从零开始创建 Java 微服务并监控它 (二) - 2

    这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/

  3. Ruby 守护进程和 JRuby - 备选方案 - 2

    我有一个应用程序正在从Ruby迁移到JRuby(由于需要通过Java提供更好的Web服务安全支持)。我使用的gem之一是daemons创建后台作业。问题在于它使用fork+exec来创建后台进程,但这对JRuby来说是禁忌。那么-是否有用于创建后台作业的替代gem/wrapper?我目前的想法是只从shell脚本调用rake并让rake任务永远运行......提前致谢,克里斯。更新我们目前正在使用几个与Java线程相关的包装器,即https://github.com/jmettraux/rufus-scheduler和https://github.com/philostler/acts

  4. ruby-on-rails - 能够处理 rar/tar/zip/7z 的 Ruby/rubyzip 替代方案? - 2

    关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于StackOverflow来说是偏离主题的,因为它们往往会吸引自以为是的答案和垃圾邮件。相反,describetheproblem以及迄今为止为解决该问题所做的工作。关闭9年前。Improvethisquestion我想知道是否有人知道Ruby的ruby​​zip替代品,它可以处理各种格式,特别是zip/rar/7z?我知道libarchive,但它对我的目的来说并不完整(它是一个很好的gem)。(澄清一下,libarchive-对我不起作用-因为

  5. ruby-on-rails - 对于 Ruby 应用程序,是否有比 Sanitize 更好的替代方案? - 2

    我爱Sanitize.这是一个了不起的实用程序。我遇到的唯一问题是,它需要永远准备一个开发环境,因为它使用Nokogiri,这对编译时间来说是一种痛苦。是否有任何程序可以在不使用Nokogiri的情况下执行Sanitize的操作(如果没有别的,只是温和地执行它的操作)?这将以指数方式提供帮助! 最佳答案 Rails有自己的SanitizeHelper。根据http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html,它将Thissanitizehe

  6. ruby-on-rails - rails3 中 cron 作业的解决方案 - 2

    我尝试每天在我的Rails应用程序中自动记录一些数据。我想知道是否有人知道一个好的解决方案?我找到了https://github.com/javan/whenever,但我想确保在选择之前了解所有选项。谢谢!艾略特 最佳答案 我真的很喜欢whenever-这是一个很棒的Gem,我已经在生产中使用了它。关于它还有一个很好的Railscasts插曲:http://railscasts.com/episodes/164-cron-in-ruby 关于ruby-on-rails-rails3中c

  7. ruby-on-rails - 监控多个 Rails 应用程序 - 2

    是否可以在我的服务器上运行任何工具来监控多个Rails应用程序?我需要监控每个应用程序收到的请求数、每个应用程序使用了多少内存、使用了多少CPU以及其他类似的统计信息。我需要查看每个单独的Rails应用程序的统计信息。 最佳答案 我建议你试试NewRelicRPM.免费版:RPMLiteisthemostwidelyusedsolutionforbasicwebapplicationmonitoring.RPMLiteprovidesapplicationmonitoringforunlimitedJava,RubyorJRubya

  8. ruby-on-rails - 与 Authlogic 一起使用的一些好的角色授权解决方案是什么? - 2

    我正在寻找一个很好的基于角色的授权解决方案来与Authlogic一起使用。有人有什么好的建议吗?如果可能,请根据您的经验列出一些优缺点。 最佳答案 Acl9与AuthLogic配合得很好:http://github.com/be9/acl9/tree/master 关于ruby-on-rails-与Authlogic一起使用的一些好的角色授权解决方案是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.c

  9. ruby-on-rails - ActiveRecord 自定义类型命名方案 - 2

    我正在处理一个表,该表已有一个包含自然类型名称的列。例如。已经存在一个名为“provider”的列,其值为“foo”或“bar”。我想使用existing类型名称在此表上使用STI,因为必须添加一个名为“type”的附加列以供ActiveRecord使用似乎很愚蠢。问题是,这些类型名称与ruby​​类不完全匹配。我希望能够设置自定义映射,例如Class1=>foo,Class2=>bar。我尝试了以下方法:#Inthebaseclassset_inheritance_column:provider#InClass1defself.sti_name'foo'end#InClass2def

  10. ruby-on-rails - 监控 RTMP 流,如果可用则记录 - 2

    我正在寻找一种方法来监视流上的事件,以便我可以确定是否有任何内容通过流。如果有,我将开始使用rtmpdump进行录制。我想象这是通过运行一个每60秒检查一次流的cron任务来实现的。如果它确定流正在通过,则调用rtmpdump开始记录它。如果没有,则什么都不做,并在60秒后再次检查。由于rtmpdump只是在没有流数据时出现错误,因此尝试使用它来监视流似乎不是一个好主意,但也许我错了。如果我在逐个案例的基础上手动执行此操作会很容易,但我正在尝试自动执行自动录制流的任务(如果它们可用)。有没有人遇到过这样做的方法?也许我可以在命令行(linux)中使用其他一些工具?如果有帮助,我正在使用

随机推荐