• 使用helm快速安装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项目原核心研发人员。

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


    安装步骤

    拉取最新代码

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

    安装应用(以 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

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

    查看无状态列表
    $ /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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    上面部署状态来说整个服务是由3个存储服务,2个后端服务构成。官方给到的架构图如下:
    在这里插入图片描述
    核心是 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
    
    • 1
    • 2
    • 3

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

    vim n9e-helm/templates/nwebapi/service.yaml
    #在selector:上面增加一行 type: NodePort
    ....
      type: NodePort
      selector:
    ....
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    更新服务

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

    重新查看服务

    $ /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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

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

    账号:root
    密码:root.2020
    
    • 1
    • 2

    默认Node数据都已经采集好了。
    在这里插入图片描述
    我们试一把基于prometheus的PromQL查询

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

    在这里插入图片描述
    更多其他内置服务,大家可以去试试。
    在这里插入图片描述

    私有化方法

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

    vim n9e-helm/values.yaml
    
    • 1

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

    helm install nightingale ./n9e-helm -n n9e --create-namespace
    
    • 1
  • 相关阅读:
    [深度学习]yolov9+deepsort+pyqt5实现目标追踪
    软件测试的几个关键步骤,你需要知道
    Scala函数至简原则
    Java实践-物联网loT入门-MQTT传输协议
    【11.25】【VP】 45 届 济南站
    内存取证——ABC包
    正则表达式
    Nodejs 第四十一章(项目架构MVC,IoC,DI)
    sortablejs拖拽后新增和删除行时顺序错乱
    金山表单结果如何自动通知企业微信
  • 原文地址:https://blog.csdn.net/e421083458/article/details/125492444