主页 > 手机  > 

【云原生Prometheus篇】Prometheus架构详解与核心组件的应用实例(Exporters、Grafa

【云原生Prometheus篇】Prometheus架构详解与核心组件的应用实例(Exporters、Grafa

Prometheus Part1 一、常用的监控系统1.1 简介1.2 Prometheus和zabbix的区别 二、Prometheus2.1 简介2.2 Prometheus的主要组件1)`Prometheus server`2)`Exporters`3)`Alertmanager`4)`Pushgateway`5)`Grafana` 2.3 Prometheus的工作流程2.4 Prometheus数据采集配置 三、二进制部署Prometheus3.1 初始化操作3.2 下载Prometheus源码包并解压3.3 Prometheus添加到系统服务中3.4 访问测试 四、Exporters部署实例4.1 实例一:部署 Node Exporter 监控系统级指标Step1 准备源代码包Step2 将node-expoter添加到系统服务中Step3 加入到 Prometheus 监控中补充:常用的各指标 4.2 实例二:通过mysql exporter监控 MySQLStep1 部署mysql exporterStep2 修改Mysql的配置Step3 启动mysqld_exporter服务Step4 添加Mysql到Prometheus监控中Step5 查看Prometheus web界面 4.3 实例三:监控NginxStep1 安装nginxStep2 修改nginx的配置文件,启动nginxStep3 解压 nginx-exporter并启动Step4 将nginx加入到Prometheus监控中Step5 访问Prometheus web页面 五、部署 Grafana平台进行展示5.1 下载和安装5.2 配置数据源5.3 导入grafana监控面板

一、常用的监控系统 1.1 简介

老牌传统的:Zabbix 、Nagios、Cacti …

云时代的:Prometheus、夜莺 … …

1.2 Prometheus和zabbix的区别

Zabbix:更适用于传统业务架构的物理机、虚拟机环境的监控,对容器的支持比较差;数据存储主要采用的是关系型数据库,会随着监控节点数量的增加,关系型数据库的压力也会变大,监控数据的读写也会变的很慢;对大规模集群监控的性能比Prometheus要弱一些,可适用于单集群不超过2000节点的场景。

Prometheus:还能支持云环境、Kubernetes容器集群的监控,是目前容器监控最好的解决方案;数据存储采用的是时序数据库,大大的节省了存储空间,并且提升了查询效率;单集群支持的节点规模更大,通常超过2000台节点、业务服务数量大于1000个的时候建议直接上Prometheus。

二、Prometheus

Prometheus 官网地址: prometheus.io

Prometheus github 地址: github /prometheus

2.1 简介

Prometheus 是一个开源的监控系统 + 时间序列数据库,数据模型是 指标度量名称{键值对标签} 的时间序列数据格式。

2.2 Prometheus的主要组件

1)Prometheus server

Prometheus服务的核心组件;

通过http pull拉取的方式采集监控指标数据(时间序列数据);

作为时序数据库持久化存储监控指标数据;

根据告警规则生成告警通知推送给alertmanager;

内建service discovery动态服务发现功能(支持文件、consul、K8S等自动发现方式)

2)Exporters

指标暴露器,用于对原生不支持prometheus直接采集监控指标数据的系统或应用,收集监控指标数据并转换格式给prometheus server拉取采集。

常用的exporters描述Node-Exporter用于收集服务器节点的物理指标状态数据,如平均负载、CPU、内存、磁盘、网络等资源信息的指标数据,需要部署到所有运算节点。mysqld-exporter/nginx-exporter用于监控特定服务,比如mysql/nginxKube-State-Metrics用于为 Prometheus 采集 K8S 资源数据cAdvisor用来监控容器内部使用资源的信息,比如 CPU、内存、网络I/O、磁盘I/Oblackbox-exporter监控业务容器存活性 3)Alertmanager

接收prometheus server发来的告警通知,负责对告警通知去重、分组,并路由给接收人(电子邮件、钉钉、企业微信等方式)

4)Pushgateway

作为中转站,接收一些短期任务或只会push推送数据的任务发来的监控指标数据,用于临时存储监控指标数据并统一给prometheus server拉取采集

5)Grafana

外置的监控数据展示平台,接入prometheus数据源,通过promQL查询,并以图形化形式展示

2.3 Prometheus的工作流程

1)prometheus server通过http pull拉取的方式从监控目标target(exporter或pushgateway暴露的http接口)拉取监控指标数据;

2)prometheus server将采集到的监控指标数据通过时序数据库持久化存储在本地磁盘或外置存储中;

3)prometheus server将采集到的监控指标数据与本地配置的告警规则进行计算比对,如果触发告警则会生成告警通知推送给alertmanager;

4)alertmanager接收到prometheus server发来的告警通知后,对告警通知去重、分组,再通过电子邮件/钉钉/企业微信等方式发送给接收人;

5)prometheus支持原生的web UI或grafana接入prometheus数据源,通过promQL查询,并以图形化形式展示。

prometheus支持使用influxdb等作为外置时序数据库,实现长期存储历史数据。

prometheus可基于thanos实现prometheus集群的高可用(主要方式是在K8S上部署,通过边车模式与prometheus部署在同一个Pod里共享监控数据)

2.4 Prometheus数据采集配置 #这是一个模板 scrape_configs: - job_name: XXX #自定义监控任务的名称 metrics_path: "/metrics" #指定获取监控指标数据的URL路径,一般都是 /metrics scheme: "http" #指定拉取监控指标数据的协议,http(默认值)|https static_configs: #定义静态配置的监控目标 - targets: #指定监控目标的IP和exporter的端口 - <IP1>:<exporter的端口> - <IP2>:<exporter的端口> labels: #自定义监控目标的标签 <标签key>: <标签value> 三、二进制部署Prometheus 3.1 初始化操作 systemctl stop firewalld setenforce 0 3.2 下载Prometheus源码包并解压

上传 prometheus-2.45.0.linux-amd64.tar.gz 到 /opt 目录中,并解压

#建立工作目录 mkdir -p /opt/prometheus #上传源码包 cd /opt/prometheus tar xf prometheus-2.45.0.linux-amd64.tar.gz #方便补全 mv prometheus-2.45.0.linux-amd64 /usr/local/prometheus

Prometheus配置清单文件详解

cat /usr/local/prometheus/prometheus.yml | grep -v "^#" global: #用于prometheus的全局配置,比如采集间隔,抓取超时时间等 scrape_interval: 15s #采集目标主机监控数据的时间间隔,默认为1m evaluation_interval: 15s #触发告警生成alert的时间间隔,默认是1m # scrape_timeout is set to the global default (10s). scrape_timeout: 10s #数据采集超时时间,默认10s alerting: #用于alertmanager实例的配置,支持静态配置和动态服务发现的机制 alertmanagers: - static_configs: - targets: # - alertmanager:9093 rule_files: #用于加载告警规则相关的文件路径的配置,可以使用文件名通配机制 # - "first_rules.yml" # - "second_rules.yml" 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命名,支持静态配置(static_configs)和动态服务发现的机制(*_sd_configs) # metrics_path defaults to '/metrics' metrics_path: '/metrics' #指标数据采集路径,默认为 /metrics # scheme defaults to 'http'. static_configs: #静态目标配置,固定从某个target拉取数据 - targets: ["localhost:9090"] 3.3 Prometheus添加到系统服务中 #配置系统启动文件 cat > /usr/lib/systemd/system/prometheus.service <<'EOF' [Unit] Description=Prometheus Server Documentation= prometheus.io After=network.target [Service] Type=simple ExecStart=/usr/local/prometheus/prometheus \ --config.file=/usr/local/prometheus/prometheus.yml \ --storage.tsdb.path=/usr/local/prometheus/data/ \ --storage.tsdb.retention=15d \ --web.enable-lifecycle ExecReload=/bin/kill -HUP $MAINPID Restart=on-failure [Install] WantedBy=multi-user.target EOF

启动

#启动 Prometheust systemctl enable prometheus --now netstat -natp | grep :9090

3.4 访问测试

浏览器访问:http://192.168.2.108:9090 ,访问到 Prometheus 的 Web UI 界面。

点击页面的 Status -> Targets;

如看到 Target 状态都为 UP,说明 Prometheus 能正常采集到数据。

浏览器访问:http://192.168.2.108:9090/metrics ,可以看到 Prometheus 采集的指标数据。

其中 Help 字段用于解释当前指标的含义,Type 字段用于说明数据的类型。

四、Exporters部署实例 4.1 实例一:部署 Node Exporter 监控系统级指标 Step1 准备源代码包

上传 node_exporter-1.3.1.linux-amd64.tar.gz 到 /opt 目录中,并解压。

tar xf node_exporter-1.3.1.linux-amd64.tar.gz mv node_exporter-1.3.1.linux-amd64/node_exporter /usr/local/bin Step2 将node-expoter添加到系统服务中

配置启动文件

cat > /usr/lib/systemd/system/node_exporter.service <<'EOF' [Unit] Description=node_exporter Documentation= prometheus.io/ After=network.target [Service] Type=simple ExecStart=/usr/local/bin/node_exporter \ --collector.ntp \ --collector.mountstats \ --collector.systemd \ --collector.tcpstat ExecReload=/bin/kill -HUP $MAINPID Restart=on-failure [Install] WantedBy=multi-user.target EOF

启动

systemctl enable node_exporter --now netstat -natp | grep :9100

浏览器访问:http://192.168.2.108:9100/metrics ,可以看到 Node Exporter 采集到的指标数据。

Step3 加入到 Prometheus 监控中

修改Prometheus配置文件

vim /usr/local/prometheus/prometheus.yml #在尾部增加如下内容 - job_name: nodes metrics_path: "/metrics" static_configs: - targets: - 192.168.2.108:9100 - 192.168.2.100:9100 - 192.168.2.102:9100 labels: service: kubernetes

重新载入配置

#方法一 systemctl reload prometheus #方法二 curl -X POST http://192.168.2.108:9090/-/reload

测试

浏览器查看 Prometheus 页面的 Status -> Targets

补充:常用的各指标

●node_cpu_seconds_total ●node_memory_MemTotal_bytes ●node_filesystem_size_bytes{mount_point=PATH} ●node_system_unit_state{name=} ●node_vmstat_pswpin:系统每秒从磁盘读到内存的字节数 ●node_vmstat_pswpout:系统每秒钟从内存写到磁盘的字节数

更多指标介绍: github /prometheus/node_exporter

4.2 实例二:通过mysql exporter监控 MySQL

注:切换到Mysql服务器部署。

Step1 部署mysql exporter

解压mysql exporter源码包

tar xf mysqld_exporter-0.14.0.linux-amd64.tar.gz mv mysqld_exporter-0.14.0.linux-amd64/mysqld_exporter /usr/local/bin/

配置启动文件

cat > /usr/lib/systemd/system/mysqld_exporter.service <<'EOF' [Unit] Description=mysqld_exporter Documentation= prometheus.io/ After=network.target [Service] Type=simple ExecStart=/usr/local/bin/mysqld_exporter --config.my-cnf=/etc/my f ExecReload=/bin/kill -HUP $MAINPID Restart=on-failure [Install] WantedBy=multi-user.target EOF Step2 修改Mysql的配置

修改Mysql的配置文件

vim /etc/my f [client] ...... host=localhost user=exporter password=abc123

授权 exporter 用户

#登录收据库 mysql -uroot -p123123 #授权 GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost' IDENTIFIED BY 'abc123'; #刷新 flush privillages

重启mysqld服务

systemctl restart mysqld

Step3 启动mysqld_exporter服务 systemctl enable mysqld_exporter --now netstat -natp | grep :9104

Step4 添加Mysql到Prometheus监控中

切换到Prometheus 服务器上操作。

修改 prometheus 配置文件,加入到 prometheus 监控中

vim /usr/local/prometheus/prometheus.yml #在尾部增加如下内容 - job_name: mysqld metrics_path: "/metrics" static_configs: - targets: - 192.168.2.106:9104 labels: service: mysqld

重新载入配置

systemctl reload prometheus Step5 查看Prometheus web界面

浏览器查看 Prometheus 页面的 Status -> Targets

4.3 实例三:监控Nginx

nginx-exporter下载地址: github /hnlq715/nginx-vts-exporter/releases/download/v0.10.3/nginx-vts-exporter-0.10.3.linux-amd64.tar.gz

nginx 下载地址:http://nginx.org/download/

nginx 插件下载地址: github /vozlt/nginx-module-vts/tags

Step1 安装nginx

下载并解压nginx插件包

cd /opt tar xf nginx-module-vts-0.1.18.tar.gz mv nginx-module-vts-0.1.18 /usr/local/nginx-module-vts

安装nignx

#安装依赖 yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make #管理用户 useradd -M -s /sbin/nologin nginx #解压代码包 cd /opt tar xf nginx-1.24.0.tar.gz #编译安装 cd nginx-1.24.0/ ./configure --prefix=/usr/local/nginx \ --user=nginx \ --group=nginx \ --with-http_stub_status_module \ --with-http_ssl_module \ --add-module=/usr/local/nginx-module-vts make & make install Step2 修改nginx的配置文件,启动nginx

修改nginx配置文件

vim /usr/local/nginx/conf/nginx.conf http { vhost_traffic_status_zone; #添加 vhost_traffic_status_filter_by_host on; #添加,开启此功能,在 Nginx 配置有多个 server_name 的情况下,会根据不同的 server_name 进行流量的统计,否则默认会把流量全部计算到第一个 server_name 上 ...... server { ...... } server { vhost_traffic_status off; #在不想统计流量的 server 区域,可禁用 vhost_traffic_status listen 8080; allow 127.0.0.1; allow 192.168.2.108; #设置为 prometheus 的 ip 地址 location /nginx-status { stub_status on; access_log off; } location /status { vhost_traffic_status_display; vhost_traffic_status_display_format html; } } } #假如 nginx 没有规范配置 server_name 或者无需进行监控的 server 上,那么建议在此 vhost 上禁用统计监控功能。否则会出现 127.0.0.1、hostname 等的域名监控信息。

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ nginx -t

将nginx添加到系统服务中

cat > /lib/systemd/system/nginx.service <<'EOF' [Unit] Description=nginx After=network.target [Service] Type=forking PIDFile=/usr/local/nginx/logs/nginx.pid ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target EOF

启动

systemctl enable nginx --now

浏览器访问:http://192.168.2.107:8080/status ,可以看到 Nginx Vhost Traffic Status 的页面信息

Step3 解压 nginx-exporter并启动

源码包

cd /opt/ tar -zxvf nginx-vts-exporter-0.10.3.linux-amd64.tar.gz mv nginx-vts-exporter-0.10.3.linux-amd64/nginx-vts-exporter /usr/local/bin/

添加到系统服务

cat > /usr/lib/systemd/system/nginx-exporter.service <<'EOF' [Unit] Description=nginx-exporter Documentation= prometheus.io/ After=network.target [Service] Type=simple ExecStart=/usr/local/bin/nginx-vts-exporter -nginx.scrape_uri=http://localhost:8080/status/format/json ExecReload=/bin/kill -HUP $MAINPID Restart=on-failure [Install] WantedBy=multi-user.target EOF

启动nginx-exporter服务

systemctl enable nginx-exporter --now netstat -natp | grep :9913

Step4 将nginx加入到Prometheus监控中

切换到 Prometheus 服务器。

修改 prometheus 配置文件

vim /usr/local/prometheus/prometheus.yml #在尾部增加如下内容 - job_name: nginx metrics_path: "/metrics" static_configs: - targets: - 192.168.2.107:9913 labels: service: nginx

重新载入配置

systemctl reload prometheus Step5 访问Prometheus web页面

浏览器查看 Prometheus 页面的 Status -> Targets

五、部署 Grafana平台进行展示 5.1 下载和安装 #下载地址 grafana /grafana/download mirrors.bfsu.edu /grafana/yum/rpm/ yum install grafana-enterprise-8.5.9-1.x86_64.rpm

systemctl enable grafana-server --now netstat -natp | grep :3000

浏览器访问:http://192.168.2.108:3000 ,默认账号和密码为 admin/admin

5.2 配置数据源 Configuration -> Data Sources -> Add data source -> 选择 Prometheus HTTP -> URL 输入 http://192.168.2.108:9090 点击 Save & Test

点击 上方菜单 Dashboards--->Import 所有默认模板 Dashboards -> Manage ,选择 Prometheus 2.0 Stats 或 Prometheus Stats 即可看到 Prometheus job 实例的监控图像

5.3 导入grafana监控面板

浏览器访问: grafana /grafana/dashboards

在页面中搜索 node exporter ,选择适合的面板,点击 Copy ID 或者 Download JSON

在 grafana 页面中,+ Create -> Import ,输入面板 ID 号或者上传 JSON 文件,点击 Load,即可导入监控面板

标签:

【云原生Prometheus篇】Prometheus架构详解与核心组件的应用实例(Exporters、Grafa由讯客互联手机栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【云原生Prometheus篇】Prometheus架构详解与核心组件的应用实例(Exporters、Grafa