文章目录

  • 前言
  • 安装步骤
  • 测试使用
  • 私有化方法



前言

夜莺监控( 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项目原核心研发人员。

前文讲了关于Prometheus的种种用法,我们不难看出 Prometheus + AlertManager + Grafana 这种组合式用用法,确实为底层各种监控提供了多种灵活配置+可观测性+及时告警。但是上升到企业运维层面,想快速接入一套成熟监控体系,没几月功夫想搞透是很难的,并且运维成本很高,感觉这就是Nightingale的切入点,他的价值在于搭建完毕就是一套最佳实践,话不多说我们下面开搞。


安装步骤

拉取最新代码

git clone git@github.com:flashcatcloud/n9e-helm.git

安装应用(以 n9e 为 namespace )

helm install nightingale ./n9e-helm -n n9e --create-namespace
NAME: nightingale
LAST DEPLOYED: Mon Jun 27 22:06:38 2022
NAMESPACE: n9e
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Please wait for several minutes for nightingale deployment to complete.
Then you should be able to visit the nightingale web at http://hello.n9e.info
For more details, please visit https://github.com/flashcat/n9e-helm

静等数分钟后我们查看状态

查看无状态列表
$ /usr/local/bin/kubectl get deployment -n n9e
NAME                  READY   UP-TO-DATE   AVAILABLE   AGE
nightingale-nserver   0/1     1            0           8m28s
nightingale-nwebapi   0/1     1            0           8m28s

查看有状态列表
/usr/local/bin/kubectl get StatefulSet -n n9e
NAME                     READY   AGE
nightingale-database     1/1     7m20s
nightingale-prometheus   0/1     7m20s
nightingale-redis        0/1     7m20s

查看服务列表
$ /usr/local/bin/kubectl get service -n n9e
NAME                     TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
nightingale-database     ClusterIP   10.233.1.220    <none>        3306/TCP   5m11s
nightingale-nserver      ClusterIP   10.233.29.143   <none>        80/TCP     5m11s
nightingale-nwebapi      ClusterIP   10.233.22.121   <none>        80/TCP     5m11s
nightingale-prometheus   ClusterIP   10.233.38.255   <none>        9090/TCP   5m11s
nightingale-redis        ClusterIP   10.233.31.119   <none>        6379/TCP   5m11s

上面部署状态来说整个服务是由3个存储服务,2个后端服务构成。官方给到的架构图如下:

夜莺自动化监控 夜莺自动化监控软件_docker


核心是 server 和 webapi 两个模块,webapi 无状态,放到中心端,承接前端请求,将用户配置写入数据库;server 是告警引擎和数据转发模块,一般随着时序库走,一个时序库就对应一套 server,每套 server 可以只用一个实例,也可以多个实例组成集群,server 可以接收 Categraf、Telegraf、Grafana-Agent、Datadog-Agent、Falcon-Plugins 上报的数据,写入后端时序库,周期性从数据库同步告警规则,然后查询时序库做告警判断。每套 server 依赖一个 redis。

测试使用

官方默认开放的访问方式是域名

$ /usr/local/bin/kubectl get ingress -n n9e
NAME                  CLASS    HOSTS            ADDRESS       PORTS   AGE
nightingale-ingress   <none>   hello.n9e.info   10.86.68.66   80      19m

由于我本机master的80端口无法使用,我这里以service 的NodePort方式访问了,设置方法如下。

vim n9e-helm/templates/nwebapi/service.yaml
#在selector:上面增加一行 type: NodePort
....
  type: NodePort
  selector:
....

更新服务

/usr/local/bin/helm upgrade nightingale ./n9e-helm -n n9e

重新查看服务

$ /usr/local/bin/kubectl get service -n n9e
NAME                     TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
nightingale-database     ClusterIP   10.233.1.220    <none>        3306/TCP       95m
nightingale-nserver      ClusterIP   10.233.29.143   <none>        80/TCP         95m
nightingale-nwebapi      NodePort    10.233.22.121   <none>        80:31644/TCP   95m
nightingale-prometheus   ClusterIP   10.233.38.255   <none>        9090/TCP       95m
nightingale-redis        ClusterIP   10.233.31.119   <none>        6379/TCP       95m

下面用 http://127.0.0.1:31644/ 访问测试即可。

账号:root
密码:root.2020

默认Node数据都已经采集好了。

夜莺自动化监控 夜莺自动化监控软件_网络_02


我们试一把基于prometheus的PromQL查询

#获取当前运行POD内存占用从高到低
sort_desc(avg(kubernetes_pod_container_memory_usage_bytes/1024/1024/1024) by (pod_name))

夜莺自动化监控 夜莺自动化监控软件_TCP_03


更多其他内置服务,大家可以去试试。

夜莺自动化监控 夜莺自动化监控软件_夜莺自动化监控_04

私有化方法

方法很简单,把所有image替换成自己私有仓库的镜像即可。

vim n9e-helm/values.yaml

修改完毕后拷贝n9e-helm文件夹到指定机器运行即可

helm install nightingale ./n9e-helm -n n9e --create-namespace