zoukankan      html  css  js  c++  java
  • node_exporter和cAdvisor部署

    node_exporter部署

    软件包版本

    node_exporter-0.18.1.linux-amd64.tar.gz

    详细操作

    解压链接

    [root@server02 ~]# mkdir /opt/src
    [root@server02 src]# tar -xvf node_exporter-0.18.1.linux-amd64.tar.gz -C /opt/
    [root@server02 src]# cd /opt/
    [root@server02 opt]# ln -s node_exporter-0.18.1.linux-amd64/ node_exporter
    

    创建用户并授予权限

    [root@server02 opt]# groupadd prometheus
    [root@server02 opt]# useradd -g prometheus -s /sbin/nologin prometheus
    [root@server02 opt]# chown -R prometheus:prometheus /opt/node_exporter
    

    配置启动文件

    [root@server02 opt]# vi /usr/lib/systemd/system/node_exporter.service
    [Unit]
    Description=node_exporter
    Documentation=https://prometheus.io/
    After=network.target
    
    [Service]
    Type=simple
    User=prometheus
    ExecStart=/opt/node_exporter/node_exporter --collector.systemd --collector.systemd.unit-whitelist=(docker|sshd).service --collector.textfile.directory /var/lib/node_exporter/textfile_collector/ 
    Restart=on-failure
    
    [Install]
    WantedBy=multi-user.target
    
    
    [root@server02 opt]# systemctl enable node_exporter
    [root@server02 opt]# systemctl start node_exporter
    

    配置textfile收集器(启动文件已添加该配置

    textfile收集器非常有用, 因为它允许我们暴露自定义指标。

    [root@server02 opt]# mkdir -p /var/lib/node_exporter/textfile_collector
    

    现在在这个目录中创建一个新的指标。刚创建的目录中,指标在以.prom结尾的文件内定义,并且使用Prometheus特定文本格式

    [root@server02 opt]# vi /var/lib/node_exporter/textfile_collector/metadata.prom 
    metadata{role="docker_server",datacenter="NJ"} 1
    

    node_exporter启动参数添加 --collector.textfile.directory /var/lib/node_exporter/textfile_collector/  

    表示只收集docker和sshd服务数据
    启动参数添加 --collector.systemd.unit-whitelist="(docker|sshd).service"  

    抓取Node Exporter

    [root@server01 prometheus]# vi prometheus.yml 
      - job_name: 'node'
        static_configs:
        - targets: ['10.4.7.11:9100']
    [root@server01 prometheus]# curl http://10.4.7.11:9100/metrics
    

     过滤收集器

      - job_name: 'node'
        static_configs:
        - targets: ['10.4.7.11:9100']
    	params:
    	  collect[]:
            - cpu
            - meminfo
            - diskstats
            - netdev
            - netstat
            - filefd
            - filesystem
            - xfs
            - systemd
    

    使用Node Exporter实例上的curl命令来对此进行测试

    [root@server01 prometheus]# curl -g -X GET http://10.4.7.11:9100/metrics?collect[]=cpu
    

    热重启prometheus

    [root@server01 prometheus]# kill -HUP pid
    

    cAdvisor部署

    [root@server02 ~]# docker run 
    --volume=/:/rootfs:ro  
    --volume=/var/run:/var/run:rw 
    --volume=/sys:/sys:ro 
    --volume=/var/lib/docker/:/var/lib/docker:ro 
    --publish=8080:8080 
    --detach=true 
    --name=cadvisor 
    google/cadvisor:latest
    

    让我们稍微分解查看下这个docker run命令。首先,我们在容器内挂载了几个目录。目录分为两种 类型,第一种是只读的,cAdvisor将从中收集数据,例如/sys目录:

    --volume=/sys:/sys:ro 
    

    第二种类型是可读写的,是Docker套接字的挂载,通常位于/var/run目录中。我们还将容器内部的8080端口映射到主机上的8080端口,你可以用任何适合的端口来覆盖它。我们使用参数--detach以守护进程方式运行容器,并将容器命名为cadvisor。最后,我们使用带有latest标签的google/cadvisor图像。

    使用10.4.7.11:8080访问页面,采集接口10.4.7.11:8080/metrics

     prome节点

    [root@server01 ~]# vi /opt/prometheus/prometheus.yml 
    
      - job_name: 'docker'
        static_configs:
        - targets: ['10.4.7.11:8080']
    
    [root@server01 ~]# kill -HUP 15916
    

    Node Exporter和cAdvisor指标

    CPU使用率

    页面查找 node_cpu_seconds_total

    node_cpu_seconds_total{cpu="1",instance="10.4.7.11:9100",job="node",mode="user"}
    

    node_cpu_seconds_total指标包含许多标签,包括instance和job标签,分别标识它来自哪个主机以及 被哪个作业抓取。

    我们还有两个特定于CPU的标签:从某个CPU(例如cpu0)收集的cpu指标和用于测量的CPU模式(例如user、system、idle等)的mode指标。数据从/proc/stat中抽取,并以计数的形式告诉我们每个 CPU在每种模式下使用了多少秒。
    首先计算每种CPU模式的每秒使用率。PromQL有一个名为irate的函数,用于计算范围向量中时间 序列增加的每秒即时速率。

    irate(node_cpu_seconds_total{job="node"}[5m])
    

    这将在irate函数中使用node_cpu_seconds_total指标并查询5分钟范围的数据。它将从node作业返回每个CPU在每种模式下的列表,表示为5分钟范围内的每秒速率。

    avg(irate(node_cpu_seconds_total{job="node"}[5m])) by (instance)
    

    生成主机CPU使用率,但这个指标还是不太准确,它仍然包括idle的值,并且它没有表示成百分比的形式。我们将查询每个实例的idle使用率,因为它已经是一个比率,将它乘以100可以转换为百分比。

    avg(irate(node_cpu_seconds_total{job="node",mode="idle"}[5m])) by (instance) * 100
    

    使用100减去该值就是CPU的使用率

    100 - avg(irate(node_cpu_seconds_total{job="node",mode="idle"}[5m])) by (instance) * 100
    

     CPU饱和度

    在主机上获得CPU饱和的一种方法是跟踪平均负载,实际上它是将主机上的CPU数量考虑在内的一段时间内的平均运行队列长度。平均负载少于CPU的数量通常是正常的,长时间内超过该数字的平 均值则表示CPU已饱和。

    平均1分钟的负载值

    node_load1
    

    计算主机上的CPU数量,可以使用count聚合

    count by (instance) (node_cpu_seconds_total{mode="idle"})
    

    将此值与node_load1结合起来

    node_load1 > on (instance)  2 * count by (instance) (node_cpu_seconds_total{mode="idle"})
    

    内存使用率

    为此,我们将 node_memory_MemFree_bytes、node_memory_Cached_bytes和node_memory_Buffers_bytes指标的值相加,这代表我们主机上的可用内存。然后我们将使用这个值和node_memory_MemTotal_bytes指标来计 算可用内存的百分比,使用以下查询:

    (node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Cached_bytes + node_memory_Buffers_bytes))
     / node_memory_MemTotal_bytes * 100
    

    内存饱和度

    我们还可以通过检查内存和磁盘的读写来监控内存饱和度。可以使用从/proc/vmstat收集的两个 Node Exporter指标:

    • node_vmstat_pswpin:系统每秒从磁盘读到内存的字节数。
    • node_vmstat_pswpout:系统每秒从内存写到磁盘的字节数。

    为了获得饱和度指标,我们对每个指标计算一分钟的速率,将两个速率相加,然后乘以1024以获 得字节数。我们会创建一个查询来执行此操作。

    1024 * sum by (instance) (rate(node_vmstat_pgpgin[1m]) + rate(node_vmstat_pgpgout[1m]))
    

    磁盘使用率

    (node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_free_bytes{mountpoint="/"}) / node_filesystem_size_bytes{mountpoint="/"} * 100
    


    不同目录修改mountpoint="/"就能解决
    也可以通过predict_linear来预测未来什么时间资源耗尽

    predict_linear(node_filesystem_free_bytes{job="node"}[1h], 4*3600)  < 0
    

    我们选择一小时的时间窗口[1h],并将此时间序列快照放在predict_linear函数中。该函数使用简单的线性回归,根据以前的增长情况来确定文件系统何时会耗尽空间。该函数参数包括一个范围向量,即一小时窗口,以及未来需要预测的时间点。这些都是以秒为单位的,因此这里使4*3600秒,即四小 时。最后<0过滤出小于0的值,即文件系统空间不足。

    服务状态 

     过滤docker服务状态为 active

    node_systemd_unit_state{name="docker.service",state="active"}
    

     

     配置记录规则

    [root@server01 prometheus]# mkdir -p rules
    [root@server01 prometheus]# cd rules/
    [root@server01 rules]# touch node_rules.yml
    [root@server01 prometheus]# vi prometheus.yml
    rule_files:
      - "rules/node_rules.yml"
    
    [root@server01 rules]# vi /opt/prometheus/rules/node_rules.yml
    groups:
    - name: node_rules
      rules:
      - record: instance:node_cpu:avg_rate5m
        expr: 100 - avg (irate(node_cpu_seconds_total{job="node",mode="idle"}[5m])) by (instance) * 100
      - record: instance:node_cpus:count
        expr: count by (instance)(node_cpu_seconds_total{mode="idle"})
      - record: instance:node_cpu_saturation_load1
        expr: node_load1 > on (instance) 2 * count by (instance)(node_cpu_seconds_total{mode="idle"})
      - record: instance:node_memory_usage:percentage
        expr: (node_memory_MemTotal_bytes - (node_memory_MemFree + node_memory_Cached_bytes + node_memory_Buffers_bytes)) / node_memory_MemTotal_bytes * 100
      - record: instance:node_memory_swap_io_bytes:sum_rate
        expr: 1024 * sum by (instance) (
                     (rate(node_vmstat_pgpgin[1m])
                     + rate(node_vmstat_pgpgout[1m]))
              )
      - record: instance:root:node_filesystem_usage:percentage
        expr: (node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_free_bytes{mountpoint="/"}) / node_filesystem_size_bytes{mountpoint="/"} * 100
    

     覆盖全局更新规则时间

    groups:
    - name: node_rules
      interval: 10s
    

    页面输入record值

     

     添加完后可通过promtools监测文件

    [root@server01 ~]# ./promtool check rules rules/node_rules.yml 
    

     检测通过后需要重载prometheus配置文件

    [root@server01 ~]# kill -HUP 2018 
    
  • 相关阅读:
    (005)Linux 复制命令cp总提示是否覆盖的解决方法,在cp前加
    (030)Spring Boot之RestTemplate访问web服务案例
    Gym
    Gym
    Gym.102006:Syrian Collegiate Programming Contest(寒假自训第11场)
    BZOJ-5244 最大真因数(min25筛)
    HDU
    HDU 1272 小希的迷宫(并查集)
    HDU 3038 How Many Answers Are Wrong(带权并查集)
    POJ 1182 食物链(带权并查集)
  • 原文地址:https://www.cnblogs.com/Wshile/p/12928329.html
Copyright © 2011-2022 走看看