重庆网站建设近重庆零臻科技,哪里有创建网站的,义乌十大进出口贸易公司,汕尾网站seo目录
一、理论
1.Promethues简介
2.监控告警系统设计思路
3.Prometheus监控体系
4.Prometheus时间序列数据
5.Prometheus的生态组件
6.Prometheus工作原理
7.Prometheus监控内容
8.部署Prometheus
9.部署Exporters
10.部署Grafana进行展示
二、实验
1.部署Prometh…目录
一、理论
1.Promethues简介
2.监控告警系统设计思路
3.Prometheus监控体系
4.Prometheus时间序列数据
5.Prometheus的生态组件
6.Prometheus工作原理
7.Prometheus监控内容
8.部署Prometheus
9.部署Exporters
10.部署Grafana进行展示
二、实验
1.部署Prometheus
2.部署Exporters
2.监控远程MySQL
3.部署Grafana进行展示
三、问题
1.Prometheus和Zabbix区别
2.如何防止告警信息轰炸
3.监控服务有哪4个黄金指标
4.访问prometheus服务器被监控端agent服务器状态报错
5.mysqld_exporter如何指定启动参数
四、总结 一、理论
1.Promethues简介
1概念
Prometheus 是一个开源的服务监控系统和时序数据库TDSB其提供了通用的数据模型和快捷数据采集、存储和查询接口。它的核心组件Prometheus server会定期从静态配置的监控目标或者基于服务发现自动配置的自标中进行拉取数据当新拉取到的数据大于配置的内存缓存区时数据就会持久化到存储设备当中。 每个被监控的主机都可以通过专用的exporter 程序提供输出监控数据的接口它会在目标处收集监控数据并暴露出一个HTTP接口供Prometheus server查询Prometheus通过基于HTTP的pull的方式来周期性的采集数据。
任何被监控的目标都需要事先纳入到监控系统中才能进行时序数据采集、存储、告警和展示监控目标可以通过配置信息以静态形式指定也可以让Prometheus通过服务发现的机制进行动态管理。
Prometheus 能够直接把API Server作为服务发现系统使用进而动态发现和监控集群中的所有可被监控的对象Prometheus 官网地址https://prometheus.ioPrometheus github 地址https://github.com/prometheus
2特点
多维数据模型由度量名称和键值对标识的时间序列数据 时序数据是在一段时间内通过重复测量measurement而获得的观测值的集合将这些观测值绘制于图形之上它会有一个数据轴和一个时间轴
服务器指标数据、应用程序性能监控数据、网络数据等也都是时序数据
1内置时间序列pime series数据库Prometheus外置的远端存储通常会用InfluxDB、openTsDB等
2promQL一种灵活的查询语言可以利用多维数据完成复杂查询
3基于HTTP的pull拉取方式采集时间序列数据
4同时支持PushGateway组件收集数据
5通过服务发现或者静态配置来发现目标服务对象
6支持作为数据源接入Grafana2.监控告警系统设计思路
1模块组成
① 数据收集模块② 数据提取模块(prometheus-TSDB,查询语言是promQL)③ 监控告警模块布尔值表达式判断是否需要告警不成立是健康状态
2层次 第一层:数据收集层 多渠道监控数据网络硬件应用数据物理环境第二层:数据展示层 数据生成曲线图展示对时序数据的动态展示)第三层:数据提取层 定时采集数据到监控模块第四层:告警规则配置层 告警规则设置、告警伐值设置定义布尔值表达式筛选异常状态第五层:告警事件生成层 实时记录告警事件、形成分析图表趋势分析、可视化)第六层:用户展示管理层 同一用户管理、集中监控、集中维护
3.Prometheus监控体系 1系统层监控需要监控的数据
1CPU、Load、Memory、swap、disk、I/O、process等
2网络监控网络设备、工作负载、网络延迟、丢包率等
2中间件及基础设施类监控
1消息中间件kafka、RocketMQ、等消息代理redis 中间件
2WEB服务容器tomcat、weblogic、apache、php、spring系列
3数据库/缓存数据库Mysql、Postgresql、MongoDB、es、redis
redis监控内容
redis的服务状态
redis所在服务器的系统层监控
RDB和AOF日志监控日志---如果是哨兵模式---哨兵共享集群信息产生的日志
---直接包含的其他节点哨兵信息及redis信息key的数量
key被命中的数据/次数
最大连接数---redis和系统
redis:redis-cli登录---config get maxclients查看最大连接3应用层监控
它用于衡量应用程序代码状态和性能。
监控的分类
1白盒监控自省指标等待被下载cadvisor
2黑盒监控基于探针snmp的监控方式不会主动干预、影响数据
4业务层监控
用于衡量应用程序的价值。如电商业务的销售量ops、dau日活、转化等。
业务接口登入数量注册数、订单量、搜索量和支付量。 4.Prometheus时间序列数据
1序列数据
时间序列数据TimeSeries Data:按照时间顺序记录系统、设备状态变化的数据被称为时序数据。
应用场景很多如
1人驾驶车辆运行中要记录的经度纬度速度方向旁边物体的距离等等。每时每刻都要将数据记录下来做分析。2某一个地区的各车辆的行驶轨迹数据3传统证券行业实时交易数据4实时运维监控数据等
2时间序列数据特点
Prometheus 有着非常高效的时间序列数据存储方法每个采样数据仅仅占用 3.5byte 左右空间上百万条时间序列30 秒间隔保留 60 天大概花了 200 多 G来自官方数据。
1性能好关系型数据库对于大规模数据的处理性能糟糕。NOSQL 可以比较好的处理大规模数据让依然比不上时间序列数据库。
2存储成本低高效的压缩算法节省存储空间有效降低 IO。
3数据来源
Prometheus基于HTTP call (http/https请求)从配置文件中指定的网络端点endpoint/IP:端口上周期性获取指标数据。很多环境、被监控对象本身是没有直接响应/处理http请求的功能prometheus-exporter则可以在被监控端收集所需的数据收集过来之后还会做标准化把这些数据转化为prometheus可识别可使用的数据兼容格式。 4收集数据
1监控概念白盒监控、黑盒监控2白盒监控自省方式被监控端内部可以生成指标只要等待监控系统来采集时提供出去即可。3黑盒监控对于被监控系统没有侵入性对其没有直接‘影响这种类似于基于探针机制进行监控snmp协议
prometheus支持通过三种类型的途径从目标上抓取/采集scrape指标数据基于白盒监控
1exporter---工作在被监控端周期性的抓取数据并 转换为prometheus来收集自己并不推送
2Instrumentation---指被监控对象内部自身有数据收集、监控的功能只需要prometheus直接去获取
3Pushgateway---短周期5s-10s的数据收集5常见的时间序列数据库 6时间序列数据库引擎排行
DB-Engines Ranking - die Rangliste der populärsten Time Series DBMS 7prometheus获取方式
Prometheus同其他TSDB相比有一个非常典型的特性主动从各Target上拉取pull数据非等待被监控端的推送push
两个获取方式各有优劣其中Pull模型的优势在于
1集中控制:有利于将配置集在Prometheus server上完成包括指标及采取速率等;
2Prometheus的根本目标在于收集在target上预先完成聚合的聚合型数据而非一款由事件驱动的存储系统通过targets(标识的是具体的被监控端)
3比如配置文件中的targets : [ ‘localhost:9090’]8Prometheus 数据模型
Prometheus 仅用于以“键值”(key)形式储存时序式的聚合数不支持存储文本信息
1其中的“键”称为指标它通常意味着cpu速率、内存使用率、负载等2同一指标可能会适配到多个目标比如cpu使用率这个指标我们需要对100台服务器设备进行使用。所以它使3用“标签”labels作为元数据从而为指标添加更多的信息描述
这些标签可以作为过滤器进行指标过滤及运算。
具体的看如下数据展示描述 如上图中cpu_usage{core“1”,ip“128.0.0.1”} 14.04 cpu_usage为指标名称{core“1”,ip“128.0.0.1”}为标签标签内的条件可以多个用逗号分隔14.04 为 表达式返回的值 5.Prometheus的生态组件
Prometheus 负责时序型指标数据的采集及存储但数据的分析、聚合及直观展示以及告警等功能并非由Prometheus Server所负责。 1Prometheus server
Prometheus server服务核心组件采用pull方式收集监控数据通过http协议传输。并存储时间序列数据。Prometheus server 由三个部分组成RetrivalStoragePromQL
1Retrieval负责在活跃的target 主机上抓取监控指标数据。
2Storage存储主要是把采集到的数据存储到磁盘中。默认为15天可修改。
3PromQL是Prometheus提供的查询语言模块。
2pushgateway
Pushgateway类似一个中转站Prometheus的server端只会使用pull方式拉取数据但是某些节点因为某些原因只能使用push方式推送数据那么它就是用来接收push而来的数据并暴露给Prometheus的server拉取的中转站。可以理解成目标主机可以上报短期任务的数据到Pushgateway然后Prometheus server 统一从Pushgateway拉取数据。
3exporters
Exporters指标暴露器负责收集不支持内建Instrumentation的应用程序或服务的性能指标数据并通过HTTP接口供Prometheus Server获取。换句话说Exporter 负责从目标应用程序上采集和聚合原始格式的数据并转换或聚合为Prometheus格式的指标向外暴露。
常用的Exporters
1Node-Exporter用于收集服务器节点例如k8s的物理指标状态数据如平均负载、CPU、内存、磁盘、网络等资源信息的指标数据需要部署到所有运算节点。指标详细介绍https://github.com/prometheus/node_exporter
2mysqld-exporter/nginx-exporter
3Kube-state-Metrics为prometheus 采集k8s资源数据的exporter通过监听APIServer 收集kubernetes集群内资源对象的状态指标数据例如pod、deployment、service 等等。同时它也提供自己的数据主要是资源采集个数和采集发生的异常次数统计。
4cAdvisor用来监控容器内部使用资源的信息比如CPU、内存、网络I/0、磁盘I/0。
5blackbox-exporter监控业务容器存活性。
需要注意的是kube-state-metrics 只是简单的提供一个metrics 数据并不会存储这些指标数据
所以可以使用prometheus来抓取这些数据然后存储主要关注的是业务相关的一些元数据
比如Deployment、Pod、副本状态等调度了多少个replicas现在可用的有几个
多少个Pod是running/stopped/terminated 状态Pod 重启了多少次有多少job在运行中。
4Service Discovery
Service Discovery服务发现用于动态发现待监控的TargetPrometheus支持多种服务发现机制文件、DNS、Consul、Kubernetes等等。
服务发现可通过第三方提供的接口Prometheus查询到需要监控的Target列表然后轮询这些Target 获取监控数据。该组件目前由Prometheus Server内建支持。
5Alertmanager
Alertmanager是一个独立的告警模块从Prometheus server端接收到“告警通知”后会进行去重、分组并路由到相应的接收方发出报警常见的接收方式有电子邮件、钉钉、企业微信等。
1Prometheus Server 仅负责生成告警指示具体的告警行为由另一个独立的应用程序AlertManager负责
2告警指示由 Prometheus Server基于用户提供的告警规则周期性计算生成Alertmanager 接收到Prometheus Server发来的告警指示后基于用户定义的告警路由向告警接收人发送告警信息。6client Library
client Library客户端库目的在于为那些期望原生提供Instrumentation功能的应用程序提供便捷的开发途径用于基于应用程序内建的测量系统。
7grafana
Grafana是一个跨平台的开源的度量分析和可视化工具可以将采集的数据可视化的展示并及时通知给告警接收方。其官方库中具有丰富的仪表盘插件。
6.Prometheus工作原理
1Prometheus数据流向
1Prometheus server定期从配置好的jobs或者exporters中拉取metrics或者接收来自 Pushgateway发送过来的metrics或者从其它的Prometheus server中拉metrics。
2Prometheus server在本地存储收集到的metrics并运行定义好的alerts.rules记录新的时间序列或者向Alert manager推送警报。
3Alertmanager根据配置文件对接收到的警报进行处理发出告警。
4在图形界面中可视化采集数据。2Prometheus工作模式
1Prometheus Server 基于服务发现Service Discovery机制或静态配置获取要监视的目标Target并通过每个目标上的指标exporter来采集Scrape指标数据
2Prometheus Server 内置了一个基于文件的时间序列存储来持久存储指标数据用户可使用PromQL接口来检索数据也能够按需将告警需求发往A1ertmanager完成告警内容发送
3一些短期运行的作业的生命周期过短难以有效地将必要的指标数据供给到Server端它们一般会采用推送Push方式输出指标数据Prometheus借助于Pushgateway 接收这些推送的数据进而由server端进行抓取3Prometheus工作流程
1Prometheus以prometheus Server 为核心用于收集和存储时间序列数据。Prometheus Server从监控目标中通过pull方式拉取指标数据或通过pushgateway 把采集的数据拉取到Prometheus server中。
2Prometheus server 把采集到的监控指标数据通过TSDB存储到本地HDD/ssD中。
3Prometheus 采集的监控指标数据按时间序列存储通过配置报警规则把触发的报警发送到Alertmanager。
4Alertmanager 通过配置报警接收方发送报警到邮件、钉钉或者企业微信等。
5Prometheus 自带的Web UI 界面提供PromQL 查询语言可查询监控数据。
6Grafana 可接入Prometheus 数据源把监控数据以图形化形式展示出。注意:告警数据采集、告警信息提取、告警通知1首先需要采集监控数据pro会周期性的pull或被push指标数据数据采集的方式主要包括exporters、instrumentation、pushgateway 3种方式前两者为pull方式获取pushgateway借助于push方式推送给prometheus。2根据prometheus配置文件中K8S-configmap的配置中获取被监控端的数据之后保存在TSDB中我们可以借助Grafana或者告警平台来展示数据grafana的展示是通过PromQL来获取数据。3prometheus通过rule配置来借助于PromQL来定义布尔值表达式产生告警信息4一旦出现告警prometheus产生告警信息发送给alertmanager,alertmanager根据自定义的告警路由来进行告警通知对接第三方平台例如告警平台、邮件、钉钉。
4Prometheus的局限性
1Prometheus是一款指际监控系统不适合存储事件及日志等它更多地展示的是趋势性的监控而非精准数据
2Prometheus认为只有最近的监控数据才有查询的需要其本地存储的设计初衷只是保存短期例如一个月数据因而不支持针对大量的历史数据进行存储若需要存储长期的历史数据建议基于远端存储机制将数据保存于InfluxDB或openTsDB等系统中
3Prometheus的集群机制成熟度不高可基于Thanos和灭霸是一个单词实现Prometheus集群的高可用及联邦集群7.Prometheus监控内容
1监控级别及内容
表1 监控级别及内容
级别监控内容exporter网络 网络协议http、dns、tcp、icmp; 网路硬件路由器、交换机等 BlockBox Exporter;SNMP Exporter主机资源用量node exporter容器资源用量cadvisor应用包括Library延迟、错误QPS,内部状态代码集中集成Prometheus Client中间件状态资源用量以及服务状态代码集中集成Prometheus Client编排工具集群资源用量调度等Kubernetes Components
2网络监控
1网络性能监控主要涉及网络监测网络实时流量监控网络延迟、访问量、成功率和历史数据统计、汇总和历史数据分析等功能。2网络***检测主要针对内网或者外网的网络***。如DDoS***的。通过分析异常流量来确定网络***行为。3设备监控主要针对数据中心内的多种网络设备进行监控。包括路由器防火墙和交换机等硬件设备可以通过snmp等协议收集数据。3存储监控
1存储性能监控方面存储通常监控块的读写速率IOPS。读写延迟磁盘用量等文件存储通常监控文件系统inode。读写速度、目录权限等。2存储系统监控方面不同的存储系统有不同的指标例如对于ceph存储需要监控OSD, MON的运行状态各种状态pg的数量以及集群IOPS等信息。3存储设备监控方面对于构建在x86服务器上的存储设备设备监控通过每个存储节点上的采集器统一收集磁盘、SSD、网卡等设备信息存储厂商以黑盒方式提供商业存储设备通常自带监控功能可监控设备的运行状态性能和容量的。4服务器监控
1CPU涉及整个 CPU 的使用量、用户态百分比、内核态百分比每个 CPU 的使用量、等待队列长度、I/O 等待百分比、CPU 消耗最多的进程、上下文切换次数、缓存命中率等。2内存涉及内存的使用量、剩余量、内存占用最高的进程、交换分区大小、缺页异常等。3网络 I/O涉及每个网卡的上行流量、下行流量、网络延迟、丢包率等。4磁盘 I/O涉及硬盘的读写速率、IOPS、磁盘用量、读写延迟等。5中间件监控
1消息中间件 RabbitMQ Exporter、Kafka Exporter2Web 服务中间件Apache Exporter、Nginx Exporter3数据库中间件MySQL Exporter、PostgreSQL Exporter、Redis Exporter
8.部署Prometheus
1环境准备
服务器类型IP地址组件Prometheus服务器192.168.204.18Prometheus、node_exportergrafana服务器192.168.204.19Grafanaagent服务器192.168.204.20node_exporter
关闭安全机制
#prometheus节点
[rootprometheus ~]# systemctl stop firewalld
[rootprometheus ~]# setenforce 0
setenforce: SELinux is disabled
[rootprometheus ~]# sed -i s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/config#grafana节点
[rootgrafana ~]# systemctl stop firewalld
[rootgrafana ~]# setenforce 0
setenforce: SELinux is disabled
[rootgrafana ~]# sed -i s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/config#agent节点
[rootagent ~]# systemctl stop firewalld
[rootagent ~]# setenforce 0
setenforce: SELinux is disabled
[rootagent ~]# sed -i s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/config修正地址映射
vim /etc/hosts192.168.204.18 prometheus
192.168.204.19 grafana
192.168.204.20 agent2Prometheus部署
prometheus下载地址
https://prometheus.io/download/
①上传 prometheus-2.37.0.linux-amd64.tar.gz 到 /opt 目录中并解压
[rootprometheus ~]# cd /opt
[rootprometheus opt]# ls
cni containerd rh
[rootprometheus opt]# rz -E
rz waiting to receive.
[rootprometheus opt]# ls
cni containerd prometheus-2.37.0.linux-amd64.tar.gz rh
[rootprometheus opt]# tar xf prometheus-2.37.0.linux-amd64.tar.gz
[rootprometheus opt]# mv prometheus-2.37.0.linux-amd64 /usr/local/prometheus
[rootprometheus opt]# cd /usr/local/prometheus
[rootprometheus prometheus]# ls
console_libraries consoles LICENSE NOTICE prometheus prometheus.yml promtool
②修改配置文件
cat /usr/local/prometheus/prometheus.yml | grep -v ^#
global: #用于prometheus的全局配置比如采集间隔抓取超时时间等scrape_interval: 15s #采集目标主机监控数据的时间间隔默认为1mevaluation_interval: 15s #触发告警生成alert的时间间隔默认是1m# scrape_timeout is set to the global default (10s).scrape_timeout: 10s #数据采集超时时间默认10salerting: #用于alertmanager实例的配置支持静态配置和动态服务发现的机制alertmanagers:- static_configs:- targets:# - alertmanager:9093rule_files: #用于加载告警规则相关的文件路径的配置可以使用文件名通配机制# - first_rules.yml# - second_rules.ymlscrape_configs: #用于采集时序数据源的配置# The job name is added as a label jobjob_name to any timeseries scraped from this config.- job_name: prometheus #每个被监控实例的集合用job_name命名支持静态配置static_configs和动态服务发现的机制*_sd_configs# metrics_path defaults to /metrics# scheme defaults to http.static_configs: #静态目标配置固定从某个target拉取数据- targets: [localhost:9090]
修改静态模板配置固定从某个target拉取数据 - targets: [192.168.204.18:9090]③配置系统启动文件设置开机自启
Unit为服务单元After为依赖关系config.file为配置文件storage.tsdb.path为数据目录
storage.tsdb.retention为保存时间ExecReload为重载
[rootprometheus prometheus]# vim /usr/lib/systemd/system/prometheus.service[Unit]
DescriptionPrometheus Server
Documentationhttps://prometheus.io
Afternetwork.target[Service]
Typesimple
ExecStart/usr/local/prometheus/prometheus \
--config.file/usr/local/prometheus/prometheus.yml \
--storage.tsdb.path/usr/local/prometheus/data/ \
--storage.tsdb.retention15d \
--web.enable-lifecycleExecReload/bin/kill -HUP $MAINPID
Restarton-failure[Install]
WantedBymulti-user.target
④开启prometheus,并访问网页验证
systemctl start prometheus
systemctl enable prometheusnetstat -natp | grep :9090浏览器访问http://192.168.204.18:9090 访问到 Prometheus 的 Web UI 界面
点击页面的 Status - Targets如看到 Target 状态都为 UP说明 Prometheus 能正常采集到数据
http://192.168.204.18:9090/metrics 可以看到 Prometheus 采集到自己的指标数据
⑤通过浏览器访问 http:// 服务器 IP:9090 就可以访问到 Prometheus 的主界面
⑥默认只监控了本机一台点 Status→点 Targets→可以看到只监控了本机 9.部署Exporters
1监控远程Linux主机(192.168.109.20)
在远程 linux 主机被监控端 agent上安装 node_exporter 组件。
下载地址
https://prometheus.io/download/
①上传 node_exporter-1.3.1.linux-amd64.tar.gz 到 /opt 目录中并解压
cd /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
②配置启动文件设置开机自启
vim /usr/lib/systemd/system/node_exporter.service[Unit]
Descriptionmysqld_exporter
Documentationhttps://prometheus.io/
Afternetwork.target [Service]
Typesimple
ExecStart/usr/local/bin/node_exporter \
--collector.ntp \
--collector.mountstats \
--collector.systemd \
--collector.tcpstatExecReload/bin/kill -HUP $MAINPID
Restarton-failure[Install]
WantedBymulti-user.target
③启动node_exporter
systemctl start node_exporter
systemctl enable node_exporternetstat -natp | grep :9100浏览器访问http://192.168.204.20:9100/metrics 可以看到 Node Exporter 采集到的指标数据
④ 通过浏览器访问 http:// 被监控端 IP:9100/metrics 就可以查看到 node_exporter 在被监控端收集的监控信息
修改Prometheus服务器的配置文件
回到 Prometheus 服务器的配置文件里添加被监控机器的配置段
vim /usr/local/prometheus/prometheus.yml- job_name: agentstatic_configs:- targets: [192.168.204.20:9100]
改完配置文件后重启服务
systemctl restart prometheus.service
systemctl status prometheus
⑤访问prometheus服务器
回到 web 管理界面→点 Status→点 Targets→可以看到多了一台监控目标
192.168.204.18:9090
注也可以在本机安装 node_exporter使用上面的方式监控本机。
(2) 监控远程MySQL
在被管理机 agent上安装 mysqld_exporter 组件
下载地址
https://prometheus.io/download/
(1) 安装mariadb数据库并授权
安装命令 yum -y install mariadb mariadb-server
安装完成MariaDB首先启动MariaDB systemctl start mariadb
设置开机启动 systemctl enable mariadb
取消开机启动 systemctl disable mariadb
在当前数据库中增加授权
#进入数据库
mysql授权IP为192.168.204.20因为不是prometheus服务器直接来找mariadb获取数据而是prometheus服务器找mysql_exporter然后mysql_exporter再找mariadb.所以这个IP指的是mysql_exporter的IP.
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO exporter192.168.204.20 IDENTIFIED BY exporter123 WITH MAX_USER_CONNECTIONS 3;flush privileges;
(2) 下载mysqld_exporter组件
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.12.0/mysqld_exporter-0.12.0.linux-amd64.tar.gz
3安装mysqld_exporter组件
进入目录 cd /usr/local/prometheus/
下载 wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.12.1/mysqld_exporter-0.12.1.linux-amd64.tar.gz
解压 tar xzvf mysqld_exporter-0.12.1.linux-amd64.tar.gz
修改目录名 mv mysqld_exporter-0.12.1.linux-amd64 mysqld_exporter
修改用户及组 chown -R root:root /usr/local/prometheus/mysqld_exporter/mysqld_exporter
修改权限 chmod 755 /usr/local/prometheus/mysqld_exporter/mysqld_exporter
(4) 添加mysqld_exporter为系统服务
# vim /usr/lib/systemd/system/mysqld_exporter.service
[Unit]
Descriptionmysqld_exporter
Afternetwork.target
[Service]
Typesimple
Usermysql
# exporter对应授权账号,exporter123对应授权密码,localhost对应授权账号密码所在的地址
EnvironmentDATA_SOURCE_NAMEexporter:exporter123(localhost:3306)/
ExecStart/usr/local/prometheus/mysqld_exporter/mysqld_exporter --web.listen-address0.0.0.0:9104 --config.my-cnf /etc/my.cnf \--collect.slave_status \--collect.slave_hosts \--log.levelerror \--collect.info_schema.processlist \--collect.info_schema.innodb_metrics \--collect.info_schema.innodb_tablespaces \--collect.info_schema.innodb_cmp \--collect.info_schema.innodb_cmpmem
Restarton-failure
[Install]
WantedBymulti-user.targe
5启动服务并监听端口
systemctl start mysqld_exporter
systemctl enable mysqld_exporternetstat -antp | grep 9104
(6) 修改Prometheus服务器的配置文件
回到 Prometheus 服务器的配置文件里添加被监控的 mariadb 的配置段
vim /usr/local/prometheus/prometheus.yml35 - job_name: agent_mariadb36 static_configs:37 - targets: [192.168.204.20:9104]
改完配置文件之后重启服务
systemctl restart prometheus.servicenetstat -antp | grep 9090
(7) 访问prometheus服务器
回到 web 管理界面→点 Status→点 Targets→可以看到监控 mariadb
192.168.204.18:9090/ 10.部署Grafana进行展示
Grafana 是一个开源的度量分析和可视化工具可以通过将采集的数据分析查询然后进行可视化的展示并能实现报警。
下载地址:
https://grafana.com/grafana/download/
(1) 下载安装Grafana
#使用yum解决依赖关系 我这边直接上传软件包到opt
yum install -y grafana-7.4.0-1.x86_64.rpm
或
rpm -ivh /opt/grafana-7.3.6-1.x86_64.rpmsystemctl start grafana-server
systemctl enable grafana-servernetstat -natp | grep :3000浏览器访问http://192.168.109.19:3000 默认账号和密码为 admin/admin
通过浏览器访问 http:// grafana 服务器 IP:3000 就到了登录界面使用默认的 admin 用户admin 密码就可以登陆了。
192.168.204.19:3000/login
(2) 配置数据源
下面把 Prometheus 服务器收集的数据做为一个数据源添加到 grafana让 grafana 可以得到 Prometheus 的数据。
点击增加数据源 为此数据自定义一个名称
Prometheus_data
填写prometheus的IP和port
http://192.168.204.18:9090
Auth模块是公网传输数据加密与验证为了保证安全
15s获取一次GET方式
填完之后点击保存
点击设置选择Data Source,可以查看到成功添加数据源
3导入模板
点击prometheus_data,选择Dashboards
点击仪表盘全部导入
全部导入后点击Manage
随便点击一个模板
192.168.204.19:3000/
(4) 为数据源做数据展示
创建Dashboard
数据源选择添加的Prometheus_data
写上查询的值可以多个条件一起都显示在同一张图上
(1分钟负载、5分钟负载、15分钟负载)
自定义名称点击保存
最后在dashboard可以查看到 点击“agent_cpu_load”
注有多条数据的时候可以在查询的键值后面加个大括号括号里的条件表示只匹配当前的监控项。
(5) 导入grafana监控面板
浏览器访问https://grafana.com/grafana/dashboards 在页面中搜索 node exporter 选择适合的面板点击 Copy ID 或者 Download JSON在 grafana 页面中 Create - Import 输入面板 ID 号或者上传 JSON 文件点击 Load即可导入监控面板
(6) Grafana 图形显示 MySQL 监控数据
在 grafana 上修改配置文件,并下载安装 mysql 监控的 dashboard包含相关 json 文件这些 json 文件可以看作是开发人员开发的一个监控模板。
vim /etc/grafana/grafana.ini [dashboards.json]
enabled true
path /var/lib/grafana/dashboardscd /var/lib/grafana/#克隆
yum install -y git
git clone gitgithub.com:percona/grafana-dashboards.gitcp -r grafana-dashboards/dashboards/ /var/lib/grafana/#重启grafana
systemctl restart grafana-server.service
在 grafana 上修改配置文件,并下载安装 mysql 监控的 dashboard包含相关 json 文件这些 json 文件可以看作是开发人员开发的一个监控模板。
点 import 导入后报 prometheus 数据源找不到因为这些 json 文件里默认要找的就是叫 Prometheus 的数据源但我们前面建立的数据源却是叫 prometheus_data。
那么请自行把原来的 prometheus_data 源改名为 Prometheus 即可注意第一个字母 P 是大写。然后再回去刷新一下就有数据了。
(7) Grafanaonealert报警
Prometheus 报警需要使用 alertmanager 这个组件而且报警规则需要手动编写对运维来说不友好。所以我这里选用 grafanaonealert 报警。注意实现报警前把所有机器时间同步再检查一遍。
登陆http://www.onealert.com/→注册帐户→登入后台管理
(8) 在Grafana中配置Webhook URL
1、在Grafana中创建Notification channel选择类型为Webhook
2、推荐选中Send on all alerts和Include imageCloud Alert体验更佳
3、将第一步中生成的Webhook URL填入Webhook settings Url
URL格式
http://api.aiops.com/alert/api/event/grafana/v1/897dcd4c804140098a171d680bf6e26a/ 保存当前应用即可获取完整webhook地址信息
4、Http Method选择POST
5、Send TestSave 在grafana增加通知通道
增加通道
192.168.204.19:3000/
Name: onealertType: webhookUrl: (onelert那里产生)
9 测试CPU负载告警
现在可以去设置一个报警来测试了这里用前面加的 cpu 负载监控来做测试
保存后就可以测试了如果 agent1上的 cpu 负载还没有到 0.3你可以试试 0.1或者运行一些程序把 agent1负载调大。
最终的邮件报警效果 二、实验
1.部署Prometheus
1环境准备
服务器类型IP地址组件Prometheus服务器192.168.204.18Prometheus、node_exportergrafana服务器192.168.204.19Grafanaagent服务器192.168.204.20node_exporter
修改主机名 修改地址映射 关闭安全机制 2Prometheus部署
prometheus下载地址
https://prometheus.io/download/
①上传 prometheus-2.37.0.linux-amd64.tar.gz 到 /opt 目录中并解压 ②修改配置文件
修改静态模板配置固定从某个target拉取数据 ③配置系统启动文件设置开机自启 Unit为服务单元After为依赖关系config.file为配置文件storage.tsdb.path为数据目录
storage.tsdb.retention为保存时间ExecReload为重载 ④开启prometheus,并访问网页验证 ⑤通过浏览器访问 http:// 服务器 IP:9090 就可以访问到 Prometheus 的主界面 ⑥默认只监控了本机一台点 Status→点 Targets→可以看到只监控了本机 通过 http:// 服务器 IP:9090/metrics 可以查看到监控的数据 2.部署Exporters
1监控远程Linux主机(192.168.204.20)
在远程 linux 主机被监控端 agent上安装 node_exporter 组件。
下载地址
https://prometheus.io/download/
①上传 node_exporter-1.3.1.linux-amd64.tar.gz 到 /opt 目录中并解压 ②配置启动文件设置开机自启 ③启动node_exporter ④ 通过浏览器访问 http:// 被监控端 IP:9100/metrics 就可以查看到 node_exporter 在被监控端收集的监控信息 修改Prometheus服务器的配置文件 回到 Prometheus 服务器的配置文件里添加被监控机器的配置段 在主配置文件后添加这三行不能加在上面否则重启会报错
取一个job名称来代表被监控的机器
targets这里改成被监控机器的IP后面端口接9100 改完配置文件后重启服务 ⑤访问prometheus服务器
回到 web 管理界面→点 Status→点 Targets→可以看到多了一台监控目标 注也可以在本机安装 node_exporter使用上面的方式监控本机。
2监控远程Linux主机(192.168.204.18)
也可以在远程 linux 主机监控端 prometheus上安装 node_exporter 组件即监控本机。
下载地址
https://prometheus.io/download/
①上传 node_exporter-1.3.1.linux-amd64.tar.gz 到 /opt 目录中并解压 ②配置启动文件设置开机自启 ③启动node_exporter 浏览器访问可以看到 Node Exporter 采集到的指标数据 ④ 通过浏览器访问 http:// 被监控端 IP:9100/metrics 就可以查看到 node_exporter 在被监控端收集的监控信息
修改Prometheus服务器的配置文件
回到 Prometheus 服务器的配置文件里添加被监控机器的配置段
在主配置文件后添加这三行不能加在上面否则重启会报错
取一个job名称来代表被监控的机器
targets这里改成被监控机器的IP后面端口接9100 改完配置文件后重启服务 ⑤访问prometheus服务器
回到 web 管理界面→点 Status→点 Targets→可以看到多了一台监控目标 2.监控远程MySQL
在被管理机 agent上安装 mysqld_exporter 组件
下载地址
https://prometheus.io/download/ (1) 安装mariadb数据库并授权 在当前数据库中增加授权 (2) 下载mysqld_exporter组件
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.12.0/mysqld_exporter-0.12.0.linux-amd64.tar.gz
3安装mysqld_exporter组件 (4) 添加mysqld_exporter为系统服务 5启动服务并监听端口 (6) 修改Prometheus服务器的配置文件
回到 Prometheus 服务器的配置文件里添加被监控的 mariadb 的配置段 改完配置文件之后重启服务
(7) 访问prometheus服务器
回到 web 管理界面→点 Status→点 Targets→可以看到监控 mariadb 3.部署Grafana进行展示
Grafana 是一个开源的度量分析和可视化工具可以通过将采集的数据分析查询然后进行可视化的展示并能实现报警。
下载地址:
https://grafana.com/grafana/download/
(1) 下载安装Grafana 通过浏览器访问 http:// grafana 服务器 IP:3000 就到了登录界面使用默认的 admin 用户admin 密码就可以登陆了。 (2) 配置数据源
下面把 Prometheus 服务器收集的数据做为一个数据源添加到 grafana让 grafana 可以得到 Prometheus 的数据。
点击增加数据源 为此数据自定义一个名称
填写prometheus的IP和port
http://192.168.204.18:9090
Auth模块是公网传输数据加密与验证为了保证安全
15s获取一次GET方式 填完之后点击保存 点击设置选择Data Source,可以查看到成功添加数据源 3导入模板
点击prometheus_data,选择Dashboards
点击仪表盘全部导入
全部导入后点击Manage 随便点击一个模板
192.168.204.19:3000/
(4) 为数据源做数据展示
创建Dashboard 数据源选择添加的Prometheus_data 写上查询的值可以多个条件一起都显示在同一张图上
(1分钟负载、5分钟负载、15分钟负载) 自定义名称点击保存 最后在dashboard可以查看到 点击“agent_cpu_load” 注有多条数据的时候可以在查询的键值后面加个大括号括号里的条件表示只匹配当前的监控项。
(5) 导入grafana监控面板
浏览器访问https://grafana.com/grafana/dashboards 在页面中搜索 node exporter 选择适合的面板点击 Copy ID 或者 Download JSON在 grafana 页面中 Create - Import 输入面板 ID 号或者上传 JSON 文件点击 Load即可导入监控面板 在页面中搜索 node exporter
选择适合的面板点击 Copy ID 或者 Download JSON 在 grafana 页面中 Create - Import
输入面板 ID 号点击 Load 选择数据源并点击导入即可导入监控面板 此时就可以监控到这台机子的信息了192.168.204.20 也可以切换查询192.168.204.18 点击编写 可以看到实际上都是通过PromQL语句来查询的 (6) Grafana 图形显示 MySQL 监控数据
在 grafana 上修改配置文件,并下载安装 mysql 监控的 dashboard包含相关 json 文件这些 json 文件可以看作是开发人员开发的一个监控模板。 在 grafana 上修改配置文件,并下载安装 mysql 监控的 dashboard包含相关 json 文件这些 json 文件可以看作是开发人员开发的一个监控模板。
点 import 导入后报 prometheus 数据源找不到因为这些 json 文件里默认要找的就是叫 Prometheus 的数据源但我们前面建立的数据源却是叫 prometheus_data。
那么请自行把原来的 prometheus_data 源改名为Metrics 即可注意第一个字母 M 是大写。然后再回去刷新一下就有数据了。
修改前 修改后
保存提交 (7) Grafanaonealert报警
Prometheus 报警需要使用 alertmanager 这个组件而且报警规则需要手动编写对运维来说不友好。所以我这里选用 grafanaonealert 报警。注意实现报警前把所有机器时间同步再检查一遍。
登陆https://caweb.aiops.com/→注册帐户→登入后台管理 下拉选择Grafana,点击进行配置 自定义一个名称 保存之后获得key (8) 在Grafana中配置Webhook URL
①在Grafana中创建Notification channel选择类型为Webhook ②推荐选中Send on all alerts和Include imageCloud Alert体验更佳
③将第一步中生成的Webhook URL填入Webhook settings Url ④Http Method选择POST ⑤ Send TestSave
可以先“Test”测试一下报警媒介是否ok然后再点击保存 测试成功自动去重 保存创建成功 9 测试CPU负载告警
现在可以去设置一个报警来测试了这里用前面加的 cpu 负载监控来做测试 自定义一个名称类似于zabbix触发器名称;
IS ABOVE 这里填0.3按实际使用也可以填0.1表示当cpu负载平均值大于0.1就发出报警 点通知选择之前定义好的onealert通道自定义通知内容 保存后就可以测试了如果 agent上的 cpu 负载还没有到 0.3你可以试试 0.1或者运行一些程序把 agent负载调大比如压力测试或import一个新模板。 点击测试 平台收到报警信息 最终的微信报警效果 最终的邮件报警效果 三、问题
1.Prometheus和Zabbix区别
1监控的维度
①监控的广度 ②监控的深度 ③ 监控选型 2区别 和Zabbix类似Prometheus也是一个近年比较火的开源监控框架和Zabbix不同之处在于Prometheus相对更灵活点模块间比较解耦比如告警模块、代理模块等等都可以选择性配置。服务端和客户端都是开箱即用不需要进行安装。zabbix则是一套安装把所有东西都弄好很庞大也很繁杂。
zabbix的客户端agent可以比较方便的通过脚本来读取机器内数据库、日志等文件来做上报。而Prometheus的上报客户端则分为不同语言的SDK和不同用途的exporter两种比如如果你要监控机器状态、mysql性能等有大量已经成熟的exporter来直接开箱使用通过http通信来对服务端提供信息上报server去pull信息而如果你想要监控自己的业务状态那么针对各种语言都有官方或其他人写好的sdk供你使用都比较方便不需要先把数据存入数据库或日志再供zabbix-agent采集。
zabbix的客户端更多是只做上报的事情push模式。而Prometheus则是客户端本地也会存储监控数据服务端定时来拉取想要的数据。
界面来说zabbix比较陈旧而prometheus比较新且非常简洁简洁到只能算一个测试和配置平台。要想获得良好的监控体验搭配Grafana还是二者的必走之路。2.如何防止告警信息轰炸
1解决方法
1alertmanagr: prometheus可以生成告警信息但是不能直接提供告警需要使用一个外置的组件alertmanager来进行告警emailetctif优势在于收敛、支持静默、去重、可以防止告警信息的轰炸2把这条告警规则中的支持静默开启让它必须配置文件里直接改alertmanager改一个单词3.监控服务有哪4个黄金指标
1指标
4个黄金指标可以在服务级别帮助衡量终端用户体验、服务中断、业务影响等层面的问题。主要关注与以下四种类型的指标延迟通讯量错误以及饱和度
2延迟服务请求所需时间
记录用户所有请求所需的时间重点是要区分成功请求的延迟时间和失败请求的延迟时间。 例如在数据库或者其他关键祸端服务异常触发HTTP 500的情况下用户也可能会很快得到请求失败的响应内容如果不加区分计算这些请求的延迟可能导致计算结果与实际结果产生巨大的差异。除此以外在微服务中通常提倡“快速失败”开发人员需要特别注意这些延迟较大的错误因为这些缓慢的错误会明显影响系统的性能因此追踪这些错误的延迟也是非常重要的。3通讯量监控当前系统的流量用于衡量服务的容量需求
流量对于不同类型的系统而言可能代表不同的含义。例如在HTTP REST API中, 流量通常是每秒HTTP请求数
4错误监控当前系统所有发生的错误请求衡量当前系统错误发生的速率
对于失败而言有些是显式的(比如, HTTP 500错误)而有些是隐式(比如HTTP响应200但实际业务流程依然是失败的)。
对于一些显式的错误如HTTP 500可以通过在负载均衡器(如Nginx)上进行捕获而对于一些系统内部的异常则可能需要直接从服务中添加钩子统计并进行获取。5饱和度衡量当前服务的饱和度
主要强调最能影响服务状态的受限制的资源。 例如如果系统主要受内存影响那就主要关注系统的内存状态如果系统主要受限与磁盘I/O那就主要观测磁盘I/O的状态。因为通常情况下当这些资源达到饱和后服务的性能会明显下降。同时还可以利用饱和度对系统做出预测比如“磁盘是否可能在4个小时候就满了”。4.访问prometheus服务器被监控端agent服务器状态报错
(1) 报错 2原因分析
配置文件错误
3解决方法
修改配置文件被监控机器的IP 修改前 修改后 重启 成功 5.mysqld_exporter如何指定启动参数 (1 ) 参数
mysqld_exporter常用启动参数:
1 exporter版本0.10.0时
--collect.auto_increment.columns
--no-collect.auto_increment.columns2exporter版本0.10.0时
-collect.auto_increment.columns
-collect.auto_increment.columns[true|false]通过以下参数控制收集数据 通用启动参数 2SSL配置
如果MySQL服务器支持SSL则需要指定一个CA信任库来验证服务器的信任链并为SSL连接的客户端指定SSL密钥对。 要将mysqld_exporter配置为使用自定义CA证书请将以下内容添加到.my.cnf的配置文件中
ssl-ca/path/to/ca/file要指定客户端SSL密钥对请将以下内容添加到cnf中。
ssl-key/path/to/ssl/client/key
ssl-cert/path/to/ssl/client/cert仅在mysql cnf文件中支持自定义SSL配置如果在环境变量DATA_SOURCE_NAME中设置mysql服务器的数据源名称则不支持自定义SSL配置。 四、总结
Prometheus收集k8s/服务的三种方式
1Exporters指标暴露器收集节点的信息、将数据格式化或转化为promtheus可识别的http这种转化方式/镜像拉取方式
2Instrumentation 应用内置的指标暴露器 收集有内置指标暴露器的信息
3Pushgateway 收集短周期的数据
报警不成功的可能原因
各服务器之间时间不同步这样时序数据会出问题也会造成报警出问题必须写通知内容留空内容是不会发报警的修改完报警配置后记得要点右上角的保存保存配置后需要由 OK 状态变为 alerting 状态才会报警也就是说你配置保存后就已经是 alerting 状态是不会报警的grafana 与 onealert 通信有问题
各组件默认端口
node 默认端口9100
mysql默认端口9104
redis 默认端口9121
process默认端口9256
alertmanager默认端口9093
指标类型 metric type
Prometheus 使用4种方法来描述监视的指标
1Counter
计数器用于保存计数型数据如网站访问量等。2Gauge
仪表盘用于存储有着起伏特征的指标数据如空间空闲大小等。3Histogram
直方图在一段时间范围内对数据进行采样并将其计入可配置的存储中后续可通过制定区间筛选样本也可以统计样本总数最后一般将数据展示为直方图。4Summary
摘要Histogram的扩展类型用于表示一段时间内的数据采样结果通常是请求持续时间或响应大小等但它直接存储了分位数通过客户端计算然后展示出来而不是通过区间计算
作业job和实例Instance
1Instance
实例可以简单的理解为就是一个target网络客户端,实际上在多核心的服务器上一个instance就代表一个cpu核心2job
通常具有类似功能的Instance的集合称为一个job。例如一个nginx集群中所有的nginx进程。
PromQL
1内置的数据查询语言支持用户进行实时的数据查询及聚合操作2PromQL支持处理两种向量并内置提供了一组用于数据处理的函数
即使向量最近一次的时间戳上跟踪的数据指标
时间范围向量指定范围时间内的所有时间戳上的数指标
Alerts
1抓取到异常值后Prometheus 支持通过报警alert机制向用户发送反馈以便用户能够及时采取应对措施。2Prometheus server 仅负责生成报警指示具体的报警行为由另一个独立的应用程序AlertManager负责。
*报警指示由Prometheus server 基于用户提供的“报警规则”周期性计算生成
*AlertManager接收到Prometheus server发来的报警指示后基于用户定义的报警路由route向接收人receivers发送报警信息
grafana常用模板编号记录
第一部分
监控容器
推荐ID
3146
8685
10000
8588
315第二部分
监控物理机/虚拟机(linux)
推荐ID
8919
9276
监控物理机/虚拟机(windows)
推荐ID
10467
10171
2129第三部分
监控协议http/icmp/tcp/dns/
http监控某个网站
icmp监控某台机器
tcp监控某个端口
dns监控dns
推荐ID
9965