搭建Prometheus+Grafana监控平台

67

搭建Prometheus+Grafana监控平台

部署流程

1.安装 Docker
2.安装 Prometheus(收集监控数据)
3.安装 Grafana (用于监控的仪表盘)
4.安装 Node_exporter (上报数据)
5.配置 Prometheus 监控Node节点
    1) 修改Prometheus主配置文件
    2) 重启Prometheus容器
6.配置Prometheus + Grafana

#安装必备工具
yum install -y vim lsof ntpdate #无法安装时将下文vim替换成自带的vi
#同步时间
ntpdate cn.pool.ntp.org
#防火墙配置命令
firewall-cmd --permanent --list-ports #查看已放开端口
firewall-cmd --permanent --add-port=8868/tcp #增加TCP协议端口8868
firewall-cmd --reload #重载

1安装Docker

联网安装

#Docker一键安装脚本
首选脚本:
	bash <(curl -sSL https://linuxmirrors.cn/docker.sh)
备选脚本:
   bash <(curl -sSL https://gitee.com/SuperManito/LinuxMirrors/raw/main/DockerInstallation.sh)
#根据脚本提示一直下一步
#修改Docker镜像仓库
 vim /etc/docker/daemon.json

#docker配置中的registry-mirrors
vi /etc/docker/daemon.json

{
  "registry-mirrors": ["https://docker.1ms.run"]
}

无网络安装

上传docker-20.10.17.tgz到服务器**/root**文件夹下
#解压
tar -zxvf docker-28.1.1.tgz
#解压之后的文件复制到 /usr/bin/ 目录下
cp docker/* /usr/bin/

#在/etc/systemd/system/目录下新增docker.service文件
vim /etc/systemd/system/docker.service
粘贴下面内容到docker.service中并保存
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
  
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd --selinux-enabled=false
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
  
[Install]
WantedBy=multi-user.target
启动Dokcer
#给docker.service文件添加执行权限
chmod +x /etc/systemd/system/docker.service
#重新加载配置文件(每次有修改docker.service文件时都要重新加载下)
systemctl daemon-reload  
#启动docker
systemctl restart docker

#设置开机启动
systemctl enable docker.service
#查看docker服务状态
systemctl status docker
#修改Docker镜像仓库
 vim /etc/docker/daemon.json

#docker配置中的registry-mirrors
vim /etc/docker/daemon.json

{
  "registry-mirrors": ["https://docker.1ms.run"]
}
#重新加载配置文件(每次有修改daemon.json文件时都要重新加载下)
systemctl daemon-reload  
#启动docker
systemctl restart docker

2安装Prometheus

防火墙开放端口9090

有网环境:

#拉取镜像
docker pull prom/prometheus

docker run -itd --name=prometheus \
--restart=always \
-p 9090:9090 \
prom/prometheus

无网络环境:

#上传prometheus.tar.gz镜像压缩包到/root目录下
#执行命令导入镜像包
docker load -i prometheus.tar.gz

#运行
docker run -itd --name=prometheus \
--restart=always \
-p 9090:9090 \
prom/prometheus

浏览器访问 http://192.168.0.1:9090 来进行验证

安装Grafana

有网环境:

docker pull grafana/grafana

docker run -itd --name=grafana \
--restart=always \
-p 3000:3000 \
-v /root/grafana-storage:/var/lib/grafana \
grafana/grafana-oss

无网络环境:

#上传grafana.tar.gz镜像压缩包到/root目录下
mkdir /root/grafana-storage
chmod -R 777 /root/grafana-storage

#执行命令导入镜像包
docker load -i grafana.tar.gz

docker run -itd --name=grafana \
--restart=always \
-p 3000:3000 \
-v /root/grafana-storage:/var/lib/grafana \
grafana/grafana-oss

浏览器访问 http://192.168.0.1:3000 来进行验证

安装Node_exporter

​ 在需要进行监控的服务器上进行安装

docker方式安装:

docker pull prom/node-exporter
docker run -itd --name=node-exporter \
--restart=always \
-p 9100:9100 \
-v "/proc:/host/proc:ro" \
-v "/sys:/host/sys:ro" \
-v "/:/rootfs:ro" \
prom/node-exporter

通过浏览器访问 http://192.168.0.1:9100/metrics 来查看监控收集的数据

二进制方式安装:

将node_exporter-1.2.2.linux-amd64.tar.gz上传到/root目录下进行解压

#1.添加新的系统用户
useradd --system node_exporter

#2.进行解压缩下载的软件,然后拷贝node_exporter文件到/usr/bin目录中。
tar zxvf node_exporter-1.2.2.linux-amd64.tar.gz -C /usr/bin --strip-components=1 --wildcards */node_exporter
 
#3.添加systemd unit文件
vim node-exporter.service 

#粘贴以下内容到node-exporter.service中
[Unit]
Description=Node Exporter
Documentation=https://github.com/prometheus/node_exporter
After=network.target

[Service]
User=node_exporter
ExecStart=/usr/bin/node_exporter
Restart=on-failure

[Install]
WantedBy=multi-user.target
 
#4.安装启动服务配置
install -m 0644 ./node-exporter.service /etc/systemd/system/
 
#5.启动服务
systemctl daemon-reload
systemctl enable node-exporter
systemctl start node-exporter

默认情况下,node_exporter 在端口9100上运行,并在路径/metrics上暴露指标可以通过浏览器访问获取指标数据

安装Mysql_exporter

二进制安装

上传mysqld_exporter-0.17.2.linux-amd64.tar.gz至/root目录下

cd /root
#解压
tar -xvzf mysqld_exporter-0.17.2.linux-amd64.tar.gz
mv mysqld_exporter-0.17.2.linux-amd64 mysqld_exporter
cd mysqld_exporter
  • 创建配置文件.my.cnf ,填入如下内容后保存:wq

    vim .my.cnf
    
    [client]
    user = root
    password = ZHEtang403~!
    host = 127.0.0.1
    port = 3306
    
  • 创建mysqld_exporter.service配置文件

    vim /usr/lib/systemd/system/mysqld_exporter.service
     
    #粘贴以下内容进去并保存
    [Unit]
    Description=mysql_exporter
    After=network.target
    
    [Service]
    Restart=on-failure
    ExecStart=/root/mysqld_exporter/mysqld_exporter --config.my-cnf=/root/mysqld_exporter/.my.cnf --web.listen-address=:9104
    
    [Install]
    WantedBy=multi-user.target
    
  • 刷新服务配置并启动服务

    systemctl daemon-reload
    systemctl start mysqld_exporter.service
    
    #查看状态
    systemctl status mysqld_exporter.service
    #开机自启动
    systemctl enable mysqld_exporter.service
    #测试服务返回
    curl localhost:9104/metrics
    
    

docker安装

Mysql_exporter配置文件my.cnf

[client]
host=10.25.140.19
user=root
password=ZHEtang403~!

挂载配置文件my.cnf

docker run -d -p 9104:9104 --name mysqld-exporter --restart=always --volume=/root/my.cnf:/etc/mysql/my.cnf:ro prom/mysqld-exporter --config.my-cnf=/etc/mysql/my.cnf

安装JMX_Exporter(可选)

#监控jar包
java -javaagent:/javaagent/jmx_prometheus_javaagent-1.3.0.jar=7099:/javaagent/config.yaml -jar your_application.jar

#直接监控tomcat,修改catlina.sh
JAVA_OPTS="-javaagent:/javaagent/jmx_prometheus_javaagent-1.3.0.jar=17099:/javaagent/config.yaml -jar"

配置 Prometheus 监控Node节点

docker cp prometheus:/etc/prometheus/prometheus.yml $PWD
vim prometheus.yml

在Prometheus配置文件按以下内容修改:

# my global config
global:
  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# 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'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ["localhost:9090"]

  - job_name: 'node_exporter'			#监控服务器
    static_configs:
      - targets: ['10.25.251.19:9100']         #被监控端的IP地址和端口号(有多个被监控端可用 逗号 隔开)
        labels:
          instance: '10.25.251.19'

      - targets: ['10.25.140.25:9100']         #被监控端的IP地址和端口号(有多个被监控端可用 逗号 隔开)
        labels:
          instance: '10.25.140.25'

      - targets: ['10.25.140.19:9100']         #被监控端的IP地址和端口号(有多个被监控端可用 逗号 隔开)
        labels:
          instance: '10.25.140.19'

      - targets: ['10.25.140.36:9100']         #被监控端的IP地址和端口号(有多个被监控端可用 逗号 隔开)
        labels: 
          instance: '10.25.140.36'

  - job_name: 'mysqld_exporter'			#监控mysql
    static_configs:
      - targets: ['10.25.251.19:9104']         #被监控端的IP地址和端口号(有多个被监控端可用 逗号 隔开)
        labels:
          instance: '10.25.251.19'
      - targets: ['10.25.140.19:9104']         #被监控端的IP地址和端口号(有多个被监控端可用 逗号 隔开)
        labels:
          instance: '10.25.140.19'
      - targets: ['10.25.140.36:9104']         #被监控端的IP地址和端口号(有多个被监控端可用 逗号 隔开)
        labels:
          instance: '10.25.140.36' 

  - job_name: 'tomcat'          		#监控tomcat
    static_configs:
      - targets: ['10.25.140.19:17099']
        labels:
          instance: '10.25.140.19'

加入配置并重启

docker cp $PWD/prometheus.yml prometheus:/etc/prometheus/prometheus.yml
docker restart prometheus

配置prometheus+Grafana

浏览器访问 http://192.168.0.1:3000 来将Node节点监控
Grafana官方提供模板地址: https://grafana.com/grafana/dashboards

效果图

MySQL_Dashboard

MySqlNodeDashboard-2025-03-06_15-59-17.png

Linux_Dashboard

NodeDashboard-2025-03-06_15-58-33.png

模板链接

下载地址:Linux_dashboard
下载地址:Mysql_dashboard
官方地址:Node Exporter Dashboard
官方地址:SView tomcat
官方地址:MySQL Exporter