企业专用版 prometheus+grafana监控
Posted 水木,年華
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了企业专用版 prometheus+grafana监控相关的知识,希望对你有一定的参考价值。
一、Prometheus介绍
1.1 Prometheus概述
Prometheus(普罗米修斯)是一个最初在SoundCloud上构建的监控系统。自2012年成为社区开源项目,
拥有非常活跃的开发人员和用户社区。为强调开源及独立维护,Prometheus于2016年加入云原生云计算基金会(CNCF),成为继Kubernetes之后的第二个托管项目;原生支持K8s和docker。
https://prometheus.io
https://github.com/prometheus
1.2 Prometheus 特点
• 多维数据模型:由度量名称和键值对标识的时间序列数据(数据模型包含指标名称和多个标签;可以通过指定的标签,查询指定的数据)
• PromQL:一种灵活的查询语言,可以利用多维数据完成复杂的查询
• 不依赖分布式存储,单个服务器节点可直接工作
• 基于HTTP的pull方式采集时间序列数据(从被管理节点获取这些监控指标进行存储,分析)
• 推送时间序列数据通过PushGateway组件支持(适用于于定时任务)
• 通过服务发现或静态配置发现目标
• 多种图形模式及仪表盘支持(grafana)
1.3 Prometheus组件与架构
• Prometheus Server:收集指标和存储时间序列数据,并提供查询接口
• ClientLibrary:客户端库(提供一些语言库,可以集成到项目里面;能方便暴露采集的指标)
• Push Gateway:短期存储指标数据。主要用于临时性的任务
• Exporters:采集已有的第三方服务监控指标并暴露metrics
• Alertmanager:告警
• Web UI:简单的Web控制台
二、Prometheus 部署
• 二进制部署
https://prometheus.io/docs/prometheus/latest/getting_started/
• Docker部署
https://prometheus.io/docs/prometheus/latest/installation/
•访问方式
访问地址:http://IP:9090
2.1 prometheus二进制部署
解压安装包
[root@prometheus ~]# tar zxf prometheus-2.27.1.linux-amd64.tar.gz
启动
[root@prometheus prometheus-2.27.1.linux-amd64]# ./prometheus
访问
http://192.168.66.100:9090
2.2 premetheus -h 命令行常用参数
• --config.file=“prometheus.yml” # 指定配置文件
• --web.listen-address= “0.0.0.0:9090” # 监听地址和端口
• --log.level=info # 日志级别
• --alertmanager.timeout=10s # 与报警组件的超时时间
• --storage.tsdb.path="data/ " # 数据目录
• --storage.tsdb.retention.time=15d # 数据保存时间,默认15天
2.3 配置为系统服务管理:
vi /usr/lib/systemd/system/prometheus.service
[Unit]
Description=prometheus
[Service]
ExecStart=/opt/monitor/prometheus/prometheus --config.file=/opt/monitor/prometheus/prometheus.yml
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process #只杀主进程
[Install]
WantedBy=multi-user.target
[root@localhost ~]# mkdir -p /opt/monitor
[root@localhost ~]# cd /opt/monitor/
[root@localhost monitor]# mv prometheus-2.27.1.linux-amd64/ prometheus
[root@localhost monitor]# systemctl daemon-reload
[root@localhost monitor]# systemctl start prometheus
[root@localhost monitor]# systemctl enable prometheus
2.4 prometheus 配置文件
[root@localhost prometheus]# vim prometheus.yml
• global:全局配置
scrape_interval: 15s # 采集数据时间间隔
evaluation_interval: 15s # 评估告警规则时间间隔,默认1分钟
scrape_timeout: 5s # 采集数据超时时间,默认10秒
• rule_files:告警规则
• scrape_configs:配置被监控端,称为target,每个target用
job_name分组管理,又分为静态配置和服务发现
• alerting:告警配置
• remote_write/remote_read:从远程数据库读写
2.5 配置被监控端
目标(targets):被监控端
实例(Instances):每个被监控端称为实例
作业(Job):具有相同目标的实例集合称为作业
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node'
static_configs:
- targets: ['192.168.1.10:9090']
2.6 监控指标数据模型
数据模型:
• Prometheus将所有数据存储为时间序列;
• 具有相同度量名称以及标签属于同一个指标;
• 每个时间序列都由度量标准名称和一组键值对(称为标签)唯一标识,
通过标签查询指定指标
指标格式:
<metric name> <label name>=<label value>,...
三、监控案例
3.1 如何监控服务
如果要想监控,前提是能获取被监控端指标数据,并且这个
数据格式必须遵循Prometheus数据模型,这样才能识别和
采集,一般使用exporter提供监控指标数据。
1、自己写metrics接口,遵循数据模型。
1)先知道怎么收集你要监控指标。
2)集成官方的客户端或者自己数据格式,暴露出来。
2、使用社区维护的exporter(采集器,以数据模型暴露metrics接口)
exporter列表:
https://prometheus.io/docs/instrumenting/exporters
3.2 Grafana部署
Grafana是一个开源的度量分析和可视化系统。
部署文档:https://grafana.com/grafana/download
访问地址:http://IP:3000
用户名/密码:admin/admin # 第一次需要重置密码
[root@localhost monitor]# wget https://dl.grafana.com/enterprise/release/grafana-enterprise-8.4.4.linux-amd64.tar.gz
[root@localhost monitor]# tar zxf grafana-enterprise-8.4.4.linux-amd64.tar.gz
[root@localhost monitor]# mv grafana-8.4.4 grafana
配置为系统服务管理:
vim /usr/lib/systemd/system/grafana.service
[Unit]
Description=grafana
[Service]
ExecStart=/opt/monitor/grafana/bin/grafana-server -homepath=/opt/monitor/grafana
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl start grafana
systemctl enable grafana
Grafana只用于展示数据,但这个数据从哪里来?
需要你根据提供数据的服务选择,支持的数据源如下:
选择Prometheus,只需要指定URL即可。
3.3 监控Linux服务器
node_exporter:用于监控Linux系统的指标采集器。
安装在被监控端的服务器,不是通过网络连接,而是通过读取本地文件系统收集的。
常用指标:
• CPU
• 内存
• 硬盘
• 网络流量
• 文件描述符
• 系统负载
• 系统服务
数据接口:http://IP:9100
使用文档:https://prometheus.io/docs/guides/node-exporter/
GitHub:https://github.com/prometheus/node_exporter
3.3.1 安装node_exporter
[root@node1 ~]# wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz
[root@node1 ~]# tar zxf node_exporter-1.3.1.linux-amd64.tar.gz
[root@node1 ~]# mv node_exporter-1.3.1.linux-amd64 /usr/local/node_exporter
[root@node1 ~]# cd /usr/local/node_exporter/
[root@node1 node_exporter]# ./node_exporter
3.3.2 配置为系统服务管理
vi /usr/lib/systemd/system/node_exporter.service
[Unit]
Description=node_exporter
[Service]
ExecStart=/usr/local/node_exporter/node_exporter --
web.config=/usr/local/node_exporter/config.yml
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl start node_exporter
systemctl enable node_exporter
3.3.3 在Prometheus配置文件添加被监控端
[root@localhost prometheus]# vim prometheus.yml
static_configs:
- targets: ['localhost:9090']
- job_name: 'web-services'
static_configs:
- targets: ['192.168.66.101:9000','192.168.66.102:9100']
3.3.4 检查配置文件,并执行加载
[root@localhost prometheus]# ./promtool check config ./prometheus.yml
[root@localhost prometheus]# kill -HUP 21689
3.3.5 使用Grafana展示node_exporter数据指标
仪表盘ID: 9276
把以下两个网卡设备改为ens33
3.3.6 启用HTTP认证
生成密码
[root@node1 ~]# yum install httpd-tools -y
[root@node1 ~]# htpasswd -nBC 12 '' | tr -d ':\\n'
New password:
Re-type new password:
$2y$12$JvsLhXCFePQNY5VV2jD7PeZTEJifCNAg0aCj7iBoQRO4/SRH/vMgi[root@node1 ~]#
修改配置文件
[root@node1 ~]# cd /usr/local/node_exporter/
[root@node1 node_exporter]# vim config.yml
basic_auth_users:
prometheus: $2y$12$JvsLhXCFePQNY5VV2jD7PeZTEJifCNAg0aCj7iBoQRO4/SRH/vMgi
[root@node1 node_exporter]# systemctl daemon-reload
[root@node1 node_exporter]# ystemctl start node_exporter
再次登录需要输入用户名和密码
3.3.7 在Prometheus配置文件添加被监控端
修改prometheus server端配置文件
[root@localhost prometheus]# vim prometheus.yml
static_configs:
- targets: ['localhost:9090']
- job_name: 'web-services'
basic_auth:
username: prometheus
password: 123456
static_configs:
- targets: ['192.168.66.101:9100','192.168.66.102:9100']
[root@localhost prometheus]# kill -HUP 21689
3.3.8 监控系统服务运行状态
[root@node1 ~]# vim /usr/lib/systemd/system/node_exporter.service
[Unit]
Description=node_exporter
[Service]
ExecStart=/usr/local/node_exporter/node_exporter --web.config=/usr/local/node_exporter/config.yml --collector.systemd --collector.systemd.unit-whitelist=(docker|sshd|nginx).service
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
在prometheus server端可查看服务状态
在grafana上图表展示:
3.4 监控Docker服务器
cAdvisor (Container Advisor) :用于收集正在运行的容器资源使用和性能信息。
项目地址:https://github.com/google/cadvisor
Docker部署cAdvisor:
docker run -d \\
--volume=/:/rootfs:ro \\
--volume=/var/run:/var/run:ro \\
--volume=/sys:/sys:ro \\
--volume=/var/lib/docker/:/var/lib/docker:ro \\
--volume=/dev/disk/:/dev/disk:ro \\
--publish=8080:8080 \\
--detach=true \\
--name=cadvisor \\
google/cadvisor:latest
修改prometheus.yml文件
[root@localhost ~]# vim /opt/monitor/prometheus/prometheus.yml
- job_name: 'docker'
static_configs:
- targets: ['192.168.66.101:8080']
[root@localhost ~]# kill -HUP 21689
Grafana展示多台主句docker监控
导入仪表盘
仪表盘模板ID:193
编辑图表
都修改完后展示
3.5 监控mysql服务器
安装数据库,提权
[root@node1 ~]# docker run -d --name db -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
[root@node1 ~]# docker exec -it db bash
root@2b13ec51383b:/# mysql -uroot -p123456
mysql> grant PROCESS, REPLICATION CLIENT, SELECT ON *.* to 'exporter'@'%' identified by '123456';
下载之指标暴露器并安装
[root@node1 ~]# wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.14.0/mysqld_exporter-0.14.0.linux-amd64.tar.gz
[root@node1 ~]# tar zxvf mysqld_exporter-0.14.0.linux-amd64.tar.gz、
[root@node1 ~]# mv mysqld_exporter-0.14.0.linux-amd64 /usr/local/mysqld_exporter
[root@node1 ~]# cd /usr/local/mysqld_exporter/
[root@node1 mysqld_exporter]# vim .my.cnf
[root@node1 mysqld_exporter]# ./mysqld_exporter --config.my-cnf=.my.cnf
[client]
user=exporter
password=123456
修改prometheus配置文件
[root@prometheus prometheus]# vim prometheus.yml
[root@prometheus prometheus]# kill -HUP 51848
- job_name: 'dbserver'
static_configs:
- targets: ['192.168.66.101:9104’]
导入仪表盘
仪表盘ID:7362
四、自动化监控
Prometheus服务发现
Prometheus添加被监控端支持两种方式:
• 静态配置:手动配置
• 服务发现:动态发现需要监控的Target实例
支持服务发现的来源:
• azure_sd_configs
• consul_sd_configs
• dns_sd_configs
• ec2_sd_configs
• openstack_sd_configs
• file_sd_configs
• gce_sd_configs
• kubernetes_sd_configs
• marathon_sd_configs
• nerve_sd_configs
• serverset_sd_configs
• triton_sd_configs
4.1 基于文件的服务发现
[root@prometheus ~]# vim /opt/monitor/prometheus/prometheus.yml
- job_name: 'test'
file_sd_configs:
- files: ['/opt/monitor/prometheus/sd_config/*.yml']
refresh_interval: 5s # 每隔5秒检查一次
添加被监控端:
[root@prometheus ~]# cd /opt/monitor/prometheus/sd_config/
[root@prometheus sd_config]# vim node.yml
- targets: ['192.168.66.101:8080','192.168.66.102:8080']
4.2 基于Consul的服务发现
Consul是一个分布式的服务发现和键/值存储系统。
Docker部署Consul:
docker run --name consul -d -p 8500:8500 consul
向Consul注册服务:
curl -X PUT -d '"id": "Linux-1","name": "Linux","address": "192.168.66.101","port":
9100,"tags": ["service"],"checks": ["http": "http://192.168.66.101:9100","interval":
"5s"]' http://192.168.66.103:8500/v1/agent/service/register
修改prometheus配置文件
[root@prometheus prometheus]# vim /opt/monitor/prometheus/prometheus.yml
- job_name: 'consul'
consul_sd_configs:
- server: 192.168.66.103:8500
services: ['Linux']
[root@prometheus prometheus]# ./promtool check config prometheus.yml
[root@prometheus prometheus]# kill -HUP 51848
五、监控Kubernetes
5.1 监控指标
Kubernetes本身监控
• Node资源利用率
• Node数量
• Pods数量(Node)
• 资源对象状态
Pod监控
• Pod数量(项目)
• 容器资源利用率
• 应用程序
5.2 监控原理
服务发现类型
5.3 监控K8s集群Pod
创建容器
1、K8s RBAC授权
kubectl apply -f rbac.yaml
2、获取Token并保存到文件
2、获取Token并保存到文件
[root@master ~]# kubectl get sa prometheus -n kube-system -o yaml
[root@master ~]# kubectl describe secret prometheus-token-rc6wh -n kube-system > k8s.token
[root@master ~]# scp k8s.token 192.168.80.4:/opt/monitor/prometheus
修改prometheus配置文件;创建Job和kubeconfig_sd_configs
- job_name: kubernetes-nodes-cadvisor
metrics_path: /metrics
scheme: https
kubernetes_sd_configs:
- role: node
api_server: https://192.168.80.1:6443
bearer_token_file: /opt/monitor/prometheus/k8s.token
tls_config:
insecure_skip_verify: true #不需要认证
bearer_token_file: /opt/monitor/prometheus/k8s.token
tls_config:
insecure_skip_verify: true #不需要认证
relabel_configs:
# 将标签(.*)作为新标签名,原有值不变
- action: labelmap
regex: __meta_kubernetes_node_label_(.*)
# 修改NodeIP:10250为APIServerIP:6443
- action: replace
regex: (.*)
source_labels: ["__address__"]
target_label: __address__
replacement: 192.168.80.1:6443
# 实际访问指标接口 https://NodeIP:10250/metrics/cadvisor 这个接口只能APISERVER访问,故此重新标记标签使用APISERVER代理访问
- action: replace
source_labels: [__meta_kubernetes_node_name]
target_label: __metrics_path__
regex: (.*)
replacement: /api/v1/nodes/$1/proxy/metrics/cadvisor
导入仪表盘
5.4 监控K8s资源对象状态
1、部署kube-state-metrics
[root@master ~]# kubectl apply -f kube-state-metrics.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: kube-state-metrics
namespace: kube-system
labels:
kubernetes.io/cluster-service: "true"
addonmanager.kubernetes.io/mode: Reconcile
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: kube-state-metrics
labels:
kubernetes.io/cluster-service: "true"
addonmanager.kubernetes.io/mode: Reconcile
rules:
- apiGroups: [""]
resources:
- configmaps
- secrets
- nodes
- pods
- services
- resourcequotas
- replicationcontrollers
- limitranges
- persistentvolumeclaims
- persistentvolumes
- namespaces
- endpoints
verbs: 以上是关于企业专用版 prometheus+grafana监控的主要内容,如果未能解决你的问题,请参考以下文章
Linux集群监控部署: prometheus 普罗米修斯 + Grafana(超详细)