Prometheus:exporter 使用

2.4 Prometheus 采集 node 指标数据

配置 Prometheus 通过 node exporter 采集 node 节点的监控指标数据。

下面是 Prometheus 默认配置:

root@server:~# vim /apps/prometheus/prometheus.yml 

# 全局配置
global:                     # 数据采集生产环境推荐配置为 30s 一次,如果使用默认的 15s 一次的话数据量过多
  scrape_interval: 15s      # 采集间隔默认 15s 一次,如果不配置默认为一分钟
  evaluation_interval: 15s  # 规则采集时间 15s 一次,如果不配置默认为一分钟
  # scrape_timeout is set to the global default (10s).  默认数据采集超时时间

# Alertmanager 告警配置
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093     # 将告警时间发送给 alert manager 组件的 9093 端口,这个地方能够写多个

# 监控规则配置
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# 数据采集目标配置
# 需要指定 job 名称,并且这个名称是唯一的不能冲突
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"

    # metrics_path defaults to '/metrics' ,被抓去数据的端口下面默认得有 /metrics 的 URL 才行,所以自己开发 exporter 也需要指定该 URL
    # scheme defaults to 'http'.

    # 固定的服务上抓取数据,如果需要抓取多个得使用相同写法实现抓取
    static_configs:
      - targets: ["localhost:9090"]

1.修改 yaml 文件将 node-exporter 添加至 Prometheus 监控中

# yaml 文件中的 scrape_configs 字段中添加下面几行
root@server:~# vim /apps/prometheus/prometheus.yml 
  - job_name: "node_exporter"
    static_configs:
      - targets: ["10.0.0.138:9100","10.0.0.137:9100"]      # 有多个 node 需要通过 逗号隔开

2.检查配置文件

# 通过 promtool 工具检查 yaml 文件
root@server:/apps/prometheus# ./promtool check config prometheus.yml 
Checking prometheus.yml
  SUCCESS: 0 rule files found

3.重启加载 Prometheus

root@server:/apps/prometheus# systemctl reload prometheus.service

2.4.1 浏览器验证

http://10.0.0.139:9090/targets

1.node 节点已经实现被监控,其实这里 Prometheus 就是抓取的后端暴露的 metrics API 接口

2.配置好了之后我们就可以通过监控指标项来获取 node 的对应数据,比如这里我通过 node_memory_MemTotal_bytes 监控项来获取该 node 的内存总量,他拿到的这个数据是字节为单位

但是现在他一次性将所有的 node 都输出,那么我们该如何查看单个 node 信息呢?如下操作:在匹配的监控项后面通过大括号来取出,这个是 promQL 独有的语句

如果有多个主机我们可以通过 instance="xxxxxx" 来进行匹配


这样 Prometheus 就会周期性的去收集数据并将其存储至 TSDB

2.4.2 监控 K8S node

上面我演示了如何收集 node 资源,现在我们只需将 node_exporter 部署至 K8S 的 node 上

2.4.2.1 安装 node_exporter

1.在 K8S 集群中创建 apps 文件

# mkdir /apps
# cd /apps

2.下载安装包

# wget https://github.com/prometheus/node_exporter/releases/download/v1.2.2/node_exporter-1.2.2.linux-amd64.tar.gz

3.解压

# tar xf node_exporter-1.2.2.linux-amd64.tar.gz 

4.制作软连接

# ln -sv /apps/node_exporter-1.2.2.linux-amd64 /apps/node_exporter

5.编写 service 文件

# vim /etc/systemd/system/node-exporter.service 

[Unit]
Description=Prometheus Node Exporter 
After=network.target

[Service]
ExecStart=/apps/node_exporter/node_exporter

[Install]
WantedBy=multi-user.target

6.加载

# 1systemctl reload

# 开机启动
# systemctl enable --now node-exporter.service 

2.4.2.2 配置 server 端实现监控

我们装好了 K8S 集群的 node_exporter 之后需要修改 Prometheus 的配置文件将其把 K8S node 添加进去

1.修改 Prometheus-server 配置文件

root@server:/apps/prometheus# vim /apps/prometheus/prometheus.yml 
  - job_name: "kubernetes-node"
    static_configs:
      - targets: ["10.0.0.130:9100","10.0.0.131:9100","10.0.0.132:9100"]

2.重新加载 Prometheus

root@server:/apps/prometheus# systemctl reload prometheus.service 

3.浏览器验证已监控

2.5 blackbox exporter 监控 URL

https://prometheus.io/download/#blackbox_exporter

blackbox_exporter 是 Prometheus 官方提供的一个 exporter,可以通过 HTTP, HTTPS, DNS, TCP 和 ICMP 对被监控节点进行监控和数据采集。

blackbox exporter 是一个相对比较重要的 exporter

HTTP/HTPPS:URL/API 可用性检测
TCP:端口监听检测
ICMP:主机存活检测
DNS:域名解析

监控流程:


​ 监控 URL 的流程并不是在 blackbox 上面配置,而是需要在 Prometheus-server 上进行配置,在配置文件中添加 job 该 job 就是对一些 URL 或端口进行监控,在 Prometheus 上配置好了之后会将监控传给 exporter ,然后再将监控项传给 blackbox-exporter ,最后在是 blackbox-exporter 来监控网站的可用性,将监控数据抓取下来并返回给 Prometheus ,Prometheus 在将数据存储至 TSDB。

​ 对于 blackbox 来说需要配置的东西不多只需要知道监控那些 URL 和端口就行,这个端口还是在 Prometheus 中配置

​ 默认不需要修改 blackbox 的配置文件

2.5.1 部署 blackbox exporter

1.下载安装包

root@node:~# cd /apps/
root@node:/apps# wget https://github.com/prometheus/blackbox_exporter/releases/download/v0.19.0/blackbox_exporter-0.19.0.linux-amd64.tar.gz

2.解压

root@node:/apps# tar xf blackbox_exporter-0.19.0.linux-amd64.tar.gz 

3.创建软连接

root@node:/apps# ln -sv /apps/blackbox_exporter-0.19.0.linux-amd64 /apps/blackbox

4.编写 service 文件

# vim /etc/systemd/system/blackbox-exporter.service 
[Unit]
Description=Prometheus Blackbox Exporter
After=network.target

[Service]
Type=simple 
ExecStart=/apps/blackbox/blackbox_exporter \
        --config.file=/apps/blackbox/blackbox.yml \
        --web.listen-address=:9115 
Restart=on-failure

[Install]
WantedBy=multi-user.target

5.加载 service 文件

root@node:/apps# systemctl daemon-reload 
root@node:/apps# systemctl enable --now blackbox.service 

6.验证

# 9115 端口已经监听
root@node:/apps# ss -ntl | grep 9115
LISTEN   0         128                       *:9115                   *:*  

当 blackbox 起来之后不会抓取数据因为他连需要监控的数据都不知道,这个需要通过 Prometheus server 将采集项传递给他

7.查看 blackbox 配置文件

# 在 blackbox 配置中都是以模块的
root@node:/apps# cat blackbox/blackbox.yml 
modules:
  http_2xx:             # 这个名字是随便写的,但是需要在 prometheus.yml 配置文件中对应起来。
    prober: http        # 进行探测的协议,可以是 http、tcp、dns、icmp
  http_post_2xx:
    prober: http
    http:
      method: POST
  tcp_connect:          # tcp检测,比如检测某个端口是否在线
    prober: tcp
  pop3s_banner:
    prober: tcp
    tcp:
      query_response:
      - expect: "^+OK"
      tls: true
      tls_config:
        insecure_skip_verify: false
  ssh_banner:
    prober: tcp
    tcp:
      query_response:
      - expect: "^SSH-2.0-"
      - send: "SSH-2.0-blackbox-ssh-check"
  irc_banner:
    prober: tcp
    tcp:
      query_response:
      - send: "NICK prober"
      - send: "USER prober prober prober :prober"
      - expect: "PING :([^ ]+)"
        send: "PONG ${1}"
      - expect: "^:[^ ]+ 001"
  icmp:
    prober: icmp            # icmp 检测,比如ping某个服务器

2.5.2 web 访问验证

http://10.0.0.138:9115/

2.5.3 blackbox 实现对 URL 监控

prometheus 调用 blackbox exporter 实现对 URL/ICMP 的监控。

我们需要在 Prometheus-server 中配置,让 Prometheus 抓起的时候将这些数据传递给 blackbox

1.Prometheus 添加 blackbox 配置详解

# vim /apps/prometheus/prometheus.yml 
# 网站监控
  - job_name: 'http_status'             # 任务名称
    metrics_path: /probe                # 抓取数据默认保持不动
    params:                             # 参数
      module: [http_2xx]                # 调用 blackbox 模块
    static_configs:
      - targets: ['http://www.xiaomi.com', 'http://www.baidu.com']  # 监控网站,所以要求 blackbox 服务器能够访问
        labels:                         # 由于有多个监控指标通过打 labels 的方式进行区分各个
          instance: http_status         # Prometheus web 页面名称
          group: web
    relabel_configs:                    # 添加标签
      - source_labels: [__address__]    # relabel 通过将 __address__(当前目标地址) 写入 __param_target 标签来创建一个 label。source_labels 和 target_label 是一个键值对,会生成一个新的 label,通过变量获取
        target_label: __param_target    # 监控目标 www.xiaomi.com,www.baidu.com 作为 __address__ 的 value
      - source_labels: [__param_target] # 调用监控目标
        target_label: url               # 将监控目标与 url 创建一个 label,url 是 key value= __param_target
      - target_label: __address__       # 定义监控 __address__ 的 blackbox 
        replacement: 10.0.0.138:9115    # 写入 blackbox 的 ip 和端口

2.添加配置文件

root@server:/apps/prometheus# vim prometheus.yml 

- job_name: "http_status"
    metrics_path: /probe                   
    params:                                                        
      module: [http_2xx]                            
    static_configs:
      - targets: ['http://www.xiaomi.com', 'http://www.baidu.com']
        labels:                                            
          instance: http_status
          group: web
    relabel_configs:      
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: url   
      - target_label: __address__
        replacement: 10.0.0.138:9115

3.检查语法并重新加载 Prometheus

root@server:/apps/prometheus# ./promtool check config prometheus.yml 
Checking prometheus.yml
  SUCCESS: 0 rule files found

root@server:/apps/prometheus# systemctl reload prometheus.service 

2.5.3.1 web 访问验证


url 就是 key 值的话来自于我们监控的目标域名

Prometheus 监控之后我们再去看 blackbox 的 web 界面

如果说我们还想监控一个域名,只需要在 Prometheus 的配置文件中的 targets 字段在添加一个即可如下操作

1.添加新的 URL

2.重新加载

root@server:/apps/prometheus# systemctl reload prometheus.service 

3.浏览器访问已经添加成功

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇