本章概述
- 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
文章评论