袁党生博客

  • 主页
  • linux基础
  • SHELL
  • WEB
  • 负载
  • 企业级应用
  • 数据库
  • KVM
  • Docker
  • K8S
  • 监控
  • 存储
  • 博客搭建问题
  1. 首页
  2. 监控
  3. 正文

二、部署Prometheus监控

2023年9月1日 2986点热度 2人点赞 0条评论


本章概述

  • Docker部署prometheus
  • Operator 部署prometheus
  • 二进制安装prometheus
  • 二进制安装node-exporter
  • 配置prometheus server收集node-exporter指标数据
  • 部署Grafana
  • Grafana导入模板

前言
  Prometheus监控可以通过不同的方式安装部署,但是实际生产环境只需要根据实际需求选择其中一种方式部署即可,无论使用哪一种方式安装部署的prometheus server,使用方式都是一样的,这里以二进制安装环境为例,其它部署方式会做简单的对应介绍。
部署方式包括以下几种:
(1)官方二进制下载及安装,prometheus server的监听端口为9090
链接:https://prometheus.io/download/
(2)docker镜像直接启动
链接:https://prometheus.io/docs/prometheus/latest/installation/
(3)operator部署
链接:https://github.com/coreos/kube-prometheus
(4)使用apt或者yum安装
~# apt install prometheus

2.1 docker部署prometheus

参考文档:https://prometheus.io/docs/prometheus/latest/installation/
1、准备一台机器172.31.7.151,首先要安装docker
docker安装步骤这里不再写出,执行以下脚本安装即可(二进制安装docekr,通过以下百度网盘链接下载脚本)

链接:https://pan.baidu.com/s/1AWJVhfYZioXquYHaxJORVQ 
提取码:jf6s 

2、执行docker命令,拉起prometheus容器

docker run \
    -p 9090:9090 \
    prom/prometheus

注意:由于本地没有镜像,需要联网下载prometheus镜像,如果不能联网,需要提前下载好镜像文件。同时也可以为容器指定挂载,把数据存储到指定的地方,这里只做演示,不再指定挂载
3、容器拉起以后,访问prometheus:172.31.7.151:9090

查看目标主机数据

由于没有配置,只能看到本机

2.2 Operator 部署prometheus

这种部署方式要求在k8s集群内部进行部署,并且对k8s版本有要求,因此在部署之前要查看版本兼容性。
github链接:https://github.com/prometheus-operator/kube-prometheus
版本兼容性:

2.2.1 clone并部署

1、从github clone代码到本地

cd /root/yaml/prometheus
git clone https://github.com/prometheus-operator/kube-prometheus.git

2、进入目录,执行命令部署prometheus
cd kube-prometheus/
kubectl apply --server-side -f manifests/setup
kubectl apply -f manifests/ #该目录下部分yaml文件中镜像为谷歌镜像仓库,无法下载
解决方法:

注意:在manifests目录下kubeStateMetrics-deployment.yaml文件中的镜像k8s.gcr.io/kube-state-metrics/kube-
state-metrics:v2.5.0和prometheusAdapter-deployment.yaml文件中的镜像k8s.gcr.io/prometheus-adapter/prometheus-adapter:v0.9.1属于谷歌镜像仓库,无法下载。
修改方法:
在dockerhub官网找到对应版本镜像进行替换,替换后执行命令部署prometheus
vim kubeStateMetrics-deployment.yaml    #这里贴出修改部分
        image: bitnami/kube-state-metrics:2.5.0
vim prometheusAdapter-deployment.yaml   #这里贴出修改部分
        image: willdockerhub/prometheus-adapter:v0.9.1

2.2.2 验证pod状态

查看pod状态
kubectl get pod -n monitoring

2.2.3 通过nodeport访问prometheus

注意:prometheus的service部署时都是clusterIP,如果想要从集群外部访问,就需要修改prometheus的service为nodeport,把端口暴露出去
1、编写yaml文件
vim prometheus-service.yaml #备注部分为修改内容

apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/component: prometheus
    app.kubernetes.io/instance: k8s
    app.kubernetes.io/name: prometheus
    app.kubernetes.io/part-of: kube-prometheus
    app.kubernetes.io/version: 2.36.0
  name: prometheus-k8s
  namespace: monitoring
spec:
  type: NodePort           #添加NodePort类型,主动暴露端口
  ports:  
  - name: web
    port: 9090
targetPort: web
nodePort: 31090       #指定暴露的端口号,主要范围要在30000-65000之间
  - name: reloader-web
    port: 8080
    targetPort: reloader-web
  selector:
    app.kubernetes.io/component: prometheus
    app.kubernetes.io/instance: k8s
    app.kubernetes.io/name: prometheus
    app.kubernetes.io/part-of: kube-prometheus
  sessionAffinity: ClientIP

2、加载yaml文件
kubectl apply -f prometheus-service.yaml
3、查看service,可以看到service类型变为NodePort,而且会在宿主机随机监听31090端口

在浏览器访问172.31.7.111:31090即可访问prometheus监控页面

2.2.4 通过nodeport访问grafana

grafana的service部署时clusterIP类型,如果想要从集群外部访问,就需要修改prometheus的service为nodeport,把端口暴露出去
通过指定端口把grafana的端口暴露到集群外部
1、编写yaml文件
vim grafana-service.yaml

apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/component: grafana
    app.kubernetes.io/name: grafana
    app.kubernetes.io/part-of: kube-prometheus
    app.kubernetes.io/version: 8.5.4
  name: grafana
  namespace: monitoring
spec:
  type: NodePort          #指定NodePort类型,主动暴露端口
  ports:
  - name: http
    port: 3000
    targetPort: http
    nodePort: 33000         #指定暴露的端口号,主要范围要在30000-65000之间
  selector:
    app.kubernetes.io/component: grafana
    app.kubernetes.io/name: grafana
    app.kubernetes.io/part-of: kube-prometheus

2、重新加载yaml文件
kubectl apply -f grafana-service.yaml
3、查看service,可以看到端口类型变为NodePort,且宿主机上的监听端口为33000

此时在浏览器访问172.31.7.111:33000就可以访问grafana页面

2.3 二进制安装prometheus

环境准备:准备机器用于部署prometheus监控

#用来部署prometheus监控
prometheus-server01  172.31.7.201      
prometheus-server02  172.31.7.202    
prometheus-server03  172.31.7.203    

#作为prometheus监控节点,部署node-exporter 
prometheus-node01  172.31.7.181        
prometheus-node02  172.31.7.182       
prometheus-node03  172.31.7.183       

2.3.1 获取prometheus安装包

1、进入官网https://prometheus.io/,点击DOWNLOAD

2、选择prometheus

3、获取下载路径

安装包下载路径为:https://github.com/prometheus/prometheus/releases/download/v2.36.1/prometheus-2.36.1.linux-amd64.tar.gz

2.3.2 安装prometheus

1、创建存放安装包的目录并下载安装包

mkdir /apps  && cd /apps
wget https://github.com/prometheus/prometheus/releases/download/v2.36.1/prometheus-2.36.1.linux-amd64.tar.gz

2、解压安装包并做软链接

tar -xvf prometheus-2.36.1.linux-amd64.tar.gz
ln -sv /apps/prometheus-2.36.1.linux-amd64  /apps/prometheus  

3、查看解压后的文件
cd /apps/prometheus/

ls -lh /apps/prometheus/
total 199M
drwxr-xr-x 2 3434 3434   38 Jun  9 23:31 console_libraries
drwxr-xr-x 2 3434 3434  173 Jun  9 23:31 consoles
-rw-r--r-- 1 3434 3434  12K Jun  9 23:31 LICENSE
-rw-r--r-- 1 3434 3434 3.7K Jun  9 23:31 NOTICE
-rwxr-xr-x 1 3434 3434 104M Jun  9 23:27 prometheus     #prometheus服务可执行程序
-rw-r--r-- 1 3434 3434  934 Jun  9 23:31 prometheus.yml  #prometheus配置文件
-rwxr-xr-x 1 3434 3434  96M Jun  9 23:30 promtool      # 测试工具,用于检测配置prometheus配置文件、检测metrics数据等

4、检查配置文件配置文件是否存在问题
cd /apps/prometheus/
./promtool check config ./prometheus.yml

2.3.3 prometheus.yaml配置文件说明

以下为prometheus配置文件说明:

# my global config
global:                #全局配置
  scrape_interval: 15s   #数据收集的间隔为15秒,如果不配置则默认为1分钟
  evaluation_interval: 15s   #规则扫描时间,即每隔15秒检查规则(即rule_files)是否发生变化,如果不配置则默认为1分钟
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:             #告警配置
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093       #指定altermanager服务器,该主机用于将告警发送给邮件服务器、钉钉、微信等。

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:           #告警规则,通过yaml文件配置告警规则
  # - "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"     #列表形式,用来分组,可以添加多个job_name对不同主机进行监控

    # metrics_path defaults to '/metrics'   #metrics路径默认为x.x.x.x/metrics
    # scheme defaults to 'http'.

    static_configs:         #静态配置
      - targets: ["localhost:9090"]        #目标主机,可以配置多个主机,也可以通过列表形式配置
~

2.3.4 启动Prometheus

1、通过执行prometheus可执行程序启动
可以通过以下方式启动Prometheus
cd /apps/prometheus/
./ prometheus
但是这种启动方式是前台启动,而且服务器一旦发生重启,服务将无法自动重启。
2、通过service文件的方式启动prometheus
(1)创建service文件
vim /etc/systemd/system/prometheus.service

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

[Service]
Restart=on-failure
WorkingDirectory=/apps/prometheus/
ExecStart=/apps/prometheus/prometheus --config.file=/apps/prometheus/prometheus.yml  

[Install]
WantedBy=multi-user.target

(2)启动prometheus服务并设置为开机自启动
systemctl daemon-reload
systemctl restart prometheus
systemctl enable Prometheus

2.3.5 配置动态(热)加载:

动态记载指修改prometheus配置文件后无需重启prometheus服务会自动加载
1、在ExecStart最后加上 --web.enable-lifecycle参数,即:
ExecStart=/apps/prometheus/prometheus --config.file=/apps/prometheus/prometheus.yml --web.enable-lifecycle
2、配置完成后重启服务使配置生效
systemctl daemon-reload
systemctl restart prometheus
3、然后使用以下命令即可实现配置动态加载
curl -X POST http://172.31.7.201:9090/-/reload

4、访问prometheus,浏览器输入:172.31.7.201:9090

5、查看Targets,目前只有prometheus自身的监控

2.3.6 在Prometheus添加监控主机

在prometheus配置文件/app/prometheus/prometheus.yaml中添加主机172.31.7.191

修改完成后需要重启服务,配置才能生效,这里使用热加载命令,无需重启服务
curl -X POST http://172.31.7.201:9090/-/reload
查看监控页面,172.31.7.191已经添加成功,不过由于该主机没有安装node-exporter,状态显示异常,这是正常现象

2.4 二进制安装node-exporter

k8s各node节点使用二进制或者daemonset方式安装node_exporter,用于收集各k8s node节点宿主机
的监控指标数据,默认监听端口为9100。(类似于zabbix的agent)
需要注意的是,node-exporter只能用来收集物理机、虚拟机或k8s集群中node节点的数据,不能用来收集容器的数据,容器数据的收集由其他组件来完成。

2.4.1 获取node-exporter安装包

1、进入官网https://prometheus.io/,点击DOWNLOAD

2、选择node-export

3、获取安装包下载链接

下载链接:https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz

2.4.2 安装node-exporter

下载node-export安装包,解压做软链接

mkdir  /apps  && cd /apps
wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz
tar -xvf node_exporter-1.3.1.linux-amd64.tar.gz
ln -sv /apps/node_exporter-1.3.1.linux-amd64 /apps/node_exporter

2.4.3 创建node-exporter service文件

创建node-exporter 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

2.4.4 启动node-exporter服务

启动服务并设置为开机自启动
systemctl daemon-reload
systemctl restart node-exporter.service
systemctl enable node-exporter.service

查看prometheus监控页面targets,状态变为up
注意:初次添加主机,状态可能会显示为unknown状态,这是因为prometheus间隔15s才会抓取node-exporter数据,等待15s后刷新即可

在浏览器访问172.31.7.191:9100,这里是node-exporter收集目标主机的所有数据

点击Metrics按钮,可以查看收集到的所有数据

2.4.5 node_export常见指标

常见的指标:

node_boot_time:系统⾃启动以后的总结时间,即取uptime的值,以秒为单位
node_cpu:系统CPU使⽤量
node_disk*:磁盘IO
node_filesystem*:系统⽂件系统⽤量,即分区的磁盘使用量
node_load1:系统CPU负载
node_memeory*:内存使⽤量
node_network*:⽹络带宽指标
node_time:当前系统时间
go_*:node exporter中go相关指标
process_*:node exporter⾃身进程相关运⾏指标

2.5:配置prometheus server收集node-exporter指标数据

2.5.1 添加多节点数据收集

把主机172.31.7.192和172.31.7.193添加到监控中
1、在主机172.31.7.192和172.31.7.193上分别安装node-exporter
可以使用以下脚本进行安装:
vim node_exporter_install.sh

#!/bin/bash

PKG="node_exporter-1.3.1.linux-amd64.tar.gz"
S_DIR="node_exporter-1.3.1.linux-amd64"
PKG_PATH="/apps"
VER="v1.3.1"

#创建目录
mkdir  /apps  && cd /apps

#判断安装包是否存在,不存在就下载
ls  $PKG_PATH/$PKG
if [ $? -eq 0 ];then
        echo "file exist,not need download"
else
       wget https://github.com/prometheus/node_exporter/releases/download/$VER/$PKG
fi

#解压并做软链接
tar -xvf $PKG_PATH/$PKG -C $PKG_PATH
ln -sv $PKG_PATH/$S_DIR $PKG_PATH/node_exporter

#创建service文件
cat > /etc/systemd/system/node-exporter.service  << EOF
[Unit]
Description=Prometheus Node Exporter
After=network.target

[Service]
ExecStart=/apps/node_exporter/node_exporter

[Install]
WantedBy=multi-user.target
EOF

启动服务并设置开机自启动
systemctl daemon-reload && systemctl restart node-exporter.service && systemctl enable node-exporter.service
2、修改prometheus的配置文件
vim /apps/prometheus/prometheus.yml #红色字体为修改部分

# 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","172.31.7.191:9100"]

  - job_name: "prometheus-node"
    static_configs:
      - targets: ["172.31.7.192:9100","172.31.7.193:9100"]

3、进行热加载,使配置生效
curl -X POST http://172.31.7.201:9090/-/reload
4、查看监控页面,成功添加主机

2.5.2 查看监控数据

点击左上角prometheus图标,返回prometheus首页,在搜索框输入关键字

比如输入node,会自动出现很多选项可以选择

如果查看负载,输入node_load,选择node_load1,查看1分钟负载情况,点击右侧Execute执行查询

获取数据

点击Graph,查看图形

2.6 部署Grafana

grafana是一个可视化组件,用于接收客户端浏览器的请求并连接到prometheus查询数据,最后经过渲染并在浏览器进行体系化显示,需要注意的是,grafana查询数据类似于zabbix一样需要自定义模板,模板可以手动制作也可以导入已有模板。
官网链接:https://grafana.com/
模板下载:https://grafana.com/grafana/dashboards/

2.6.1 安装Grafana Server

1、获取安装包
(1)访问grafana官网https://grafana.com/,点击Download

(2)点击Self-managed,点击下方Download Grafana

(3)选择操作系统和版本:
注意:选择版本时,如果在生产环境,尽量不要使用最新的版本,可以选择版本比当前最新版本低的稳定版本,如果是学习使用,可以使用最新版本

(4)在下方根据操作系统选择安装包下载地址:
这里使用的是centos系统,选择下方红框中安装包的下载地址进行下载

2、安装grafana
Grafana和prometheus可以安装到同一个主机,这里把grafana安装到172.31.7.202上
(1)下载安装包
cd /usr/local/src/
wget https://dl.grafana.com/enterprise/release/grafana-enterprise-8.5.5-1.x86_64.rpm
(2)使用yum安装
yum -y install grafana-enterprise-8.5.5-1.x86_64.rpm
3、grafana配置文件
vim /etc/grafana/grafana.ini

#################################### Server ####################################
[server]
# Protocol (http, https, h2, socket)
;protocol = http       #使用协议

# The ip address to bind to, empty will bind to all interfaces
;http_addr =        #监听地址

# The http port  to use
;http_port = 3000     #监听端口

#################################### Database ####################################
[database]
# You can configure the database connection by specifying type, host, name, user and password
# as separate properties or as on string using the url properties.

# Either "mysql", "postgres" or "sqlite3", it's your choice
;type = sqlite3         #默认使用sqlite3数据库,可以更改为别的数据库,修改之后要在下方配置数据库地址、数据库名称、账号密码等
;host = 127.0.0.1:3306
;name = grafana
;user = root
# If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;"""
;password =

4、启动服务并设置为开机自启动
systemctl restart grafana-server.service
systemctl enable grafana-server.service
5、登录grafana
浏览器输入172.31.7.202:3000,账号密码默认为:admin/admin
第一次登录会要求设置新密码,配置完成新密码后即可登录

2.6.2 添加数据源

通过配置数据源,grafana可以查询prometheus数据,在后续监控模板的配置中,监控模板通过与数据源关联,显示监控数据
1、点击左侧导航栏,选择Data source

2、点击Add data source

3、选择prometheus

4、配置名称,用以区分不同的k8s集群;然后添加prometheus的地址和端口,其他保持默认即可

5、点击最下方的Save & test

6、如果显示下方图示,说明可以正常连接,否则就会报错

2.7 Grafana导入模板

2.7.1 获取模板

1、在grafana官网,将鼠标放在producets选项(不需要点击选项,只需要将鼠标放在上面),在列表中选择dashboards

2、在左侧进行数据源过滤,选择prometheus,然后在搜索框搜索想要的模板
注意:模板默认是根据下载次数多少进行排序

3、点击进入第一个模板
可以看到依赖的grafana和k8s版本,模板id为1860(在线导入模板时,需要该id)

2.7.2 导入模板

导入方式有两种:
  方法一是通过模板id在线下载导入模板
  方法二是离线安装:如果不能联网,则可以在可以联网的电脑上下载json文件,然后将文件导入grafana
1、在线下载导入模板
(1)在grafana控制台首页点击左侧“+”号,点击Import

(2)在下方框内输入模板id,然后点击右侧load,等待下载完成

(3)下载完成后,进入下一页面,配置模板名称,选择数据源Prometheus-k8s-cluster1(通过该数据源,模板与)点击下方Import

(4)进入模板,可以查看相关数据

2、如果不能联网,则可以通过下载监控模板文件,然后再导入的方式导入模板
(1)在grafana官网下载监控模板json文件

(2)在grafana控制台首页点击左侧“+”号,点击Import

(3)点击upload JSON file上传json文件或者将json文件中的内容复制到下方的框内均可
这里点击upload JSON file按钮上传json文件

(4)配置模板名称并选择数据源,点击Import

(5)然后就可以看到模板监控页面(该模板是k8s的监控模板,这里还没有添加k8s集群节点,因此没有监控数据)

2.7.3 grafana插件管理

grafana通过插件支持某些功能,如某些功能不支持,需要安装插件,许多插件默认不安装,,需要提前安装
插件安装方式有两种:在线安装和离线安装
1、在线安装:(grafana主机可以联网)
(1)进入grafana官网插件页面:https://grafana.com/grafana/plugins
在搜索框搜索插件名称,以zabbix为例(让grafana收集zabbix数据),点击进入

点击Installation

(2)在grafana命令行界面执行命令,可以在线安装

在grafana主机执行命令

会在/var/lib/grafana目录下自动生成plugins目录专门用来存放插件

2、离线安装、
如果grafana不能联网,可以通过联网电脑将插件下载下来,然后导入grafana主机
(1)在zabbix Installtion页面,点击下方Download,将插件下载下来

(2)将插件导入grafana主机的/var/lib/grafana/plugins目录并解压(插件下载后是zip格式压缩包)
cd /var/lib/grafana/plugins
unzip alexanderzobnin-zabbix-app-4.2.8.zip
(3)重启grafana服务加载插件
systemctl restart grafana-server

标签: prometheus 监控
最后更新:2023年9月1日

袁党生

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2023 linux学习. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

豫ICP备18039507号-1