美文网首页
搭建监控系统 (Node exporter、Grafana、Pr

搭建监控系统 (Node exporter、Grafana、Pr

作者: 平凡人笔记 | 来源:发表于2020-04-02 16:29 被阅读0次

    一、环境搭建

    1、安装Node exporter

    1) a、mac 安装 brew install node_exporter

    b、启动 node_exporter

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

    c、访问启动页面

    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

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

    c、验证启动结果

    2、安装Prometheus

    1) docker pull prom/prometheus

    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、验证是否启动成功

    b、prometheus的数据

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

    问题:

    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

    2)查看下载情况

    docker images|grep grafana/grafana

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

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

    4)访问启动页面

    默认账号admin/admin

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

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

    选择配置好的这个数据源

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

    不同的仪表盘模式供选择

    4、安装Alertmanager

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

    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) 验证启动结果

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

    二、遗留问题下次解析

    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

    相关文章

      网友评论

          本文标题:搭建监控系统 (Node exporter、Grafana、Pr

          本文链接:https://www.haomeiwen.com/subject/iowxphtx.html