搭建 Prometheus 对服务进行监控

news2024/11/25 14:37:55

前言:

        服务平时没啥问题,一到过节我放假,它也想放假,所以只能找个监工看着了。当前市面上主流的监工方案是 zabbix 和 prometheus,没有优劣之分,只是适用场景略有区别。我这边的需求就主要是监控服务的端口、接口响应、关键服务器的信息,使用prometheus比较合适。

一、prometheus 简介

        这里不做介绍,可以自行查阅或者去官网查询材料 (https://prometheus.io)。介绍几个相关的模块:

1. prometheus:监控的主服务模块

2. alertmanager:告警模块

3. blackbox_exporter:监控类型模块(支持 http、tcp等类型,并可自定义监控)

4. node_exporter:服务器资源监控模块,需要安装在被监控的服务器上,服务端口 9100

以上及其他模块可以在 https://prometheus.io/download 下载(我这边是普通的 redhat7.6系统,需要选择 amd 架构)。

二、服务搭建

规划把各服务放在 /apps/app 目录下

1. prometheus 搭建

1)服务前准备

#直接解压到指定目录
tar -xvf prometheus-2.45.0.linux-amd64.tar.gz -C /apps/app/

#重命名解压目录(完全个人习惯哈)
cd /apps/app
mv prometheus-2.45.0.linux-amd64 prometheus-2.45.0

#创建数据目录(服务启动会用到)
cd /apps/app/prometheus-2.45.0
mkdir data

2)prometheus 服务添加到系统

vim /usr/lib/systemd/system/prometheus.service

配置如下:

[Unit]
Description=Prometheus Server
Documentation=https://prometheus.io
After=network.target

[Service]
Type=simple
ExecStart=/apps/app/prometheus-2.45.0/prometheus \
--config.file=/apps/app/prometheus-2.45.0/prometheus.yml \
--storage.tsdb.path=/apps/app/prometheus-2.45.0/data/ \
--storage.tsdb.retention=10d \
--web.enable-lifecycle

ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target

3)prometheus 服务添加自启动

systemctl enable prometheus.service

4)启动prometheus 服务

systemctl start prometheus.service

可以在 http://ip:9090 看到prometheus服务页面(比较简单)

2. alertmanager 搭建

搭建过程跟上述类似,服务端口是 9093。

#解压到指定目录
tar -xvf alertmanager-0.26.0.linux-amd64.tar.gz -C /apps/app/

cd /apps/app
mv alertmanager-0.26.0.linux-amd64/ alertmanager-0.26.0/

#服务添加到系统配置
vim /usr/lib/systemd/system/alertmanager.service

#配置如下
[Unit]
Description=alertmanager

[Service]
ExecStart=/apps/app/alertmanager-0.26.0/alertmanager --config.file=/apps/app/alertmanager-0.26.0/alertmanager.yml
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure

[Install]
WantedBy=multi-user.target

#服务自启动
systemctl enable alertmanager.service

#启动服务
systemctl start alertmanager.service

3. blackbox_exporter 搭建

搭建过程跟上述类似,服务端口是 9115。

#解压到指定目录
tar -xvf blackbox_exporter-0.24.0.linux-amd64.tar.gz -C /apps/app/

cd /apps/app
mv blackbox_exporter-0.24.0.linux-amd64/ blackbox_exporter-0.24.0/

#服务添加到系统配置
vim /usr/lib/systemd/system/blackbox.service

#配置如下
[Unit]
Description=blackbox_exporter
After=network.target

[Service]
User=root
Type=simple
ExecStart=/apps/app/blackbox_exporter-0.24.0/blackbox_exporter --config.file=/apps/app/blackbox_exporter-0.24.0/blackbox.yml
Restart=on-failure

[Install]
WantedBy=multi-user.target

#服务自启动
systemctl enable blackbox.service

#启动服务
systemctl start blackbox.service

三、监控配置

1. 监控服务器

需要把 node_exporter 服务部署在被监控的服务器上

#解压到指定目录
 tar -xvf node_exporter-1.6.1.linux-amd64.tar.gz -C /apps/app/

cd /apps/app
mv node_exporter-1.6.1.linux-amd64/ node_exporter-1.6.1/

#服务添加到系统配置
vim /usr/lib/systemd/system/node_exporter.service

#配置如下
[Unit]
Description=node_exporter
Documentation=https://prometheus.io/
After=network.target

[Service]
Type=simple
ExecStart=/apps/app/node_exporter-1.6.1/node_exporter \
--collector.ntp \
--collector.mountstats \
--collector.systemd \
--collector.tcpstat

ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure

[Install]
WantedBy=multi-user.target


#服务自启动
systemctl enable node_exporter.service

#启动服务
systemctl start node_exporter.service

回到 prometheus 的服务器修改配置文件(prometheus 安装目录下 prometheus.yml):

#全局配置
global:
  scrape_interval: 15s
  evaluation_interval: 15s


#具体监控项
scrape_configs:
  - job_name: "服务器监控"
    static_configs:
      - targets: ['被监控服务器ip:9100']

重启 prometheus 服务:

systemctl restart prometheus.service

可以在 prometheus 界面的 Status -> Targets 看到这个服务器的监控项,点击超链接可以看到被监控服务器的详细信息(这种信息适合结合 grafana 用图表展示,这里不叙述)。

2. 监控端口

这个需要结合 blackbox_exporter 服务才能做到;打开 blackbox_exporter 的配置项查看一下默认支持的模块(安装目录下的 blackbox.yml 文件):

modules:
  http_2xx:
    prober: http
    http:
      preferred_ip_protocol: "ip4"
  http_post_2xx:
    prober: http
    http:
      method: POST
  tcp_connect:
    prober: tcp
  pop3s_banner:
    prober: tcp
    tcp:
      query_response:
      - expect: "^+OK"
      tls: true
      tls_config:
        insecure_skip_verify: false
  grpc:
    prober: grpc
    grpc:
      tls: true
      preferred_ip_protocol: "ip4"
  grpc_plain:
    prober: grpc
    grpc:
      tls: false
      service: "service1"
  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_ttl5:
    prober: icmp
    timeout: 5s
    icmp:
      ttl: 5

添加监控项到 prometheus 的配置文件(无关的配置参见上述):

scrape_configs:
  - job_name: '端口监控'
    metrics_path: /probe
    params:
      module: [tcp_connect] # blackbox_exporter 的模块
    static_configs:
      - targets: ['127.0.0.1:443']
        labels: # 自定义的一些字段,方便后续处理
          instance: 'local_service_tcp'
          group: 'web'
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - target_label: __address__
        replacement: 127.0.0.1:9115

重启 prometheus 服务,可在  Status -> Targets 看到监控项,点击监控项可以看到监控详情

3. 监控 http 响应的状态码

其他跟上述操作一样,配置项略有区别,如下:


  - job_name: 'http响应状态码监控'
    metrics_path: /probe
    params:
      module: [http_2xx]
    static_configs:
      - targets: ['http://127.0.0.1:9201/alert/test']
        labels:
          instance: 'local_service_http'
          group: 'web'
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - target_label: __address__
        replacement: 127.0.0.1:9115

4. 监控规则(告警规则)

上述已经配置了监控项,这里需要配置一些监控的触发条件,点击监控项可以看到监控的返回,我这里主要监控 probe_success 字段(进程活着等于 1,进程挂了等于 0)。

# 进入 prometheus 安装目录
cd /apps/app/prometheus-2.45.0

# 创建规则存放目录
mkdir rules

# 创建规则文件
cd rules
vim alert.rule

alert.rule 内容:

groups:
- name: hostStatsAlert

  rules:
  - alert: instance_down
    expr: probe_success == 0    # 这个是核心
    for: 1m
    labels:
      severity: node
    annotations:
      summary: "Instance {{ $labels.instance }} down"
      description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minutes."

上述规则加入到 prometheus 配置文件中:

rule_files:
  - ./rules/*.rule

重启 prometheus 服务,可以在 Status -> Rules 看到上述规则。

四、告警配置

        prometheus 服务界面有个 Alerts 页签,里面就是 alertmanager 服务的集成,所有触发监控规则的告警都会在这里显示。

1. 告警配置集成到prometheus

prometheus 配置文件添加配置:

alerting:
  alertmanagers:
    - static_configs:
        - targets: ['127.0.0.1:9093']

2. 自定义定义告警接收器

切换到 alertmanager 安装目录,修改 alertmanager.yml :

route:
  group_by: [...] # 禁用分组。
  group_wait: 30s
  group_interval: 1m
  repeat_interval: 2m
  receiver: 'prometheus_clock'       # 默认接收器
  routes:                            # 定义多个接收器,如果不需要可以删除
  - receiver: 'prometheus_special'
    match:                           # 这里跟告警项的label标签配置相匹配
      instance: local_service_http   # instance=local_service_http 时告警走上述接收器
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

receivers:                            # 告警接收器定义
  - name: 'prometheus_clock'
    webhook_configs:
      - url: 'http://127.0.0.1:9200/alert/msg/receive'
  - name: 'prometheus_special'
    webhook_configs:
      - url: 'http://127.0.0.1:9200/alert/msg/special'

当触发告警时,会在上述定义的接收器(接口)以 POST 方式发送一个 json 告警字符串,可以依据这个策略做进一步的自定义集成。

完成上述操作后记得重启 prometheus 和 alertmanager 服务。

五、自定义监控配置(举例)

这里我举个例子:我们这边有一套 eureka 注册中心,某些服务偶尔会掉线,所以我需要监控eureka 注册的实例数量。

1. 自定义模块

blackbox_exporter 配置项添加配置(末尾添加,跟其他模块平级关系):

  http_2xx_eureka:
    prober: http
    http:
      fail_if_body_not_matches_regexp:
      - "<apps__hashcode>UP_6_</apps__hashcode>"

上述配置含义:如果接口返回不匹配(包含)<apps__hashcode>UP_6_</apps__hashcode> 就触发告警,上述字符串是 eureka 实例接口数量的一段核心字段。

2. 添加监控项

  - job_name: 'test-eureka'
    metrics_path: /probe
    params:
      module: [http_2xx_eureka]
    static_configs:
      - targets: ['http://user:password@eureka的ip:端口/eureka/apps']
        labels:
          instance: 'service_eureka'
          group: 'web'
          type: 'http响应监控'
          ownerEmail: '负责人邮件'
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - target_label: __address__
        replacement: 127.0.0.1:9115

重启 blackbox_exporter 和 prometheus 服务即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1048540.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

温度与振动监测技术在电机故障智能诊断中的应用

在现代工业生产中&#xff0c;电机是许多设备和机械的核心驱动力。然而&#xff0c;电机故障可能会导致生产中断、设备损坏以及生产成本的增加。为了避免这些问题&#xff0c;工业设备状态监测技术应运而生。本文将探讨如何利用先进的设备状态监测技术&#xff0c;尤其是温度和…

各种业务场景调用API代理的API接口教程

API代理的API接口在各种业务场景中具有广泛的应用&#xff0c;本文将介绍哪些业务场景可以使用API代理的API接口&#xff0c;并提供详细的调用教程和代码演示&#xff0c;同时&#xff0c;我们还将讨论在不同场景下使用API代理的API接口所带来的好处。 哪些业务场景可以使用AP…

C# 字符串和正则表达式

C# 字符串和正则表达式 System.String 类StringBuilder 成员格式化字符串正则表达式 System.String 类 StringBuilder 成员 格式化字符串 正则表达式

央国企信创改造难在何处?先行建设国产身份域管可少走弯路

据统计&#xff0c;全球超 91% 的具规模企业将 Microsoft Active Directory &#xff08;微软AD&#xff09;作为数字化身份的基础底座。通常企业达到 300 人以上规模开始建设 AD&#xff0c;而高科技企业早在 50-60 人左右规模时就开始搭建。 AD身份域管是企业身份的事实标准 …

货物寄到英国选择什么物流比较划算?

随着全球化的发展&#xff0c;越来越多的企业开始将产品销售到海外市场&#xff0c;其中英国作为一个重要的贸易伙伴&#xff0c;吸引了大量的中国企业的关注。然而&#xff0c;如何将货物安全、快速地运送到英国&#xff0c;成为了众多企业面临的一个问题。那么&#xff0c;货…

拥抱数字正义时代,看AIGC如何驱动法律变革

人工智能&#xff0c;作为科技领域的代表&#xff0c;目前正在逐步渗透并应用于各个领域。大到政府的社会治理&#xff0c;小到提问的识别延伸&#xff0c;AI已悄然走进了生活中的各个领域。单说人民法院的司法工作中&#xff0c;随机分案的程序设计、音字转换的功能实现、裁判…

04、EL和JSTL核心技术

目录 1 EL表达式&#xff08;熟悉&#xff09; 1.1 基本概念 1.2 主要功能 1.3 访问内置对象的数据 1.3.1访问方式 1.3.2 执行流程 1.4 访问请求参数的数据 1.5 访问Bean对象的属性 1.5.1 访问方式 1.5.2 主要区别 1.6 访问集合中的数据 1.7 常用的内置对象 …

二叉树题目:二叉树剪枝

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;二叉树剪枝 出处&#xff1a;814. 二叉树剪枝 难度 4 级 题目描述 要求 给定二叉树的根结点 root \texttt{root} root&#xff0c;返回移除了所有…

LEO天线,全球市场总体规模,头部前八大厂商排名及市场份额

LEO天线全球市场总体规模 据QYResearch调研团队最新报告“全球LEO天线市场报告2023-2029”显示&#xff0c;预计2029年全球LEO天线市场规模将达到3545.3百万美元&#xff0c;未来几年年复合增长率CAGR为29.6%。 主要驱动因素: 近年来&#xff0c;全球航天工业的投资激增&#…

React antd Table点击下一页后selectedRows丢失之前页选择内容的问题

一、问题 使用了React antd 的<Table>标签&#xff0c;是这样记录选中的行id与行内容的&#xff1a; <TabledataSource{data.list}rowSelection{{selectedRowKeys: selectedIdsInSearchTab,onChange: this.onSelectChange,}} // 表格是否可复选&#xff0c;加 type: …

NFT Insider#109:The Sandbox推出了首个足球小将 NFT 作品集,YGG Web3 游戏峰会即将开启!

引言&#xff1a;NFT Insider由NFT收藏组织WHALE Members、BeepCrypto联合出品&#xff0c;浓缩每周NFT新闻&#xff0c;为大家带来关于NFT最全面、最新鲜、最有价值的讯息。每期周报将从NFT市场数据&#xff0c;艺术新闻类&#xff0c;游戏新闻类&#xff0c;虚拟世界类&#…

情满中秋᛫欢度国庆 | 联诚发与你共度佳节!

转眼九月份又走到尽头 国庆和中秋正好撞了个满怀 随风飘扬的国旗与满街飘香的月饼 国泰民安与阖家团圆 这是大家与小家最美好的祈愿 当中秋遇上国庆&#xff0c;当团圆遇上国诞 双节来临之际 为庆祝传统佳节与祖国生日 也为感谢联诚发每位员工的辛勤付出 9月28日下午 …

国庆旅游带什么东西?国庆数码必备数码清单请收好

出游度假少不了的是啥&#xff1f;当然是拍美美的照片记录快乐啦&#xff01;So&#xff0c;今天就特意给大家准备了一期数码产品&#xff0c;出游必备&#xff0c;而且还可以作为出片道具。 【umelody 轻律 U1头戴式耳机】——269元 产品外观定位时下流行之‘Retro Futurism’…

一朵华为云,如何做好百模千态?

点击关注 文丨刘雨琦、郝鑫 2005年华为提出网络时代的“All IP”&#xff0c;2011年提出数字化时代的“All Cloud”&#xff0c;2023年提出智能时代的“All Intelligence”。 截至目前&#xff0c;华为的战略升级经历了三个阶段。 步入智能化&#xff0c;需要迎接的困难依然…

异地寄件云打印教程

对于部分企业来说&#xff0c;出于各种原因&#xff0c;员工不得不进行“异地办公”&#xff0c;在这种情况下&#xff0c;因公寄件就是一件麻烦事儿&#xff0c;为什么这么说呢&#xff1f; 比方说一些电商企业&#xff0c;由于成本把控的问题&#xff0c;仓库会建在离货源地更…

降本提效促成交,抖音电商商品卡实时免佣这么做就对了!

抖音电商深耕全域生意&#xff0c;于今年3月推出商品卡免佣政策助力商家开辟生意新阵地&#xff0c;运行半年多&#xff0c;已有超百万商家收获可观免佣收益。9月1日起&#xff0c;商品卡免佣政策升级为实时免佣&#xff0c;佣金实时返还、金额清楚&#xff0c;再次激发商家经营…

混淆技术研究-混淆技术-源码分析(2)

简介 OLLVM(Obfuscator-LLVM)是基于LLVM(Low Level Virtual Machine)框架的一种代码混淆器。它主要用于对C/C++和汇编语言程序进行混淆,以增加代码的复杂性,提高代码的安全性和抵抗逆向工程的能力。 IR(Intermediate Representation)是指中间表示,是编译器在将源代码…

FastestDet---原理介绍

1.测试指标 2.算法定位 FastestDet是设计用来接替yolo-fastest系列算法,相比于业界已有的轻量级目标检测算法如yolov5n, yolox-nano, nanoDet, pp-yolo-tiny, FastestDet和这些算法根本不是一个量级,FastestDet无论在速度还是参数量上,都是要小好几个数量级的,但是精度自然…

为什么埃隆·马斯克说Rust是AGI的语言?

为什么埃隆马斯克说Rust是AGI的语言&#xff1f; 大喵点评&#xff1a;本文作者的观点不代表我的观点&#xff0c;另有人视频里指出Mojo比Python快 35000倍的测评有失偏颇。请见&#x1f447;视频。 但&#xff0c;本篇的价值在于 以及为什么WasmEdge是AGI采用Rust的关键路径…

HALCON支持GPU加速的算子有哪些?

参考例程get_operator_info。 get_opencl_operators这里可以查看到所有支持gpu加速的算子。 支持的算子列表&#xff1a; crop_rectangle1&#xff0c;deviation_image&#xff0c;mean_image&#xff0c;points_harris&#xff0c;gray_opening_shape&#xff0c; gray_dilat…