2-Prometheus安装
Prometheus监控可以通过不同的方式安装部署 , 但是实际生产环境只需要根据实际需求选择其中一种方式部署即可 , 无论使用哪一种方式安装部署的prometheus server , 使用方式都是一样的 , 这里以二进制安装环境为例 ,
部署方式包括以下几种 :
官方二进制下载及安装 ,
prometheus server的监听端口为9090链接:https://prometheus.io/download/docker镜像直接启动 链接:https://prometheus.io/docs/prometheus/latest/installation/operator部署 链接:https://github.com/coreos/kube-prometheus使用
apt或者yum安装apt install prometheus
1. 容器部署
1.1 Docker部署prometheus
参考文档 :
安装 | prometheus 中文文档 (gitbook.io)
准备一台机器, 并安装对应的容器环境
这个镜像在国外, 需要先提前下载好对应镜像并运行以下命令
docker run -p 9090:9090 prom/prometheus root@k8s-master01:/opt/k8s-data/yaml/cbear/wordpress# nerdctl run -p 9090:9090 harbor.cbear.top/cbear/promethues:v2.53.0
容器拉起以后,访问prometheus:
192.168.71.29:9090
查看目标主机数据

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

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

1.2.1 安装步骤
从
github clone代码到本地git clone https://github.com/prometheus-operator/kube-prometheus.git进入目录执行命令部署
prometheuscd kube-prometheus/ kubectl apply --server-side -f manifests/setup kubectl apply -f manifests/该目录下部分
yaml文件中镜像为谷歌镜像仓库 , 在国外 , 需要先下载到本地仓库。主要涉及到以下镜像需要修改
kubeStateMetrics-deployment.yaml中镜像image: registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.12.0./prometheusAdapter-deployment.yaml中的镜像image: registry.k8s.io/prometheus-adapter/prometheus-adapter:v0.12.0./grafana-deployment.yaml中的镜像:grafana/grafana:11.0.0
1.2.2 验证pod状态
查看pod状态
root@k8s-master01:~# kubectl get pods -n monitoring
NAME READY STATUS RESTARTS AGE
alertmanager-main-0 2/2 Running 0 20m
alertmanager-main-1 2/2 Running 0 20m
alertmanager-main-2 2/2 Running 0 20m
blackbox-exporter-6f7486b9bc-wj9m8 3/3 Running 0 20m
grafana-689bdff9bd-5twcx 1/1 Running 0 20m
kube-state-metrics-db78c658b-pvhvx 3/3 Running 0 20m
node-exporter-7tj5h 2/2 Running 0 20m
node-exporter-b2s5w 2/2 Running 0 20m
node-exporter-mhxxz 2/2 Running 0 20m
node-exporter-nbqsb 2/2 Running 0 20m
node-exporter-rjp2v 2/2 Running 0 20m
node-exporter-vz6tn 2/2 Running 0 20m
prometheus-adapter-565d47b78-72nxm 1/1 Running 0 20m
prometheus-adapter-565d47b78-qzb2h 1/1 Running 0 20m
prometheus-k8s-0 2/2 Running 0 20m
prometheus-k8s-1 2/2 Running 0 20m
prometheus-operator-8454b55656-7j9xc 2/2 Running 0 20m
1.2.3 通过nodeport访问prometheus
prometheus的service部署时都是clusterIP , 如果想要从集群外部访问 , 就需要修改prometheus的service为nodeport , 把端口暴露出去
这里需要修改目录下的文件
prometheus-service.yamlroot@k8s-master01:/opt/k8s-data/yaml/cbear/promethues/kube-prometheus-main/manifests# cat 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.52.0 name: prometheus-k8s namespace: monitoring spec: type: NodePort #添加NodePort类型 , 主动暴露端口 ports: - name: web port: 9090 targetPort: web nodePort: 30090 #指定暴露的端口号 , 主要范围要在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 重新启用该资源文件
kubectl apply -f prometheus-service.yaml查看
service, 可以看到service类型变为NodePort, 而且会在宿主机随机监听30090端口
1.2.4 通过nodeport访问grafana
grafana的service部署时clusterIP类型 , 如果想要从集群外部访问 , 就需要修改grafana的service为nodeport , 把端口暴露出去。通过指定端口把grafana的端口暴露到集群外部。
编写
yaml文件root@k8s-master01:/opt/k8s-data/yaml/cbear/promethues/kube-prometheus-main/manifests# cat 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: 11.0.0 name: grafana namespace: monitoring spec: type: NodePort #指定NodePort类型 , 主动暴露端口 ports: - name: http port: 3000 nodePort: 30030 #指定暴露的端口号 , 主要范围要在30000-65000之间 targetPort: http selector: app.kubernetes.io/component: grafana app.kubernetes.io/name: grafana app.kubernetes.io/part-of: kube-prometheus启用对应资源文件
kubectl apply -f grafana-service.yaml查看对应
service, 可以看到service类型变为NodePort,而且会在宿主机随机监听30030端口
1.2.5 调成网络策略
这里需要注意, 如果网络插件配置为calico ,这里安装的网络策略会生效。之后即使调整了service的访问类型, 也无法直接从外部访问端口时访问对应的容器。因此需要修改网络策略, 以方便外部访问对应服务
修改
prometheus-networkPolicy.yamlroot@k8s-master01:/opt/k8s-data/yaml/cbear/promethues/kube-prometheus-main/manifests# cat prometheus-networkPolicy.yaml apiVersion: networking.k8s.io/v1 kind: NetworkPolicy 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.52.0 name: prometheus-k8s namespace: monitoring spec: egress: - {} ingress: - from: - podSelector: matchLabels: app.kubernetes.io/name: prometheus ports: - port: 9090 protocol: TCP - port: 8080 protocol: TCP - from: - podSelector: matchLabels: app.kubernetes.io/name: prometheus-adapter ports: - port: 9090 protocol: TCP - from: - podSelector: matchLabels: app.kubernetes.io/name: grafana ports: - port: 9090 protocol: TCP - from: #这里是单独增加的IP地址和端口, - ipBlock: # 这几行均为单独增加内容 cidr: 172.20.0.0/16 # - ipBlock: # cidr: 192.168.71.0/24 # ports: # - port: 9090 # protocol: TCP # podSelector: matchLabels: app.kubernetes.io/component: prometheus app.kubernetes.io/instance: k8s app.kubernetes.io/name: prometheus app.kubernetes.io/part-of: kube-prometheus policyTypes: - Egress - Ingress修改
grafana-networkPolicy.yaml文件root@k8s-master01:/opt/k8s-data/yaml/cbear/promethues/kube-prometheus-main/manifests# cat grafana-networkPolicy.yaml apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: labels: app.kubernetes.io/component: grafana app.kubernetes.io/name: grafana app.kubernetes.io/part-of: kube-prometheus app.kubernetes.io/version: 11.0.0 name: grafana namespace: monitoring spec: egress: - {} ingress: - from: - podSelector: matchLabels: app.kubernetes.io/name: prometheus ports: - port: 3000 protocol: TCP - from: #这里是单独增加的IP地址段和端口 - ipBlock: # 以下为新增内容 cidr: 192.168.71.0/24 # - ipBlock: # cidr: 172.20.0.0/16 # ports: # - port: 3000 # protocol: TCP # podSelector: matchLabels: app.kubernetes.io/component: grafana app.kubernetes.io/name: grafana app.kubernetes.io/part-of: kube-prometheus policyTypes: - Egress - Ingress
这里有个点需要注意就是这里IP段的设置。其中192.168.71.0/24这个网段是客户端地址段。172.20.0.0/16为pod分配的地址IP段。这里有之所以设置两个IP地址段是因为kubernetes的pod访问的两种方式。一种是外部访问的IP:port对应的pod 就在IP所在的服务器上面。此例中, 如果访问192.168.71.35:30030这个对应的grafana容器。如果这个grafana容器本身在192.168.71.35这个节点中,这里生效的网络策略的地址段为192.168.71.0/24这个段。如果这里的pod在其他节点上面, 这里生效的便是172.20.0.0/16这个段网络策略。
192.168.71.0/24这个段的网络策略很容易理解。之所以存在172.20.0.0/16这个段。是因为calico在跨节点访问的时候 , 使用的是隧道模式进行的网络通信。
隧道模式本身会有一层封装。同时这里192.168.71.35节点收到对应请求时,由于pod不在node01节点上面, 因此节点1会通过service服务知道了后端pod的IP , 会发送请求到pod 所在的 node02上面。 这个过程会通过封装的方式从node01发送到node02上面。因此这个过程的源IP为172.20.0.0这个网段。

如果按照上面的networkPolicy配置本身就可以了。另外 , 可以用以下类似的networkPolicy同样可以达到效果
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
labels:
app.kubernetes.io/component: grafana
app.kubernetes.io/name: grafana
app.kubernetes.io/part-of: kube-prometheus
app.kubernetes.io/version: 11.0.0
name: grafana
namespace: monitoring
spec:
egress:
- {}
ingress:
- from:
- podSelector:
matchLabels:
app.kubernetes.io/name: prometheus
ports:
- port: 3000
protocol: TCP
- from: #以下配置如下
- ipBlock: #允许所有IP可以访问
cidr: 0.0.0.0/0 #
podSelector:
matchLabels:
app.kubernetes.io/component: grafana
app.kubernetes.io/name: grafana
app.kubernetes.io/part-of: kube-prometheus
policyTypes:
- Egress
- Ingress
#允许所有IP访问指定的3000端口
root@k8s-master01:/opt/k8s-data/yaml/cbear/promethues/kube-prometheus-main/manifests# cat grafana-networkPolicy.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
labels:
app.kubernetes.io/component: grafana
app.kubernetes.io/name: grafana
app.kubernetes.io/part-of: kube-prometheus
app.kubernetes.io/version: 11.0.0
name: grafana
namespace: monitoring
spec:
egress:
- {}
ingress:
- from:
- podSelector:
matchLabels:
app.kubernetes.io/name: prometheus
ports:
- port: 3000
protocol: TCP
- ports: #配置端口如下
- port: 3000 #允许所有IP可以访问3000端口
protocol: TCP #
podSelector:
matchLabels:
app.kubernetes.io/component: grafana
app.kubernetes.io/name: grafana
app.kubernetes.io/part-of: kube-prometheus
policyTypes:
- Egress
- Ingress1.2.6 通过ingress服务部署
可以通过修改service类型的方式访问对应的prometheus。另外可以通过部署ingress服务的方式实现对内部服务的访问。
参考链接: Operator部署 - 云原生监控神器Prometheus
部署
ingress controlkubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.10.1/deploy/static/provider/cloud/deploy.yaml部署
prometheus-ingressroot@k8s-master01:/opt/k8s-data/yaml/cbear/promethues/kube-prometheus-main/manifests# cat prometheus-ingress.yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: prometheus-ingress namespace: monitoring annotations: nginx.ingress.kubernetes.io/affinity: cookie nginx.ingress.kubernetes.io/session-cookie-name: "prometheus-cookie" nginx.ingress.kubernetes.io/ssl-redirect: "false" certmanager.k8s.io/cluster-issuer: "letsencrypt-local" kubernetes.io/tls-acme: "false" spec: ingressClassName: nginx rules: - host: prom.cbear.top http: paths: - path: / pathType: Prefix backend: service: name: prometheus-k8s port: number: 9090 tls: - hosts: - prom.cbear.top部署
grafana-networkPolicy.yamlroot@k8s-master01:/opt/k8s-data/yaml/cbear/promethues/kube-prometheus-main/manifests# cat grafana-networkPolicy.yaml apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: labels: app.kubernetes.io/component: grafana app.kubernetes.io/name: grafana app.kubernetes.io/part-of: kube-prometheus app.kubernetes.io/version: 11.0.0 name: grafana namespace: monitoring spec: egress: - {} ingress: - from: - podSelector: matchLabels: app.kubernetes.io/name: prometheus ports: - port: 3000 protocol: TCP podSelector: matchLabels: app.kubernetes.io/component: grafana app.kubernetes.io/name: grafana app.kubernetes.io/part-of: kube-prometheus app.kubernetes.io/name: ingress-nginx policyTypes: - Egress - Ingress部署
alertmanagercat alertmanager-service.yaml apiVersion: extensions/v1beta1 kind: Ingress metadata: name: alertmanager-ingress namespace: monitoring annotations: nginx.ingress.kubernetes.io/affinity: cookie nginx.ingress.kubernetes.io/session-cookie-name: "alert-cookie" nginx.ingress.kubernetes.io/ssl-redirect: "false" kubernetes.io/ingress.class: nginx certmanager.k8s.io/cluster-issuer: "letsencrypt-local" kubernetes.io/tls-acme: "false" spec: rules: - host: alert.awslabs.cn http: paths: - path: / backend: serviceName: alertmanager-main servicePort: web tls: - hosts: - alert.awslabs.cn #secretName: alertmanager-tls
这里由于有networkPolicy的限制。可以按照以下方式修改networkPolicy
修改
prometheus-networkPolicyroot@k8s-master01:/opt/k8s-data/yaml/cbear/promethues/kube-prometheus-main/manifests# cat prometheus-networkPolicy.yaml apiVersion: networking.k8s.io/v1 kind: NetworkPolicy 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.52.0 name: prometheus-k8s namespace: monitoring spec: egress: - {} ingress: - from: - podSelector: matchLabels: app.kubernetes.io/name: prometheus ports: - port: 9090 protocol: TCP - port: 8080 protocol: TCP - from: - podSelector: matchLabels: app.kubernetes.io/name: prometheus-adapter ports: - port: 9090 protocol: TCP - from: - podSelector: matchLabels: app.kubernetes.io/name: grafana ports: - port: 9090 protocol: TCP podSelector: matchLabels: 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/name: ingress-nginx #添加该行 policyTypes: - Egress - Ingress修改
grafana-networkPolicy.yamlroot@k8s-master01:/opt/k8s-data/yaml/cbear/promethues/kube-prometheus-main/manifests# cat grafana-networkPolicy.yaml apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: labels: app.kubernetes.io/component: grafana app.kubernetes.io/name: grafana app.kubernetes.io/part-of: kube-prometheus app.kubernetes.io/version: 11.0.0 name: grafana namespace: monitoring spec: egress: - {} ingress: - from: - podSelector: matchLabels: app.kubernetes.io/name: prometheus ports: - port: 3000 protocol: TCP podSelector: matchLabels: app.kubernetes.io/component: grafana app.kubernetes.io/name: grafana app.kubernetes.io/part-of: kube-prometheus app.kubernetes.io/name: ingress-nginx #添加该行 policyTypes: - Egress - Ingress
之后直接通过浏览器访问对应域名即可。域名解析地址为kubernetes集群中的所有节点
2. 软件部署
2.1 软件包部署
针对CentOS/Ubuntu系统。可以使用yum/apt命令安装软件。这里可以在github中寻找对应安装安装源
对于rpm包而言。参考github链接: lest/prometheus-rpm: Prometheus RPM Packages (github.com)
yum源配置如下[root@test ~]# cat /etc/yum.repos.d/prometheus.repo [prometheus] name=prometheus baseurl=https://packagecloud.io/prometheus-rpm/release/el/$releasever/$basearch repo_gpgcheck=1 enabled=1 gpgkey=https://packagecloud.io/prometheus-rpm/release/gpgkey https://raw.githubusercontent.com/lest/prometheus-rpm/master/RPM-GPG-KEY-prometheus-rpm gpgcheck=1 metadata_expire=300安装
prometheus[root@test ~]# yum install prometheus启动
prometheus服务[root@test ~]# systemctl start prometheus通过网页访问对应的页面

注 :
ubuntu中默认已经配置好了对应的prometheus源信息直接使用apt install prometheus即可
2.2 二进制安装
环境准备: 准备机器用于部署prometheus监控
prometheus01 192.168.71.47
prometheus02 192.168.71.49
prometheus03 192.168.71.54普通node节点
node01 192.168.71.55
node02 192.168.71.56
node03 192.168.71.572.2.1 基础安装
下载对应安装包
root@prometheus01:~# wget https://github.com/prometheus/prometheus/releases/download/v2.53.0/prometheus-2.53.0.linux-amd64.tar.gz解压安装包并作软链接
root@prometheus01:~# tar -xf prometheus-2.53.0.linux-amd64.tar.gz -C /usr/local/src/ root@prometheus01:~# ln -sv /usr/local/src/prometheus-2.53.0.linux-amd64 /usr/local/src/prometheus '/usr/local/src/prometheus' -> '/usr/local/src/prometheus-2.53.0.linux-amd64'查看解压后的文件
root@prometheus01:~# ll /usr/local/src/prometheus/ total 261328 drwxr-xr-x 4 1001 127 4096 Jun 19 07:55 ./ drwxr-xr-x 3 root root 4096 Jun 23 10:15 ../ drwxr-xr-x 2 1001 127 4096 Jun 19 07:52 console_libraries/ drwxr-xr-x 2 1001 127 4096 Jun 19 07:52 consoles/ -rw-r--r-- 1 1001 127 11357 Jun 19 07:52 LICENSE -rw-r--r-- 1 1001 127 3773 Jun 19 07:52 NOTICE -rwxr-xr-x 1 1001 127 137821861 Jun 19 07:40 prometheus* -rw-r--r-- 1 1001 127 934 Jun 19 07:52 prometheus.yml -rwxr-xr-x 1 1001 127 129737825 Jun 19 07:40 promtool*检查配置文件是否存在文件
root@prometheus01:~# cd /usr/local/src/prometheus root@prometheus01:/usr/local/src/prometheus# ./promtool check config ./prometheus.yml Checking ./prometheus.yml SUCCESS: ./prometheus.yml is valid prometheus config file syntax查看对应
prometheus配置文件root@prometheus01:/usr/local/src/prometheus# cat ./prometheus.yml # 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' # scheme defaults to 'http'. static_configs: #静态配置 - targets: ["localhost:9090"] #目标主机 , 可以配置多个主机 , 也可以通过列表形式配置通过执行
prometheus可执行程序启动root@prometheus01:/usr/local/src/prometheus# ./prometheus创建
service文件[Unit] Description=Prometheus Server Documentation=https://prometheus.io/docs/introduction/overview/ After=network.target [Service] Restart=on-failure WorkingDirectory=/usr/local/src/prometheus ExecStart=/usr/local/src/prometheus/prometheus --config.file=/usr/local/src/prometheus/prometheus.yml [Install] WantedBy=multi-user.target启动
prometheus服务并设置为开机自启动root@prometheus01:/usr/local/src/prometheus# systemctl daemon-reload root@prometheus01:/usr/local/src/prometheus# systemctl enable --now prometheus Created symlink /etc/systemd/system/multi-user.target.wants/prometheus.service → /etc/systemd/system/prometheus.service.至此已经配置完成
2.2.2 配置动态(热)加载
动态记载指修改prometheus配置文件后无需重启prometheus服务会自动加载
在
ExecStart最后加上--web.enable-lifecycle参数 ,即:root@prometheus01:/usr/local/src/prometheus# systemctl cat prometheus # /etc/systemd/system/prometheus.service [Unit] Description=Prometheus Server Documentation=https://prometheus.io/docs/introduction/overview/ After=network.target [Service] Restart=on-failure WorkingDirectory=/usr/local/src/prometheus ExecStart=/usr/local/src/prometheus/prometheus --config.file=/usr/local/src/prometheus/prometheus.yml --web.enable-lifecycle [Install] WantedBy=multi-user.target配置完成后重启服务使配置生效
root@prometheus01:/usr/local/src/prometheus# systemctl daemon-reload root@prometheus01:/usr/local/src/prometheus# systemctl restart prometheus使用以下命令即可实现配置动态加载
root@prometheus01:/usr/local/src/prometheus# curl -X POST http://192.168.71.47:9090/-/reload访问
prometheus, 浏览器输入 :192.168.71.47:9090
查看
Target, 目前只有prometheus自身监控
2.2.3 在Prometheus添加监控主机
在prometheus配置文件/usr/local/src/prometheus/prometheus.yml中添加主机192.168.71.55
root@prometheus01:/usr/local/src/prometheus# cat prometheus.yml
# my global config
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
......
static_configs:
- targets: ["localhost:9090", "192.168.71.55:9100"]修改完成后需要重启服务 , 配置才能生效 , 这里使用热加载命令 , 无需重启服务
root@prometheus01:/usr/local/src/prometheus# curl -X POST http://192.168.71.47:9090/-/reload查看监控页面 , 192.168.71.55已经添加成功 , 不过由于该主机没有安装node-exporter , 状态显示异常 , 这是正常现象

2.3. 二进制安装node-exporter
k8s各node节点使用二进制或者daemonset方式安装node_exporter , 用于收集各k8s node节点宿主机的监控指标数据 , 默认监听端口为9100。(类似于zabbix的agent) 需要注意的是 , node-exporter只能用来收集物理机、虚拟机或k8s集群中node节点的数据 , 不能用来收集容器的数据 , 容器数据的收集由其他组件来完成。
2.3.1 基础安装步骤
下载二进制软件包。软件官方下载地址: Download | Prometheus
root@ndoe01:~# wget https://github.com/prometheus/node_exporter/releases/download/v1.8.1/node_exporter-1.8.1.linux-amd64.tar.gz解压并作软链接
root@ndoe01:~# ln -sv /usr/local/src/node_exporter-1.8.1.linux-amd64/ /usr/local/src/node_exporter '/usr/local/src/node_exporter' -> '/usr/local/src/node_exporter-1.8.1.linux-amd64/' root@ndoe01:~# ll /usr/local/src/ total 12 drwxr-xr-x 3 root root 4096 Jun 23 12:14 ./ drwxr-xr-x 10 root root 4096 Feb 16 18:37 ../ lrwxrwxrwx 1 root root 47 Jun 23 12:14 node_exporter -> /usr/local/src/node_exporter-1.8.1.linux-amd64// drwxr-xr-x 2 1001 1002 4096 May 21 18:41 node_exporter-1.8.1.linux-amd64/创建对应的
service服务文件root@ndoe01:~# cat /etc/systemd/system/node-exporter.service [Unit] Description=Prometheus Node Exporter After=network.target [Service] ExecStart= /usr/local/src/node_exporter/node_exporter [Install] WantedBy=multi-user.target启动
node-exporter服务root@ndoe01:~# systemctl daemon-reload root@ndoe01:~# systemctl start node-exporter root@ndoe01:~# systemctl enable --now node-exporter Created symlink /etc/systemd/system/multi-user.target.wants/node-exporter.service → /etc/systemd/system/node-exporter.service.查看
prometheus监控页面targets, 状态变为up初次添加主机 , 状态可能会显示为
unknown状态 , 这是因为prometheus间隔15s才会抓取node-exporter数据 , 等待15s后刷新即可
在浏览器访问
192.168.71.55:9100, 这里是node-exporter收集目标主机的所有数据
点击
Metrics按钮 , 可以查看收集到的所有数据
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⾃身进程相关运⾏指标其他两个
node节点配置node_export配置
prometheus服务节点root@prometheus01:/usr/local/src/prometheus# cat 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). ..... 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", "192.168.71.55:9100"] - job_name: "prometheus-node" static_configs: - targets: ["192.168.71.55:9100", "192.168.71.56:9100","192.168.71.57:9100"]重启
prometheus服务 , 之后网页访问root@prometheus01:/usr/local/src/prometheus# curl -X POST http://192.168.71.47:9090/-/reload
查看监控数据
点击左上角
prometheus图标 , 返回prometheus首页 , 在搜索框输入关键字
比如输入
node, 会自动出现很多选项可以选择
如果查看负载 , 输入
node_load, 选择node_load1, 查看1分钟负载情况 , 点击右侧Execute执行查询。获得数据
点击
Graph, 查看图形
3. grafana安装
grafana是一个可视化组件 , 用于接收客户端浏览器的请求并连接到prometheus查询数据 , 最后经过渲染并在浏览器进行体系化显示 , 需要注意的是 , grafana查询数据类似于zabbix一样需要自定义模板 , 模板可以手动制作也可以导入已有模板。
3.1 基本安装
官网链接:https://grafana.com/ 模板下载:https://grafana.com/grafana/dashboards/

获取对应安装包

按照官网给的命令安装对应
grafana软件root@grafana:~# sudo apt-get install -y adduser libfontconfig1 musl root@grafana:~# wget https://dl.grafana.com/enterprise/release/grafana-enterprise_11.0.0_amd64.deb root@grafana:~# sudo dpkg -i grafana-enterprise_11.0.0_amd64.deb启动对应服务
root@grafana:~# systemctl start grafana-server登录
grafana:192.168.71.49:3000, 用户名密码:admin/admin
添加数据源
通过配置数据源 ,
grafana可以查询prometheus数据 , 在后续监控模板的配置中 , 监控模板通过与数据源关联 , 显示监控数据点击左侧导航栏 , 选择
Data source


配置名称 , 用以区分不同的
k8s集群;然后添加prometheus的地址和端口 , 其他保持默认即可。这里prometheus的IP指定二进制安装的prometheus。即192.168.71.47
之后点击
Save& test
3.2 Grafana导入模板
获取模板
在官网中搜索对应的
Dashboards,Grafana dashboards | Grafana Labs

在左侧进行数据源过滤 , 选择
prometheus, 然后在搜索框搜索想要的模板
点击进入第一个模板 , 可以看到依赖的
grafana和k8s版本 , 模板id为1860(在线导入模板时 ,需要该id)
导入模板
导入方式有两种 :
方法一是通过模板id在线下载导入模板 方法二是离线安装:如果不能联网 , 则可以在可以联网的电脑上下载
json文件 , 然后将文件导入grafana在线下载导入模板
在
Dashboard中点击import
在下方框内输入模板
id, 然后点击右侧load, 等待下载完成
下载完成后 , 进入下一页面 , 配置模板名称 , 选择数据源
Prometheus-binary, 点击下方Import
进入模板,可以查看相关数据

如果不能联网,则可以通过下载监控模板文件,然后再导入的方式导入模板
在
grafana官网下载监控模板json文件
在
Dashboard页面中点击import
点击
Upload dashboard JSON file,选择刚下载的json文件
之后设置模板名和数据源。之后点击
import即可
查看导入
dashboard
参考链接
二、部署Prometheus监控 - 袁党生博客 (yuandangsheng.top)