一、确定时钟所涉及主机的时钟一致。

参考:linux时钟服务ntp和chronyd-CSDN博客

二、安装prometheus服务:


功能:接收被监控主机通过_exporter服务向外发送的监控指标,以时间序列存储所有指标,以供监控和告警使用。


安装包下载地址(x86_64):

https://github.com/prometheus/prometheus/releases/download/v3.2.1/prometheus-3.2.1.linux-amd64.tar.gzhttps://github.com/prometheus/prometheus/releases/download/v3.2.1/prometheus-3.2.1.linux-amd64.tar.gz

安装命令:

tar xvfz prometheus-*.tar.gz

cd prometheus-* ; ll

       配置prometheus.yml文件:

        vim Prometheus.yml

global:

  scrape_interval: 15s           ##默认拉取频率

  evaluation_interval: 15s      ##执行规则频率

  scrape_timeout: 5s         ##拉取超时时间

alerting:

  alertmanagers:

    - static_configs:

        - targets: ["192.168.48.128:9093"]           ##alertmanager服务地址端口指定

      path_prefix: /root/alertmanager-0.28.0.linux-amd64

rule_files:

  - "alert.yml"                         ##告警规则文件地址文件名指定

scrape_configs:                       ##具体的拉取数据的相关配置

  - job_name: "prometheus"

    static_configs:

      - targets: ["localhost:9090"]

  - job_name: "node-exporter"

    static_configs:

      - targets: ["192.168.48.129:9100"]   ##被监控主机的ip:port

        labels:

          group: 'linux'                          ##自定义标签

      - targets: ['192.168.48.131:9182']

        labels:

          group: 'win10'

        配置告警规则:

        vim alert.yml

groups:
- name: example
  rules:
  
  # 实例不可达警报
  - alert: InstanceDown
    expr: up == 0
    for: 5s
    labels:
      severity: critical
    annotations:
      summary: "Instance {{ $labels.instance }} down"
      description: "实例down"
  # 内存使用率过高警报
  - alert: HighMemoryUsage
    expr: 100 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100) > 80
    for: 10s
    labels:
      severity: warning
    annotations:
      summary: "High Memory Usage on {{ $labels.instance }}"
      description: "Memory使用率超过80%"

        配置服务单元:

        vim /etc/system/system/prometheus.service

[Unit]

Description=prometheus

After=network.target

[Service]

WorkingDirectory=/root/prometheus-3.2.1.linux-amd64                  ##工作路径

ExecStart=/root/prometheus-3.2.1.linux-amd64/prometheus \

 --config.file="prometheus.yml" \                                                        ##配置文件指定

 --web.listen-address=:9090 \                                                     ##运行端口指定

 --storage.tsdb.path /root/prometheus-3.2.1.linux-amd64/data            ##数据存储路径指定

StandardOutput=append:/var/log/prometheus.log

StandardError=append:/var/log/prometheus_error.log

[Install]

WantedBy=default.target

        启动服务:

              systemctl daemon-reload

              systemctl start prometheus.service

              systemctl status prometheus.service

              systemctl enable prometheus.service

三、安装node-exporter服务


功能:通过读取系统日志,内存中的文件系统和执行相应指令获得对应监控指标的值,通过指定端口向外发送。


安装包下载地址:https://github.com/prometheus/node_exporter/releases/download/v1.9.0/node_exporter-1.9.0.linux-amd64.tar.gzhttps://github.com/prometheus/node_exporter/releases/download/v1.9.0/node_exporter-1.9.0.linux-amd64.tar.gz

安装命令:

tar xvfz node_exporter-*.tar.gz

cd node_exporter-* ; ll

       配置服务单元:

        vim /etc/system/system/node_exporter.service

[Unit]

Description=Prometheus Node Exporter

After=network.target

[Service]

Type=simple

User=root

Group=root

ExecStart=/root/node_exporter-1.9.0.linux-amd64/node_exporter \

        --collector.systemd \

        --collector.textfile.directory=/root/node_exporter-1.9.0.linux-amd64/textfiles \

        --web.listen-address=:9100

StandardOutput=append:/var/log/node_exporter.log

StandardError=append:/var/log/node_exporter_error.log

SyslogIdentifier=node_exporter

Restart=always

[Install]

WantedBy=default.target

              启动服务:

                      systemctl daemon-reload

                      systemctl enable --now node_exporter.service

                      systemctl status node_exporter.service

配置自定义监控指标:

       例如:监听sshd进程状态,crontab定时通过textfile.sh脚本获取进程状态,以一定格式输出到textfile指定的采集目录/root/node_exporter-1.9.0.linux-amd64/textfiles/中的process_pid.prom文件中。

        mkdir -R /root/node_exporter-1.9.0.linux-amd64/textfiles/

        mkdir -R /root/node_exporter-1.9.0.linux-amd64/scripts/

        touch /root/node_exporter-1.9.0.linux-amd64/textfiles/process_pid.prom

        自定义监控生成脚本:

        vim /root/node_exporter-1.9.0.linux-amd64/scripts/textfile.sh

#!/bin/bash

# 设置你要监控的进程名称

PROCESSNAME="sshd"

# 使用pgrep找到进程ID,注意这里可能返回多个PID,取决于是否有多个实例运行

PIDS=$(pgrep -f "$PROCESSNAME")

# 一个进程名称对应多个进程时,对进程进行编号区分

PROCESSNUM=0

# 清空历史数据

cat /dev/null > /root/node_exporter-1.9.0.linux-amd64/textfiles/process_pid.prom

# 为每个PID创建一个临时文件,格式符合Prometheus文本格式

for PID in $PIDS; do

         ((PROCESSNUM++))

         echo "process_"$PROCESSNAME"_$PROCESSNUM{process=\"$PROCESSNAME\", instance=\"$HOSTNAME\"} $PID" >> /root/node_exporter-1.9.0.linux-amd64/textfiles/process_pid.prom

done

        自定义脚本定时任务:      

        crontab -l > ./crontab-20250310.bak

        crontab -e

              * * * * * /root/node_exporter-1.9.0.linux-amd64/scripts/textfile.sh > /dev/null 2>&1

四、windows_exporter配置


功能:采集windows操作系统层面的监控指标


安装包下载地址:

https://github.com/prometheus-community/windows_exporter/releases/download/v0.30.5/windows_exporter-0.30.5-amd64.exehttps://github.com/prometheus-community/windows_exporter/releases/download/v0.30.5/windows_exporter-0.30.5-amd64.exe(命令行安装包)

https://github.com/prometheus-community/windows_exporter/releases/download/v0.30.5/windows_exporter-0.30.5-amd64.msihttps://github.com/prometheus-community/windows_exporter/releases/download/v0.30.5/windows_exporter-0.30.5-amd64.msi(图形化安装包)

图形化安装:

       使用管理员模式启动powershell,配置config.yaml文件:

echo “collectors:

  enabled: cpu,cpu_info,exchange,iis,logical_disk,logon,memory,net,os,performancecounter,process,remote_fx,service,system,tcp,time,terminal_services,textfile

  textfile_collector:

    directory: C:\Program Files\windows_exporter\textfile_inputs

log:

  level: warn

  format: logfmt

  file: C:\Program Files\windows_exporter\log\windows_exporter.log” > config.yaml

        重启windows_exporter:

              sc.exe stop windows_exporter

              sc.exe start windows_exporter

命令行安装命令:

sc.exe create windows_exporter binPath=""E:\windows_exporter\windows_exporter-windows_exporter-0.30.4-amd64.exe" --collectors.enabled="cpu,cpu_info,exchange,iis,logical_disk,logon,memory,net,os,performancecounter,process,remote_fx,service,system,tcp,time,terminal_services,textfile" --web.listen-address :9182 --collector.textfile.directories="E:\windows_exporter\textfile_inputs" --log.file "E:\windows_exporter\log\windows_exporter.log" --log.format logfmt --log.level debug" start=auto obj="NT AUTHORITY\LocalService"

注:

--web.listen-address :9182                                                                  #监听地址和端口

--collector.textfile.directories="E:\\windows_exporter\\textfile"           #textfile指标文件目录

--log.file "E:\windows_exporter\log\windows_exporter.log"                   #日志输出目标

--log.format logfmt                                                                           #日志格式(logfmt、json、text)

--log.level info"                                                                                 #日志级别(info、debug、warn)

       启动服务:

       sc.exe start windows_exporter

       删除服务:

       sc.exe stop windows_exporter

       sc.exe delete windows_exporter

       验证服务:

       sc.exe query windows_exporter

        查看日志:Get-Content C:\logs\windows_exporter.log -Wait

        端口检查:netstat -ano | findstr :9182

bat脚本自动生成textfile采集文件,使用任务计划程序定时启动脚本:

        1、创建bat脚本process_statu_monitor.bat

@echo off

setlocal enabledelayedexpansion

:: ----------------------------------------

:: 配置区域(根据实际环境修改)

:: ----------------------------------------

set TEXTFILE_DIR="E:\windows_exporter\textfile_inputs"

set PROCESS_NAME=PowerShell

set LOG_FILE= "E:\windows_exporter\log\textfile.log"

set process_status=2

:: ----------------------------------------

:: 检测PowerShell进程状态(0=未运行,1=运行)

:: ----------------------------------------

tasklist /FI "IMAGENAME eq %PROCESS_NAME%*" 2>nul | find /i "%PROCESS_NAME%" >nul

if %errorlevel% equ 0 (

    set process_status=1

) else (

    set process_status=0

)

:: 确保目录存在并赋权

if not exist "%TEXTFILE_DIR%" (

    mkdir "%TEXTFILE_DIR%"

)

:: 测试环境简化权限

icacls "%TEXTFILE_DIR%" /grant "Everyone:(OI)(CI)W"

:: ----------------------------------------

:: 生成Prometheus指标文件

:: ----------------------------------------

(

    echo # HELP powershell_process_status powershell status 0=running,1=stoped

    echo # TYPE powershell_process_status gauge

    echo powershell_process_status !process_status!

) > "%TEXTFILE_DIR%\process_status.prom"

:: 原子操作:临时文件替换确保采集器读取完整性

:: move /Y %TEXTFILE_DIR%\process_status.prom.tmp %TEXTFILE_DIR%\process_status.prom >nul

:: =============================================

:: 日志记录(带时间戳和状态记录)

:: =============================================

echo [%date% %time%] ^

process_status=!process_status!  >> %LOG_FILE%

endlocal

exit /b 0

        2、创建对应textfile和日志路径:

                New-Item -Path " E:\windows_exporter\textfile_inputs " -ItemType Directory

                New-Item -Path " E:\windows_exporter\log " -ItemType Directory

        3、测试textfile自定义指标采集情况:

              curl http://localhost:9182/metrics | findstr "powershell_process_status"

        4、设置任务计划程序,自动定时执行textfile的bat脚本:

五、安装alertmanager服务


功能:Alertmanager 处理由Prometheus服务器等客户端应用程序发送的警报。它负责重复数据删除、分组和路由 它们连接到正确的接收器集成,例如电子邮件、PagerDuty 或 OpsGenie。它还负责警报的静默和抑制。


安装包下载地址:

https://github.com/prometheus/alertmanager/releases/download/v0.28.1/alertmanager-0.28.1.linux-amd64.tar.gzhttps://github.com/prometheus/alertmanager/releases/download/v0.28.1/alertmanager-0.28.1.linux-amd64.tar.gz

安装命令:

tar xvfz alertmanager-*.tar.gz

cd alertmanager ; ll

       配置alertmanager.yml文件:

        vim alertmanager.yml

global:

  # 处理警报的SMTP服务器的配置

  smtp_smarthost: 'smtp.qq.com:587'

  smtp_from: '6742*****@qq.com'

  smtp_auth_username: '6742*****@qq.com'

  smtp_auth_password: '**************'                        #登录qq邮箱,申请开启smtp服务,会生成此密码

  resolve_timeout: 5m

# 定义路由树,用于决定警报应该发送到哪里

route:

  group_by: ['alertname']

  group_wait: 5s

  group_interval: 10s

  repeat_interval: 12h

  receiver: 'team-X-mails'

  # 可以定义子路由,例如根据严重性或团队进行细分

  #routes:

  #- match:

  #    severity: 'critical'

  #  receiver: 'team-X-pager'

  #  group_wait: 10s

templates:

- '/root/alertmanager-0.28.0.linux-amd64/templates/email_template.tmpl' #模板文件路径

receivers:

- name: 'team-X-mails'

  email_configs:

  - to: '6742*****@qq.com'

    send_resolved: true

    html: '{{ template "email.default.html" . }}'  # 引用模板

    headers:

      Subject: '{{ template "email.default.subject" . }}'  # 邮件主题

  webhook_configs:

  - url: 'http://192.168.48.128:8080/prometheusalert?type=alydx&tpl=prometheus-alydx&phone=153********'

    send_resolved: true

        qq邮箱smtp服务开启:

       配置服务单元:

       vim /etc/systemd/system/alertmanager.service

[Unit]

Description=Alertmanager for Prometheus

After=network.target

[Service]

ExecStart=/root/alertmanager-0.28.0.linux-amd64/alertmanager \

  --web.route-prefix=/root/alertmanager-0.28.0.linux-amd64 \

  --web.listen-address=:9093 \

  --config.file=/root/alertmanager-0.28.0.linux-amd64/alertmanager.yml \

  --storage.path=/root/alertmanager-0.28.0.linux-amd64/data

StandardOutput=append:/var/log/alertmanager.log

StandardError=append:/var/log/alertmanager_error.log

[Install]

WantedBy=default.target

        登录alertmanager Web UI验证:

        http://localhost:9093

六、安装grafana服务


功能:Grafana 开源软件 (OSS) 能查询、可视化、提醒和探索您的指标、日志和跟踪,无论它们存储在何处。Grafana 数据源插件使您能够查询数据源,包括 Prometheus 和 CloudWatch 等时间序列数据库、Loki 和 Elasticsearch 等日志记录工具、Postgres 等 NoSQL/SQL 数据库、GitHub 等 CI/CD 工具等等。Grafana OSS 为您提供了一些工具,可通过富有洞察力的图表和可视化效果在实时控制面板上显示这些数据。


安装包下载地址(ubuntu x86_64):https://dl.grafana.com/enterprise/release/grafana-enterprise_11.5.2_amd64.debhttps://dl.grafana.com/enterprise/release/grafana-enterprise_11.5.2_amd64.deb

安装命令:

sudo apt-get install -y adduser libfontconfig1 musl

sudo dpkg -i grafana-enterprise_11.5.2_amd64.deb

安装包下载地址(redhat x86_64): https://dl.grafana.com/enterprise/release/grafana-enterprise-11.5.2-1.x86_64.rpmhttps://dl.grafana.com/enterprise/release/grafana-enterprise-11.5.2-1.x86_64.rpm

安装命令:

yum install -y grafana-enterprise-11.5.2-1.x86_64.rpm

       启动服务单元:

       systemctl daemon-reload

       systemctl enable --now grafana-server.service

       systemctl status grafana-server.service

       查看图形化界面:

       https://localhost:3000

        配置监控界面:

                1、配置数据源

               2、登录grafana官网选择合适daskboard模板

Grafana dashboards | Grafana Labshttps://grafana.com/grafana/dashboards/

                3、导入daskboard模板

                4、展示监控视图,亦可自行编辑视图

六、安装prometheusalert


功能:PrometheusAlert 是一个告警通知网关,负责将来自 Alertmanager 的告警信息转化为不同通知渠道(如短信、钉钉、企业微信等)的格式并发送。


安装包下载地址:https://github.com/feiyu563/PrometheusAlert/releases/download/v4.9.1/linux.ziphttps://github.com/feiyu563/PrometheusAlert/releases/download/v4.9.1/linux.zip

安装命令:

unzip linux.zip

mv linux PrometheusAlert

cd conf/

cp app.conf app.conf.bak

firewall-cmd --list-all

firewall-cmd --zone=public --add-port=9100/tcp –permanent

firewall-cmd –reload

配置阿里云短信服务:

通过prometheusalert服务转发告警信息到阿里云短信服务,将告警信息推送至手机短信。

  1. 申请阿里云accesskey

        注:申请过程中记录好密钥AccessSecret,后续在配置中使用。

        2、申请阿里云短信模板

        注:在此处,申请签名,申请短信模板,通过审核之后,记录短信签名名和短信模板id。后续配置使用。

        鉴于prometheusalet代码中硬编码code字段的缘故,我们的短信模板仅设置一个code字段。

        3、配置prometheusalert配置文件(配置阿里云短信服务)

        vim app.conf

#---------------------↓阿里云接口-----------------------

#是否开启阿里云短信告警通道,可同时开始多个通道0为关闭,1为开启

open-alydx=1

#阿里云短信主账号AccessKey的ID

ALY_DX_AccessKeyId=LTAI*********************

#阿里云短信接口密钥

ALY_DX_AccessSecret=****************************************

#阿里云短信签名名称

ALY_DX_SignName=**************

#阿里云短信模板ID

ALY_DX_Template=SMS_***********

        4、登录prometheusalert web UI(http://ip:8080),设置自定义模板

        5、配置prometheusalert服务单元

        vim /etc/systemd/system/prometheusalert.service

[Unit]

Description=PrometheusAlert Service

After=network.target

[Service]

Type=simple

User=root  # 建议使用非root用户,需提前创建

Group=root

WorkingDirectory=/root/PrometheusAlert  # 替换为你的安装路径

ExecStart=/root/PrometheusAlert/PrometheusAlert  # 指向可执行文件路径

Restart=always

StandardOutput=/var/log/prometheusalert.log

StandardError=/var/log/prometheusalert_error.log

SyslogIdentifier=prometheusalert

[Install]

WantedBy=default.target

6、启动prometheusalert服务单元

              systemclt daemon-reload

              systemctl start prometheusalert.service

              systemctl stop prometheusalert.service

7、登录阿里云短信控制台查看prometheusalert向阿里云短信服务的推送情况

注:可见发送失败,原因是短信签名虽然经过阿里云的审核,但还未通过运营商的报备,需要等待,企业账号可能会快一些,个人账户需要一段时间。

八、pushgateway


功能:当目标资源与prometheus不在同一网段或因为防火墙不开放等原因导致prometheus无法刮取目标资源指标时,可以通过pushgateway作为一个中介,让目标资源向其推送指标,prometheus定时刮取pushgateway上的数据。或者因为目标资源生命的周期太短,例如容器的启动、执行、停止等指标,可以利用pushgateway的短时存储特性,使prometheus通过pushgateway获取。


注:此文档中,我们在内网搭建整个监控系统,暂未使用到此组件。以后用到时再单独研究。

安装包下载地址:https://github.com/prometheus/pushgateway/releases/download/v1.11.0/pushgateway-1.11.0.linux-amd64.tar.gzhttps://github.com/prometheus/pushgateway/releases/download/v1.11.0/pushgateway-1.11.0.linux-amd64.tar.gz

安装命令:

        tar -zxvf pushgateway-1.11.0.linux-amd64.tar.gz

        mv pushgateway-1.6.2.linux-amd64 pushgateway

        chown -R root:root pushgateway

        配置pushgateway服务单元:

        vim /etc/system/system/pushgateway.service

[Unit]

Description=Pushgetway

After=network.target

[Service]

Type=simple

Group=prometheus

ExecStart=/opt/prometheus/pushgateway/pushgateway

Restart=on-failure

[Install]

WantedBy=default.target

        启动pushgateway服务:

        systemctl daemon-reload

        systemctl start pushgateway.service

        systemctl status pushgateway.service

        firewall-cmd --zone=public --add-port=9091/tcp --permanent

        firewall-cmd --reload

        访问pushgateway web UI:

        http://ip:9091/ 

配置prometheus:

vim prometheus.yml

  - job_name: "pushgateway"

    scrape_interval: 30s

    honor_labels: true  //加上此配置,exporter节点上传数据中的一些标签将不会被pushgateway节点的相同标签覆盖

    static_configs:

    - targets: ["localhost:9091"]

      labels:

        instance: pushgateway

然后重载prometheus。

向pushgateway推送数据:

        推送路径的URL 部分定义为:

                /metrics/job/<JOB_NAME>{/<LABEL_NAME>/<LABEL_VALUE>}

                job是必须参数,label_name部分是可选的,URL中的job和label组合唯一标识pushgateway中Group

        在推送的数据部分。格式定义如下:

                metric_name{lable_name="label_value",...}  value

        测试项pushgateway推送数据:

                 推送一条:echo "my_metric 2022" | curl --data-binary @-http://192.168.134.133:9091/metrics/job/test-job

                在推送一条将值改外为2023::echo "my_metric 2023" | curl --data-binary @- http://192.168.134.133:9091/metrics/job/test-job

                删除推送的数据::curl -X DELETE http://ip:9091/metrics/job/test-job

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐