搭建监控系统 (Node exporter、Grafana、Prometheus、Alertmanager)

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
云解析 DNS,旗舰版 1个月
可观测监控 Prometheus 版,每月50GB免费额度
简介: 了解如何搭建监控系统 (Node exporter、Grafana、Prometheus、Alertmanager)

一、环境搭建


1、安装Node exporter


1) a、mac 安装 brew install node_exporter

微信图片_20220218203003.jpgb、启动 node_exporter


node_exporter --web.listen-address=":9600" --web.telemetry-path="/node_metrics"

微信图片_20220218203034.png

c、访问启动页面

微信图片_20220218203101.png


  • node_boot_time:系统启动时间
  • node_cpu:系统CPU使用量
  • nodedisk*:磁盘IO
  • nodefilesystem*:文件系统用量
  • node_load1:系统负载
  • nodememeory*:内存使用量
  • nodenetwork*:网络带宽
  • node_time:当前系统时间
  • go_*:node exporter中go相关指标
  • process_*:node exporter自身进程相关运行指标



2) docker启动


a、docker pull prom/node-exporter

微信图片_20220218203126.png


b、docker run -d --name=node  -p 9100:9100 prom/node-exporter:latest

微信图片_20220218203130.png

c、验证启动结果

微信图片_20220218203134.png




2、安装Prometheus

1) docker pull prom/prometheus

微信图片_20220218203222.png

2)启动prometheus


docker run -d -p 9090:9090 -v /tmp/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml  prom/prometheus



a、prometheusyml



global:                  
  scrape_interval:     15s 
  external_labels:   
    monitor: 'codelab-monitor'
# Alertmanager配置
alerting:
 alertmanagers:
 - static_configs:
   - targets: ["192.168.50.100:9093"] # 设定alertmanager和prometheus交互的接口,即alertmanager监听的ip地址和端口
rule_files: 
  - '/tmp/prometheus/prometheus_rules.yml'
  - '/tmp/prometheus/alertmanager/alertmanager_rules.yml' 
scrape_configs: 
  - job_name: 'prometheus' 
    # 覆盖全局的 scrape_interval
    scrape_interval: 5s
    static_configs:  
      - targets: ['192.168.50.100:9090']
  - job_name: 'node'
    scrape_interval: 10s
    metrics_path: "/metrics"
    static_configs:
      - targets: ['192.168.50.100:9100']  # 本机 node_exporter 的 endpoint 这里若配置成127.0.0.1 会出现gramtheus访问node不通问题


b、prometheus_rules.yml


(base) mengfaniaodeMBP:prometheus mengfanxiao$ cat prometheus_rules.yml 
groups:
- name: example   #报警规则的名字
  rules:
  # Alert for any instance that is unreachable for >5 minutes.
  - alert: InstanceDown     #检测job的状态,持续1分钟metrices不能访问会发给altermanager进行报警
    expr: up == 0
    for: 1m    #持续时间
    labels:
      serverity: page
    annotations:
      summary: "Instance {{ $labels.instance }} down"
      description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes."
  #- alert: "it's has problem"  #报警的名字
  #  expr: "test_tomcat{exported_instance="uat",exported_job="uat-app-status",host="test",instance="uat",job="uat-apps-status"} -  test_tomcat{exported_instance="uat",exported_job="uat-app-status",host="test",instance="uat",job="uat-apps-status"} offset 1w > 5"   # 这个意思是监控该表达式查询出来的值与一周前的值进行比较,大于5且持续10m钟就发送给altermanager进行报警
  #  for: 1m  #持续时间
  #  labels:
 #     serverity: warning
  #  annotations:
  #    summary: "{{ $labels.type }}趋势增高"
  #    description: "机器:{{ $labels.host }} tomcat_id:{{ $labels.id }} 类型:{{ $labels.type }} 与一周前的差值大于5,当前的差值为:{{ $value }}"    #自定义的报警内容


c、alertmanager_rules.yml


(base) mengfaniaodeMBP:alermanager mengfanxiao$ cat alertmanager_rules.yml 
groups:
 - name: test-rules
   rules:
   - alert: InstanceDown # 告警名称
     expr: up == 0 # 告警的判定条件,参考Prometheus高级查询来设定
     for: 2m # 满足告警条件持续时间多久后,才会发送告警
     labels: #标签项
      team: node
     annotations: # 解析项,详细解释告警信息
      summary: "{{$labels.instance}}: has been down"
      description: "{{$labels.instance}}: job {{$labels.job}} has been down "
      value: {{$value}}
(base) mengfaniaodeMBP:alermanager mengfanxiao$ ls
alertmanager.ymlalertmanager_rules.ymlconfig.ymltemplate
(base) mengfaniaodeMBP:alermanager mengfanxiao$ 
(base) mengfaniaodeMBP:alermanager mengfanxiao$ cat alertmanager_rules.yml 
groups:
 - name: test-rules
   rules:
   - alert: InstanceDown # 告警名称
     expr: up == 0 # 告警的判定条件,参考Prometheus高级查询来设定
     for: 2m # 满足告警条件持续时间多久后,才会发送告警
     labels: #标签项
      team: node
     annotations: # 解析项,详细解释告警信息
      summary: "{{$labels.instance}}: has been down"
      description: "{{$labels.instance}}: job {{$labels.job}} has been down "
   #   value: {{$value}}


3)

a、验证是否启动成功

微信图片_20220218203344.png

微信图片_20220218203338.png


b、prometheus的数据

微信图片_20220218203426.png


c、看配置的2个数据源是否成功

微信图片_20220218203434.png

问题:


Get http://127.0.0.1:9100/metrics: dial tcp 127.0.0.1:9100: connect: connection refused


但telnet 127.0.0.1 9100是可以的


原因是:

容器具有单独的网络名称空间,这意味着容器中的127.0.0.1在主机上不是127.0.0.1。

您应该使用主机的IP或使用--network = host启动容器。


host模式下使用-p或者-P会出现WARNING: Published ports are discarded when using host network mode 当你是host模式的时候,主机会自动把他上面的端口分配给容器,这个时候使用-p或者-P是无用的。但是还是可以在Dockerfile中声明EXPOSE端口 后续文章再详谈



3、安装grafana

1)docker pull grafana/grafana

微信图片_20220218203512.png

2)查看下载情况

docker images|grep grafana/grafana

微信图片_20220218203605.png

3)创建一个grafana/grafana容器并启动

docker run -d --name=grafana -p 3000:3000 grafana/grafana

微信图片_20220218203633.png

微信图片_20220218203636.png

4)访问启动页面

微信图片_20220218203708.png

默认账号admin/admin

5)登陆了之后 配置数据源

微信图片_20220218203736.png

微信图片_20220218203739.png

微信图片_20220218203750.png

数据源配置好之后 创建仪表盘用于显示数据源的数据

微信图片_20220218203840.png

选择配置好的这个数据源

微信图片_20220218203844.png

这里选择具体的数据指标仪表盘中就会画出对应的折线

微信图片_20220218203926.png

不同的仪表盘模式供选择

微信图片_20220218203929.png

4、安装Alertmanager

1) docker pull docker.io/prom/alertmanager:latest

微信图片_20220218204006.png

2) docker run -d -p 9093:9093 -v /tmp/prometheus/alermanager/alertmanager.yml:/etc/alertmanager/config.yml --name alertmanager docker.io/prom/alertmanager:latest


a、alertmanager.yml


(base) mengfaniaodeMBP:alermanager mengfanxiao$ cat alertmanager.yml 
# 全局配置项
global: 
  resolve_timeout: 5m #处理超时时间,默认为5min
  smtp_smarthost: 'smtp.sina.com:25' # 邮箱smtp服务器代理
  smtp_from: '******@sina.com' # 发送邮箱名称
  smtp_auth_username: '******@sina.com' # 邮箱名称
  smtp_auth_password: '******' # 邮箱密码或授权码
  wechat_api_url: 'https://qyapi.weixin.qq.com/cgi-bin/' # 企业微信地址
# 定义模板信心
templates:
  - 'template/*.tmpl'
# 定义路由树信息
route:
  group_by: ['alertname'] # 报警分组依据
  group_wait: 10s # 最初即第一次等待多久时间发送一组警报的通知
  group_interval: 10s # 在发送新警报前的等待时间
  repeat_interval: 1m # 发送重复警报的周期 对于email配置中,此项不可以设置过低,否则将会由于邮件发送太多频繁,被smtp服务器拒绝
  receiver: 'email' # 发送警报的接收者的名称,以下receivers name的名称
# 定义警报接收者信息
receivers:
  - name: 'email' # 警报
    email_configs: # 邮箱配置
    - to: '******@163.com'  # 接收警报的email配置
      html: '{{ template "test.html" . }}' # 设定邮箱的内容模板
      headers: { Subject: "[WARN] 报警邮件"} # 接收邮件的标题
    # 第三方开发配置
     #webhook_configs: # webhook配置
    #- url: 'http://127.0.0.1:5001'
    #send_resolved: true
    #wechat_configs: # 企业微信报警配置
    #- send_resolved: true
     #to_party: '1' # 接收组的id
      #agent_id: '1000002' # (企业微信-->自定应用-->AgentId)
      #corp_id: '******' # 企业信息(我的企业-->CorpId[在底部])
      #api_secret: '******' # 企业微信(企业微信-->自定应用-->Secret)
      #message: '{{ template "test_wechat.html" . }}' # 发送消息模板的设定
# 一个inhibition规则是在与另一组匹配器匹配的警报存在的条件下,使匹配一组匹配器的警报失效的规则。两个警报必须具有一组相同的标签。 
inhibit_rules: 
  - source_match: 
     severity: 'critical' 
    target_match: 
     severity: 'warning' 
    equal: ['alertname', 'dev', 'instance']

b、test.tmpl


(base) mengfaniaodeMBP:template mengfanxiao$ cat test.tmpl 
{{ define "test.html" }}
<table border="1">
        <tr>
                <td>报警项</td>
                <td>实例</td>
                <td>报警阀值</td>
                <td>开始时间</td>
        </tr>
        {{ range $i, $alert := .Alerts }}
                <tr>
                        <td>{{ index $alert.Labels "alertname" }}</td>
                        <td>{{ index $alert.Labels "instance" }}</td>
                        <td>{{ index $alert.Annotations "value" }}</td>
                        <td>{{ $alert.StartsAt }}</td>
                </tr>
        {{ end }}
</table>
{{ end }}



3) 验证启动结果

微信图片_20220218204044.png

微信图片_20220218204049.png


这里可看到 Prometheus sever 端发过来的 alerts,并可做 alerts 搜索,分组,静音等操作

微信图片_20220218204144.png



二、遗留问题下次解析


1、告警相关

a、promtheus的alert页面没有显示告警配置

b、node正常运行的时候 promtheus的alert页面没有显示

c、node停止运行时 promtheus的alert页面没有显示且alertmanage没有收到告警

d、alertmanager还没有配置receiver信息


2、简述各个组件是干什么的


3、简述原理及应用场景

a、简述原理

b、应用场景

4、docker host模式解析



参考资料


1、https://www.ibm.com/developerworks/cn/cloud/library/cl-lo-prometheus-getting-started-and-practice/index.html

2、https://www.jianshu.com/p/7f586b482c44?utm_campaign=studygolang.com&utm_medium=studygolang.com&utm_source=studygolang.com


目录
打赏
0
0
0
0
19
分享
相关文章
Kubernetes监控:Prometheus与AlertManager结合,配置邮件告警。
完成这些步骤之后,您就拥有了一个可以用邮件通知你的Kubernetes监控解决方案了。当然,所有的这些配置都需要相互照应,还要对你的Kubernetes集群状况有深入的了解。希望这份指南能帮助你创建出适合自己场景的监控系统,让你在首次发现问题时就能做出响应。
60 22
基于问题“如何监控局域网内的电脑”——Node.js 的 ARP 扫描算法实现局域网内计算机监控的技术探究
在网络管理与安全领域,监控局域网内计算机至关重要。本文探讨基于Node.js的ARP扫描算法,通过获取IP和MAC地址实现有效监控。使用`arp`库安装(`npm install arp`)并编写代码,可定期扫描并对比设备列表,判断设备上线和下线状态。此技术适用于企业网络管理和家庭网络安全防护,未来有望进一步提升效率与准确性。
51 8
Grafana Prometheus Altermanager 监控系统
Grafana、Prometheus 和 Alertmanager 是一套强大的开源监控系统组合。Prometheus 负责数据采集与存储,Alertmanager 处理告警通知,Grafana 提供可视化界面。本文简要介绍了这套系统的安装配置流程,包括各组件的下载、安装、服务配置及开机自启设置,并提供了访问地址和重启命令。适用于希望快速搭建高效监控平台的用户。
240 20
Prometheus+Grafana监控Linux主机
通过本文的步骤,我们成功地在 Linux 主机上使用 Prometheus 和 Grafana 进行了监控配置。具体包括安装 Prometheus 和 Node Exporter,配置 Grafana 数据源,并导入预设的仪表盘来展示监控数据。通过这种方式,可以轻松实现对 Linux 主机的系统指标监控,帮助及时发现和处理潜在问题。
355 7
Prometheus+Grafana+NodeExporter:构建出色的Linux监控解决方案,让你的运维更轻松
本文介绍如何使用 Prometheus + Grafana + Node Exporter 搭建 Linux 主机监控系统。Prometheus 负责收集和存储指标数据,Grafana 用于可视化展示,Node Exporter 则采集主机的性能数据。通过 Docker 容器化部署,简化安装配置过程。完成安装后,配置 Prometheus 抓取节点数据,并在 Grafana 中添加数据源及导入仪表盘模板,实现对 Linux 主机的全面监控。整个过程简单易行,帮助运维人员轻松掌握系统状态。
506 3
Grafana 安装配置教程,让你的 Prometheus 监控数据变得更美观
《Grafana安装配置教程,让你的Prometheus监控数据变得更美观》简介: Grafana是一个开源的度量分析与可视化工具,支持多种数据源(如Prometheus),提供丰富的可视化功能和警报机制。本文详细介绍了Grafana的安装、汉化方法及模板使用,帮助用户轻松创建美观、灵活的数据面板,并实现数据的协作与共享。通过Docker镜像、配置文件修改或替换前端页面等方式实现汉化,让用户更便捷地使用中文界面。此外,还提供了导入JSON格式模板的具体步骤,方便快速搭建仪表盘。
192 2
无痛入门Prometheus:一个强大的开源监控和告警系统,如何快速安装和使用?
Prometheus 是一个完全开源的系统监控和告警工具包,受 Google 内部 BorgMon 系统启发,自2012年由前 Google 工程师在 SoundCloud 开发以来,已被众多公司采用。它拥有活跃的开发者和用户社区,现为独立开源项目,并于2016年加入云原生计算基金会(CNCF)。Prometheus 的主要特点包括多维数据模型、灵活的查询语言 PromQL、不依赖分布式存储、通过 HTTP 拉取时间序列数据等。其架构简单且功能强大,支持多种图形和仪表盘展示模式。安装和使用 Prometheus 非常简便,可以通过 Docker 快速部署,并与 Grafana 等可
1177 2
Prometheus+Grafana新手友好教程:从零开始搭建轻松掌握强大的警报系统
本文介绍了使用 Prometheus 和 Grafana 实现邮件报警的方案,包括三种主要方法:1) 使用 Prometheus 的 Alertmanager 组件;2) 使用 Grafana 的内置告警通知功能;3) 使用第三方告警组件如 OneAlert。同时,详细描述了环境准备、Grafana 安装配置及预警设置的步骤,确保用户能够成功搭建并测试邮件报警功能。通过这些配置,用户可以在系统或应用出现异常时及时收到邮件通知,保障系统的稳定运行。
285 1
智能运维实战:Prometheus与Grafana的监控与告警体系
【10月更文挑战第26天】Prometheus与Grafana是智能运维中的强大组合,前者是开源的系统监控和警报工具,后者是数据可视化平台。Prometheus具备时间序列数据库、多维数据模型、PromQL查询语言等特性,而Grafana支持多数据源、丰富的可视化选项和告警功能。两者结合可实现实时监控、灵活告警和高度定制化的仪表板,广泛应用于服务器、应用和数据库的监控。
594 3

热门文章

最新文章

推荐镜像

更多