当前位置: 首页 > news >正文

三网合一网站建设程序互站网官网

三网合一网站建设程序,互站网官网,wordpress做登录,温州网站建设方案推广目录 1.Prometheus 入门1.1.Prometheus 的特点1.1.1 易于管理1.1.2 监控服务的内部运行状态1.1.3 强大的数据模型1.1.4 强大的查询语言 PromQL1.1.5 高效1.1.6.可扩展1.1.7 易于集成1.1.8 可视化1.1.9 开放性 1.2 Prometheus 的架构1.2.1.Prometheus 生态圈组件1.2.2.架构理解1… 目录 1.Prometheus 入门1.1.Prometheus 的特点1.1.1 易于管理1.1.2 监控服务的内部运行状态1.1.3 强大的数据模型1.1.4 强大的查询语言 PromQL1.1.5 高效1.1.6.可扩展1.1.7 易于集成1.1.8 可视化1.1.9 开放性 1.2 Prometheus 的架构1.2.1.Prometheus 生态圈组件1.2.2.架构理解1.2.2.1.存储计算层1.2.2.2.采集层1.2.2.3.应用层 2.Prometheus 安装2.1.安装 Prometheus Server2.1.1.解压安装包2.1.2.修改配置文件 prometheus.yml 2.2.安装 Pushgateway2.3.安装 Alertmanager2.4.安装 Node Exporter2.4.1.解压安装包2.4.2.节点分发2.4.3.设置为开机自启 2.5.安装 MySQLId Exporter2.5.1.解压安装包2.5.2.创建监控用户并授权2.5.3.配置 MySQL Exporter2.5.4.运行 MySQLId Exporter 2.6.启动 Prometheus Server、 Pushgateway 和 Alertmanager2.6.1.Prometheus Server 目录下执行启动命令2.6.2.Pushgateway 目录下执行启动命令2.6.3.Alertmanager 目录下执行启动命令2.6.4.在浏览器中查看 3.PromQL 介绍3.1.基本用法3.1.1 查询时间序列3.1.2.范围查询3.1.3.时间位移操作3.1.4.使用聚合操作3.1.5.标量和字符串3.1.6.合法的 PromQL 表达式 3.2 PromQL 操作符3.2.1.数学运算3.2.2.布尔运算3.2.3.使用集合运算符3.2.4.操作符优先级3.2.5.PromQL 聚合操作 4.Prometheus 和 Grafana 集成4.1.上传并解压4.2.启动 Grafana4.3.添加数据源 Prometheus4.4.手动创建仪表盘 Dashboard4.5.导入 DashBoard 模板4.6.页面配置告警案例 5.Prometheus 和 Alertmanager 集成5.1.配置 Prometheus 连接 Alertmanager5.2.定义告警规则5.3.配置 Alertmanager 告警路由5.4.验证告警 文章笔记来自于视频 https://www.bilibili.com/video/BV1HT4y1Z7vR相关资料可在该视频的评论区获取。 1.Prometheus 入门 1Prometheus 受启发于 Google 的 Brogmon 监控系统相似的 Kubernetes 是从 Google的 Brog 系统演变而来从 2012 年开始由前 Google 工程师在 Soundcloud 以开源软件的形式进行研发并且于 2015 年早期对外发布早期版本。其官方网址为https://prometheus.io/。 22016 年 5 月继 Kubernetes 之后成为第二个正式加入 CNCF 基金会的项目同年 6 月正式发布 1.0 版本。2017 年底发布了基于全新存储层的 2.0 版本能更好地与容器平台、 云平台配合。 3Prometheus 作为新一代的云原生监控系统目前已经有超过 650位贡献者参与到Prometheus 的研发工作上并且超过 120项的第三方集成。 1.1.Prometheus 的特点 Prometheus 是一个开源的完整监控解决方案其对传统监控系统的测试和告警模型进行了彻底的颠覆形成了基于中央化的规则计算、统一分析和告警的新模型。 相比于传统监控系统Prometheus 具有以下优点 1.1.1 易于管理 Prometheus 核心部分只有一个单独的二进制文件不存在任何的第三方依赖数据库缓存等等。唯一需要的就是本地磁盘因此不会有潜在级联故障的风险。Prometheus 基于 Pull 模型的架构方式可以在任何地方本地电脑开发环境测试环境搭建我们的监控系统。对于一些复杂的情况还可以使用 Prometheus 服务发现 (Service Discovery) 的能力动态管理监控目标。 1.1.2 监控服务的内部运行状态 Pometheus 鼓励用户监控服务的内部状态基于 Prometheus 丰富的 Client 库用户可以轻松的在应用程序中添加对 Prometheus 的支持从而让用户可以获取服务和应用内部真正的运行状态。 1.1.3 强大的数据模型 所有采集的监控数据均以指标 (metric) 的形式保存在内置的时间序列数据库当中 (TSDB)。所有的样本除了基本的指标名称以外还包含一组用于描述该样本特征的标签。如下所示 http_request_status{code200,content_path/api/path,environmentprodument} [value1timestamp1,value2timestamp2...] http_request_status{code200,content_path/api/path2,environmentprodument} [value1timestamp1,value2timestamp2...]每一条时间序列由指标名称 (Metrics Name) 以及一组标签 (Labels) 唯一标识。每条时间序列按照时间的先后顺序存储一系列的样本值。 http_request_status指标名称(Metrics Name)。{code200,content_path/api/path,environmentprodument}表示维度的标签基于这些 Labels 我们可以方便地对监控数据进行聚合过滤裁剪。[value1timestamp1,value2timestamp2...]按照时间的先后顺序 存储的样本值。 TSDB (Time Series Database) 是专门用于存储、处理和查询时间序列数据的数据库系统它相比传统关系型数据库在处理时间序列数据时通常能提供更好的性能和更高的存储效率。 1.1.4 强大的查询语言 PromQL Prometheus 内置了一个强大的数据查询语言 PromQL。 通过 PromQL 可以实现对监控数据的查询、聚合。同时 PromQL 也被应用于数据可视化如 Grafana以及告警当中。通过 PromQL 可以轻松回答类似于以下问题 在过去一段时间中 95% 应用延迟时间的分布范围预测在 4 小时后磁盘空间占用大致会是什么情况CPU 占用率前 5 位的服务有哪些(过滤) 1.1.5 高效 对于监控系统而言大量的监控任务必然导致有大量的数据产生。而 Prometheus 可以高效地处理这些数据对于单一 Prometheus Server 实例而言它可以处理 数以百万的监控指标每秒处理数十万的数据点 1.1.6.可扩展 可以在每个数据中心、每个团队运行独立的 Prometheus Sevrer。Prometheus 对于联邦集群的支持可以让多个 Prometheus 实例产生一个逻辑集群当单实例 Prometheus Server 处理的任务量过大时通过使用功能分区 (sharding) 联邦集群 (federation) 可以对其进行扩展。 1.1.7 易于集成 1使用 Prometheus 可以快速搭建监控服务并且可以非常方便地在应用程序中进行集成。目前支持JavaJMXPythonGoRuby.NetNode.js 等等语言的客户端 SDK基于这些 SDK 可以快速让应用程序纳入到 Prometheus 的监控当中或者开发自己的监控 数据收集程序。 2同时这些客户端收集的监控数据不仅仅支持 Prometheus还能支持 Graphite 这些其他的监控工具。 3同时 Prometheus 还支持与其他的监控系统进行集成GraphiteStatsdCollectedScollector muini Nagios 等。 Prometheus 社区还提供了大量第三方实现的监控数据采集支持JMXCloudWatchEC2MySQLPostgresSQLHaskellBashSNMPConsulHaproxyMesosBindCouchDBDjangoMemcachedRabbitMQRedisRethinkDBRsyslog 等等。 1.1.8 可视化 Prometheus Server 中自带的 Prometheus UI可以方便地直接对数据进行查询并且支持直接以图形化的形式展示数据。同时 Prometheus 还提供了一个独立的基于 Ruby On Rails 的 Dashboard 解决方案 Promdash。最新的 Grafana 可视化工具也已经提供了完整的 Prometheus 支持基于 Grafana 可以创建更加精美的监控图标。基于 Prometheus 提供的 API 还可以实现自己的监控可视化 UI。 1.1.9 开放性 1通常来说当我们需要监控一个应用程序时一般需要该应用程序提供对相应监控系统协议的支持因此应用程序会与所选择的监控系统进行绑定。为了减少这种绑定所带来的限制对于决策者而言要么你就直接在应用中集成该监控系统的支持要么就在外部创建单独的服 务来适配不同的监控系统。 2而对于 Prometheus 来说使用 Prometheus 的 client library 的输出格式不止支持 Prometheus 的格式化数据也可以输出支持其它监控系统的格式化数据比如 Graphite。因此你甚至可以在不使用 Prometheus 的情况下采用 Prometheus 的 client library 来让你的应用程序支持监控数据采集。 1.2 Prometheus 的架构 Prometheus 的架构如下图所示 简化后的一个实例如下 1.2.1.Prometheus 生态圈组件 Prometheus Server主服务器负责收集和存储时间序列数据client libraies应用程序代码插桩将监控指标嵌入到被监控应用程序中Pushgateway推送网关为支持 short-lived 作业提供一个推送网关exporter专门为一些应用开发的数据摄取组件—exporter例如HAProxy、StatsD、Graphite 等等Alertmanager专门用于处理 alert 的组件 1.2.2.架构理解 Prometheus 既然设计为一个维度存储模型可以把它理解为一个 OLAP 系统。 OLAP (Online Analytical Processing联机分析处理) 是一种用于快速分析多维数据的计算机处理技术专为复杂的分析查询和数据挖掘而设计。 1.2.2.1.存储计算层 Prometheus Server里面包含了存储引擎和计算引擎。Retrieval 组件取数组件它会主动从 Pushgateway 或者 Exporter 拉取指标数据。Service discovery可以动态发现要监控的目标。TSDB数据核心存储与查询。HTTP Server对外提供 HTTP 服务。 1.2.2.2.采集层 采集层分为两类一类是生命周期较短的作业还有一类是生命周期较长的作业。 短作业直接通过 API在退出时间指标推送给 Pushgateway。长作业Retrieval 组件直接从 Job 或者 Exporter 拉取数据。 1.2.2.3.应用层 应用层主要分为两种一种是 AlertManager另一种是数据可视化。 1AlertManager对接 Pagerduty是一套付费的监控报警系统。可实现短信报警、5 分钟无人 ack 打电话通知、仍然无人 ack通知值班人员 Manager、发送邮件等 2数据可视化Prometheus build-in WebUI、Grafana、其他基于 API 开发的客户端 2.Prometheus 安装 1下载 Prometheus 相关安装包的官方网址为https://prometheus.io/download/。 2这里我们将视频资料中的包上传至 /opt/software 目录下 2.1.安装 Prometheus Server Prometheus 基于 Golang 编写编译后的软件包不依赖于任何的第三方依赖。只需要下载对应平台的二进制包解压并且添加基本的配置即可正常启动 Prometheus Server。 2.1.1.解压安装包 1在 /opt/software 目录下执行下面的解压命令 # -C ../module 表示指定解压到的目标目录即 /opt/module需要提前创建好 tar -zxvf prometheus-2.29.1.linux-amd64.tar.gz -C ../module cd /opt/module2修改目录名具体命令如下 mv prometheus-2.29.1.linux-amd64 prometheus-2.29.12.1.2.修改配置文件 prometheus.yml 进入到 prometheus-2.29.1 目录下 vim /opt/module/prometheus-2.29.1/prometheus.yml在 scrape_configs 配置项下添加配置 scrape_configs:# The job name is added as a label jobjob_name to any timeseries scraped from this config.- job_name: prometheus# metrics_path defaults to /metrics# scheme defaults to http.static_configs:- targets: [192.168.101.65:9090]# 添加 PushGateway 监控配置- job_name: pushgatewaystatic_configs:- targets: [192.168.101.65:9091]labels:instance: pushgateway# 添加 Node Exporter 监控配置- job_name: node exporterstatic_configs:- targets: [192.168.101.65:9100, 192.168.101.65:9100, 192.168.101.65:9100]# 添加 MySQLId Export 监控配置- job_name: mysqlId exportstatic_configs:- targets: [192.168.101.65:9104]配置说明如下更加详细的配置说明见官方文档https://prometheus.io/docs/prometheus/latest/configuration/configuration/ global 配置块控制 Prometheus 服务器的全局配置 scrape_interval配置拉取数据的时间间隔默认为 1 分钟evaluation_interval规则验证生成 alert的时间间隔默认为 1 分钟 rule_files 配置块规则配置文件scrape_configs 配置块配置采集目标相关 prometheus 监视的目标。Prometheus 自身的运行信息可以通过 HTTP 访问所以 Prometheus 可以监控自己的运行数据 job_name监控作业的名称static_configs表示静态目标配置就是固定从某个 target 拉取数据targets 指定监控的目标 其实就是从哪儿拉取数据。Prometheus 会 从 http://192.168.101.65:9090/metrics 上拉取数据。 Prometheus 是可以在运行时自动加载配置的在启动命令中需要添加–web.enable-lifecycle。 2.2.安装 Pushgateway 1Prometheus 在正常情况下是采用 Pull 模式从产生 metric 的作业或者 exporter比如专门监控主机的 NodeExporter拉取监控数据。但是我们要监控的是 Flink on YARN 作业想要让 Prometheus 自动发现作业的提交、结束以及自动拉取数据显然是比较困难的。PushGateway 就是一个中转组件通过配置 Flink on YARN 作业将 metric 推到 PushGatewayPrometheus 再从 PushGateway 拉取就可以了。 2将 pushgateway-1.4.1.linux-amd64.tar.gz 解压到 /opt/module 目录下具体命令如下 cd /opt/software tar -zxvf pushgateway-1.4.1.linux-amd64.tar.gz -C /opt/module3修改目录名 cd /opt/module mv pushgateway-1.4.1.linux-amd64 pushgateway-1.4.12.3.安装 Alertmanager 1将 alertmanager-0.23.0.linux-amd64.tar.gz 解压到 /opt/module 目录下具体命令如下 cd /opt/software tar -zxvf alertmanager-0.23.0.linux-amd64.tar.gz -C /opt/module2修改目录名 cd /opt/module mv alertmanager-0.23.0.linux-amd64 alertmanager-0.23.02.4.安装 Node Exporter 1在 Prometheus 的架构设计中Prometheus Server 主要负责数据的收集存储并且对外提供数据查询支持而实际的监控样本数据的收集则是由 Exporter 完成。因此为了能够监控到某些东西如主机的 CPU 使用率我们需要使用到 Exporter。Prometheus 周期性的从 Exporter 暴露的 HTTP 服务地址通常是 /metrics拉取监控样本数据。 Exporter 可以是一个相对开放的概念其可以是一个独立运行的程序独立于监控目标以外也可以是直接内置在监控目标中。只要能够向 Prometheus 提供标准格式的监控样本数据即可。 为了能够采集到主机的运行指标如 CPU、内存、磁盘等信息。我们可以使用 Node Exporter。Node Exporter 同样采用 Golang 编写并且不存在任何的第三方依赖只需要下载解压即可运行。可以从 https://prometheus.io/download/ 获取最新的 Node Exporter 版本的二进制包。 2.4.1.解压安装包 1将 node_exporter-1.2.2.linux-amd64.tar.gz 解压到 /opt/module 目录下具体命令如下 cd /opt/software tar -zxvf node_exporter-1.2.2.linux-amd64.tar.gz -C /opt/module2修改目录名 cd /opt/module mv node_exporter-1.2.2.linux-amd64 node_exporter-1.2.23启动并通过页面查看是否成功执行命令 cd /opt/module/node_exporter-1.2.2 ./node_exporter浏览器中输入 http://192.168.101.65:9100/metrics可以看到当前 Node Exporter 获取到的当前主机的所有监控数据 2.4.2.节点分发 1将解压后的目录分发到要监控的节点 xsync node_exporter-1.2.22修改 Prometheus 配置文件 prometheus.yml在 2.1.2 的时候已经添加过配置 - targets: [192.168.101.65:9100, 192.168.101.65:9100, 192.168.101.65:9100]2.4.3.设置为开机自启 1创建 service 文件 sudo vim /usr/lib/systemd/system/node_exporter.service[Unit] Descriptionnode_export Documentationhttps://github.com/prometheus/node_exporter Afternetwork.target [Service] Typesimple Userroot ExecStart /opt/module/node_exporter-1.2.2/node_exporter Restarton-failure [Install] WantedBymulti-user.target2分发文件 sudo /home/root/bin/xsync /usr/lib/systemd/system/node_exporter.service3设为开机自启动所有机器都执行 sudo systemctl enable node_exporter.service4启动服务所有机器都执行 sudo systemctl start node_exporter.service2.5.安装 MySQLId Exporter 2.5.1.解压安装包 1将 mysqld_exporter-0.13.0.linux-amd64.tar.gz 解压到 /opt/module 目录下具体命令如下 cd /opt/software tar -zxvf mysqld_exporter-0.13.0.linux-amd64.tar.gz -C /opt/module2修改目录名 cd /opt/module mv mysqld_exporter-0.13.0.linux-amd64 mysqld_exporter-0.13.0选择版本的下载地址为https://github.com/prometheus/mysqld_exporter/releases/tag/v0.13.0。 2.5.2.创建监控用户并授权 1在 Linux 终端中使用以下命令以 root 或具有管理员权限的用户登录 MySQL输入密码后进入 MySQL 命令行界面确保已经安装 MySQL mysql -u root -p2创建一个专用于监控的用户例如 monitor_user并授予最小必要的权限通常只需 PROCESS、REPLICATION CLIENT、SELECT 等权限 -- 创建用户 CREATE USER monitor_userlocalhost IDENTIFIED BY 123456; -- 授权 GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO monitor_userlocalhost; -- 刷新权限 FLUSH PRIVILEGES; -- 验证权限 SHOW GRANTS FOR monitor_userlocalhost;2命令说明 monitor_userlocalhost限制用户只能从本地连接。如需远程监控替换为 ‘%’如 monitor_user%但需确保配置防火墙和 MySQL 的 bind-address。权限根据监控工具需求调整例如 PROCESS查看活跃线程如 SHOW PROCESSLIST。REPLICATION CLIENT检查主从复制状态。SELECT查询性能模式如 information_schema。 2.5.3.配置 MySQL Exporter 1创建 /etc/.mysqld_exporter.cnf 文件存储 MySQL 连接信息 sudo vim /etc/.mysqld_exporter.cnf内容如下 [client] usermonitor_user password123456 hostlocalhost port33062创建 /etc/systemd/system/mysql_exporter.service sudo vim /etc/systemd/system/mysql_exporter.service内容如下 [Unit] DescriptionPrometheus MySQL Exporter # 服务描述 Afternetwork.target # 确保在网络就绪后启动[Service] Typesimple # 服务类型为简单进程 Restartalways # 崩溃后自动重启 ExecStart/opt/module/mysqld_exporter-0.13.0/mysqld_exporter \ # 主程序路径--config.my-cnf/etc/.mysqld_exporter.cnf \ # MySQL 连接配置文件--collect.global_status \ # 启用全局状态指标收集--collect.info_schema.innodb_metrics \ # 启用 InnoDB 指标收集--collect.slave_status \ # 启用主从复制状态收集--web.listen-address:9104 # 监听端口 9104[Install] WantedBymulti-user.target # 在系统多用户模式下启用该服务2.5.4.运行 MySQLId Exporter 1依次执行如下命令 # 重新加载 systemd 的配置文件 sudo systemctl daemon-reload # 启用服务的开机自启动 sudo systemctl enable mysql_exporter # 立即启动名为 mysql_exporter 的服务 sudo systemctl start mysql_exporter # 检查服务状态 sudo systemctl status mysql_exporter2在浏览器中输入http://192.168.101.65:9104/metrics来查看访问指标接口 2.6.启动 Prometheus Server、 Pushgateway 和 Alertmanager 2.6.1.Prometheus Server 目录下执行启动命令 cd /opt/module/prometheus-2.29.1 # 后台执行 nohup ./prometheus --config.fileprometheus.yml ./prometheus.log 21 # 查看是否启动成功 ps -ef | grep prometheus2.6.2.Pushgateway 目录下执行启动命令 cd /opt/module/pushgateway-1.4.1 # 后台执行 nohup ./pushgateway --web.listen-address :9091 ./pushgateway.log 21 2.6.3.Alertmanager 目录下执行启动命令 cd /opt/module/alertmanager-0.23.0 nohup ./alertmanager --config.filealertmanager.yml ./alertmanager.log 21 在浏览器中输入 http://192.168.101.65:9093/出现以下页面说明启动成功 2.6.4.在浏览器中查看 浏览器中输入 http://192.168.101.65:9090并选择 Status - Targets此时发现 prometheus、pushgateway、node exporter、mysqlId export都是 up 状态表示安装启动成功 3.PromQL 介绍 1Prometheus 通过指标名称 (metrics name) 以及对应的一组标签labelset唯一定义一条时间序列。指标名称反映了监控样本的基本标识而 label 则在这个基本特征上为采集到的数据提供了多种特征维度。用户可以基于这些特征维度过滤、聚合、统计从而产生新的计算后的一条时间序列。 2PromQL (Prometheus Query Language) 是 Prometheus 内置的数据查询语言其提供对时间序列数据丰富的查询聚合以及逻辑运算能力的支持。并且被广泛应用在 Prometheus 的日常应用当中包括对数据查询、可视化、告警处理当中。可以这么说PromQL 是 Prometheus 所有应用场景的基础理解和掌握 PromQL 是 Prometheus 入门的第一课。 3关于 PromQL 更加详细的信息见官方文档 https://prometheus.io/docs/prometheus/latest/querying/basics/。 3.1.基本用法 3.1.1 查询时间序列 1当 Prometheus 通过 Exporter 采集到相应的监控指标样本数据后我们就可以通过 PromQL 对监控样本数据进行查询。当我们直接使用监控指标名称查询时可以查询该指标下的所有时间序列。如 prometheus_http_requests_total等同于 prometheus_http_requests_total{}该表达式会返回指标名称为 prometheus_http_requests_total 的所有时间序列 2PromQL 还支持用户根据时间序列的标签匹配模式来对时间序列进行过滤目前主要支持两种匹配模式完全匹配和正则匹配。 PromQL 支持使用 和 ! 两种完全匹配模式 通过使用 labelvalue 可以选择那些标签满足表达式定义的时间序列反之使用 label!value 则可以根据标签匹配排除时间序列 例如如果我们只需要查询所有 prometheus_http_requests_total 时间序列中满足标签 instance 为 localhost:9090 的时间序列则可以使用如下表达式 prometheus_http_requests_total{instancelocalhost:9090}反之使用 instance!localhost:9090 则可以排除这些时间序列 prometheus_http_requests_total{instance!localhost:9090}PromQL还可以支持使用正则表达式作为匹配条件多个表达式之间使用 | 进行分离 使用 label~regx 表示选择那些标签符合正则表达式定义的时间序列反之使用 label!~regx 进行排除 例如如果想查询多个环节下的时间序列序列可以使用如下表达式 prometheus_http_requests_total{environment~staging|testing|development,method!GET}排除用法 prometheus_http_requests_total{environment!~staging|testing|development,method!GET}3.1.2.范围查询 1直接通过类似于 PromQL 表达式 httprequeststotal 查询时间序列时返回值中只会包含该时间序列中的最新的一个样本值这样的返回结果我们称之为瞬时向量。而相应的这样的表达式称之为瞬时向量表达式。 2而如果我们想过去一段时间范围内的样本数据时我们则需要使用区间向量表达式。区间向量表达式和瞬时向量表达式之间的差异在于在区间向量表达式中我们需要定义时间选择的范围时间范围通过时间范围选择器 [] 进行定义。 例如通过以下表达式可以选择最近 5 分钟内的所有样本数据 prometheus_http_requests_total{}[5m]该表达式将会返回查询到的时间序列中最近 5 分钟的所有样本数据 通过区间向量表达式查询到的结果我们称为区间向量。 除了使用 m 表示分钟以外PromQL 的时间范围选择器支持其它时间单位 s - 秒m - 分钟h - 小时d - 天w - 周y - 年 3.1.3.时间位移操作 1在瞬时向量表达式或者区间向量表达式中都是以当前时间为基准 prometheus_http_requests_total{}瞬时向量表达式选择当前最新的数据prometheus_http_requests_total{}[5m]区间向量表达式选择以当前时间为基准5 分钟内的数据 2而如果我们想查询5 分钟前的瞬时样本数据或昨天一天的区间内的样本数据呢这个时候我们就可以使用位移操作位移操作的关键字为 offset。 可以使用 offset 时间位移操作 prometheus_http_requests_total{} offset 5m prometheus_http_requests_total{}[1d] offset 1d3.1.4.使用聚合操作 一般来说如果描述样本特征的标签 (label) 在并非唯一的情况下通过 PromQL 查询数据会返回多条满足这些特征维度的时间序列。而 PromQL 提供的聚合操作可以用来对这些时间序列进行处理形成一条新的时间序列 # 查询系统所有 http 请求的总量 sum(prometheus_http_requests_total) # 按照 mode 计算主机 CPU 的平均使用时间 avg(node_cpu_seconds_total) by (mode) # 按照主机查询各个主机的 CPU 使用率 sum(sum(irate(node_cpu_seconds_total{mode!idle}[5m])) / sum(irate(node_cpu_seconds_total [5m]))) by (instance)3.1.5.标量和字符串 除了使用瞬时向量表达式和区间向量表达式以外PromQL 还直接支持用户使用标量 (Scalar) 和字符串 (String)。 标量 (Scalar)一个浮点型的数字值没有时序。 例如 10需要注意的是表达式 count(prometheus_http_requests_total) 返回的数据类型依然是瞬时向量。用户可以通过内置函数 scalar() 将单个瞬时向量转换为标量。字符串 (String)一个简单的字符串值。直接使用字符串作为 PromQL 表达式则会直接返回字符串。例如 this is a string these are unescaped: \n \\ \t these are not unescaped: \n \t3.1.6.合法的 PromQL 表达式 所有的 PromQL 表达式都必须至少包含一个指标名称例如 http_request_total或者一个不会匹配到空字符串的标签过滤器例如 {code”200”}。因此以下两种方式均为合法的表达式 prometheus_http_requests_total # 合法 prometheus_http_requests_total{} # 合法 {methodget} # 合法而如下表达式则不合法 {job~.*} # 不合法同时除了使用 {labelvalue} 的形式以外我们还可以使用内置的 __name__ 标签来指定监控指标名称 {__name__~prometheus_http_requests_total} # 合法 {__name__~node_disk_bytes_read|node_disk_bytes_written} # 合法3.2 PromQL 操作符 使用 PromQL 除了能够方便的按照查询和过滤时间序列以外PromQL 还支持丰富的操作符用户可以使用这些操作符对进一步的对事件序列进行二次加工。这些操作符包括数学运算符逻辑运算符布尔运算符等等。 3.2.1.数学运算 PromQL 支持的所有数学运算符有加法、-减法 、*乘法、/除法、%求余、^幂运算。 3.2.2.布尔运算 1Prometheus 支持以下布尔运算符有、相等、!不相等、大于、小于、大于等于、小于等于。 2使用 bool 修饰符改变布尔运算符的行为。布尔运算符的默认行为是对时序数据进行过滤。而在其它的情况下我们可能需要的是真正的布尔结果。例如只需要 知道当前模块的 HTTP 请求量是否1000如果大于等于1000 则返回 1true否则返回 0false。这时可以使 用 bool 修饰符改变布尔运算的默认行为。 例如 prometheus_http_requests_total bool 1000使用 bool 修改符后布尔运算不会对时间序列进行过滤而是直接依次瞬时向量中的各个样本数据与标量的比较结果 0 或者 1。从而形成一条新的时间序列。 prometheus_http_requests_total{code200,handlerquery,instancelocalhost:9090,jobprometheus,methodget} 1 prometheus_http_requests_total{code200,handlerquery_range,instancelocalhost:9090,jobprometheus,methodget} 0同时需要注意的是如果是在两个标量之间使用布尔运算则必须使用 bool 修饰符例如 2 bool 2 # 结果为 13.2.3.使用集合运算符 1使用瞬时向量表达式能够获取到一个包含多个时间序列的集合我们称为瞬时向量。通过集合运算可以在两个瞬时向量与瞬时向量之间进行相应的集合操作。目前Prometheus 支持以下集合运算符 and并且or或者unless排除 2举例说明如下 vector1 and vector2 会产生一个由 vector1 的元素组成的新的向量。该向量包含vector1 中完全匹配 vector2 中的元素组成。vector1 or vector2 会产生一个新的向量该向量包含 vector1 中所有的样本数据以及 vector2 中没有与 vector1 匹配到的样本数据。vector1 unless vector2 会产生一个新的向量新向量中的元素由 vector1 中没有与vector2 匹配的元素组成。 3.2.4.操作符优先级 对于复杂类型的表达式需要了解运算操作的运行优先级。例如查询主机的 CPU 使用率可以使用表达式 100 * (1 - avg (irate(node_cpu_seconds_total{modeidle}[5m])) by(job))其中 irate 是 PromQL 中的内置函数用于计算区间向量中时间序列每秒的即时增长率。在 PromQL 操作符中优先级由高到低依次为 ^*, /, %, -, !, , , and, unlessor 3.2.5.PromQL 聚合操作 1Prometheus 还提供了下列内置的聚合操作符这些操作符作用域瞬时向量。可以将瞬时表达式返回的样本数据进行聚合形成一个新的时间序列。 sum求和min最小值max最大值avg平均值stddev标准差stdvar标准差异count计数count_values对 value 进行计数bottomk后 n 条时序topk前 n 条时序quantile分布统计 2使用聚合操作的语法如下 aggr-op([parameter,] vector expression) [without|by (label list)]3其中只有 count_values、quantile、topk、bottomk 支持参数 (parameter)。without 用于从计算结果中移除列举的标签而保留其它标签。by 则正好相反结果向量中只保留列出的标签其余标签则移除。通过 without 和 by 可以按照样本的问题对数据进行聚合。例如 sum(prometheus_http_requests_total) without (instance)等价于 sum(prometheus_http_requests_total) by (code,handler,job,method)如果只需要计算整个应用的 HTTP 请求总量可以直接使用表达式 sum(prometheus_http_requests_total)4count_values 用于时间序列中每一个样本值出现的次数。count_values 会为每一个唯一的样本值输出一个时间序列并且每一个时间序列包含一个额外的标签。 例如 count_values(count, prometheus_http_requests_total)5topk 和 bottomk 则用于对样本值进行排序返回当前样本值前 n 位或者后 n 位的时间序列。获取 HTTP 请求数前 5 位的时序样本数据可以使用表达式 topk(5, prometheus_http_requests_total)6quantile 用于计算当前样本数据值的分布情况 quantile(φ, express)其中 0 ≤ φ ≤ 1。例如当 φ 为 0.5 时即表示找到当前样本数据中的中位数 quantile(0.5, prometheus_http_requests_total)4.Prometheus 和 Grafana 集成 Grafana 是一款采用 Go 语言编写的开源应用主要用于大规模指标数据的可视化展现是网络架构和应用分析中最流行的时序数据展示工具目前已经支持绝大部分常用的时序数据库。下载地址https://grafana.com/grafana/download 4.1.上传并解压 将 grafana-8.1.2.linux-amd64.tar.gz 上传至 /opt/software/ 目录下并解压 tar -zxvf grafana-enterprise-8.1.2.linux-amd64.tar.gz -C /opt/module/4.2.启动 Grafana cd /opt/module/grafana-8.1.2/bin nohup ./grafana-server web ./grafana.log 21 在浏览器中输入 http://192.168.101.65:3000默认用户名和密码均为 admin 4.3.添加数据源 Prometheus 点击配置点击 Data Sources 点击添加按钮 找到 Prometheus点击 Select 配置 Prometheus Server 地址 http://192.168.101.65:9090 点击下方的 Save test 出现绿色的提示框表示与 Prometheus 正常联通 点击 Back 返回即可可以看到 Data Sources 页面出现了添加的 Prometheus 4.4.手动创建仪表盘 Dashboard 1点击左边栏的 “”号选择 Dashboard 添加新的仪表板点击 Add an empty panel 配置仪表板监控项 一个仪表板可以配置多个监控项添加其他监控项 2保存并查看当前仪表盘监控的指标的操作如下 3新增 row 的操作如下 在当前 row 下新建名称为节点文件最大值的 panel显示效果如下 4修改 row 信息的操作如下 panel 与 row 的关系一个 row 可以包含多个 panel。 4.5.导入 DashBoard 模板 1手动添加 Dashboard 比较繁琐Grafana 社区鼓励用户分享 Dashboard通过官方网站 可以找到大量可直接使用的 Dashboard 模板。Grafana 中所有的 Dashboard 通过 JSON 进行共享下载并且导入这些 JSON 文件就可以直接使用这些已经定义好的 Dashboard。 2例如下载 MySQLId Exporter 模板 进入 https://grafana.com/dashboards 页面后搜索 MySQL 选择自己需要的 dashBoard下载 DashBoard 模板一个 json 格式的文件 3导入下载的模板 4查看对应的监控指标 4.6.页面配置告警案例 1以 MySQL 中的超过慢查询时间阈值的 SQL 语句数量为例先配置监控指标 mysql_global_status_slow_queries 的告警策略 2通过 mysql -u root -p 进入 MySQL 命令行然后执行如下命令来模拟慢查询 -- 查询慢查询时间阈值默认10s SHOW VARIABLES LIKE long_query_time; -- 设置开启 SET GLOBAL slow_query_log ON; -- 模拟慢查询耗时 12s SELECT SLEEP(12);3观察监控指标的 mysql_global_status_slow_queries 变化 注意上面只是配置了告警策略当监控的指标触发了告警策略时并不会真正的做任何通知。如果想要达到告警通知效果需要接入告警服务。 5.Prometheus 和 Alertmanager 集成 5.1.配置 Prometheus 连接 Alertmanager 在 prometheus.yml 中配置 Alertmanager 的地址 alerting:alertmanagers:- static_configs:- targets: [192.168.101.65:9093] # Alertmanager 地址- scrape_configs:# 添加 Alertmanager 监控配置- job_name: alertmanagerstatic_configs:- targets: [192.168.101.65:9093]labels:instance: Alertmanager5.2.定义告警规则 1在 Alertmanager 的告警规则文件例如 /opt/module/alertmanager-0.23.0/rules/mysql_rules.yml中配置指标 mysql_global_status_slow_queries 告警规则MySQL 实例的慢查询速率持续 1 分钟超过 2 条/秒。 groups: - name: mysql-slow-query-alertsrules:- alert: MySQLTooManySlowQueries# 关键修改使用 increase() 计算1分钟内的慢查询增量expr: increase(mysql_global_status_slow_queries[1m]) 2for: 1m # 持续 1 分钟满足条件才触发labels:severity: warningservice: mysql # 附加服务标签便于分类annotations:summary: MySQL 慢查询过多 (实例: {{ $labels.instance }})description: MySQL 实例 {{ $labels.instance }} 在最近 1 分钟内检测到 {{ $value | humanize }} 条慢查询超过阈值2 条/分钟。注意为了方便观察告警效果上述规则可能与实际有出入 2在 prometheus.yml 中加载规则文件 rule_files:- /opt/module/alertmanager-0.23.0/rules/mysql_rules.yml3重启 Prometheus 服务。 5.3.配置 Alertmanager 告警路由 1在 alertmanager.yml 中进行如下配置 global:# 全局配置会被所有接收器继承除非被覆盖resolve_timeout: 5m # 当警报状态从 firing 变为 resolve 后等待多久才声明已解决# SMTP 邮件服务器配置smtp_from: xxxxxx # 发件人邮箱smtp_smarthost: smtp.163.com:25 # SMTP 服务器地址和端口smtp_auth_username: xxxxxx # SMTP 认证用户名smtp_auth_password: xxxxxx # SMTP 认证密码smtp_require_tls: true # 是否启用 TLS 加密templates:- /opt/module/alertmanager-0.23.0/templates/*.tmpl# 路由树配置 route:group_by: [alertname]group_wait: 30sgroup_interval: 5mrepeat_interval: 3hreceiver: email-notificationsreceivers: - name: email-notificationsemail_configs:- to: 2642290139qq.com # 收件人地址send_resolved: true # 是否发送解决通知html: {{ template email.default.html . }}headers:Subject: [{{ .Status | toUpper }}] {{ .CommonLabels.alertname }} ({{ .CommonLabels.severity }}) 2在目录 /opt/module/alertmanager-0.23.0/templates 下配置邮件模板 {{ define email.default.html }} !DOCTYPE html html headtitle{{ .CommonLabels.alertname }}/titlestylebody { font-family: Arial, sans-serif; line-height: 1.6; color: #333; }.header { background-color: #f8f8f8; padding: 20px; border-bottom: 1px solid #e7e7e7; }.content { padding: 20px; }.alert { margin-bottom: 20px; border-left: 4px solid; padding: 10px 15px; }.critical { border-color: #dc3545; background-color: #f8d7da; }.warning { border-color: #ffc107; background-color: #fff3cd; }.footer { margin-top: 20px; padding: 20px; font-size: 0.8em; color: #666; text-align: center; }table { width: 100%; border-collapse: collapse; margin: 15px 0; }th, td { padding: 8px; text-align: left; border-bottom: 1px solid #ddd; }/style /head bodydiv classheaderh1{{ .CommonLabels.alertname }}/h1p状态: {{ .Status | toUpper }}/p/divdiv classcontent{{ if eq .Status firing }}div classalert {{ if eq .CommonLabels.severity critical }}critical{{ else }}warning{{ end }}h2告警详情/h2p{{ .Annotations.summary }}/pp{{ .Annotations.description }}/p/div{{ else }}div classalert styleborder-color: #28a745; background-color: #d4edda;h2问题已解决/h2/div{{ end }}h3标签信息/h3tabletrth标签名/thth值/th/tr{{ range .CommonLabels.SortedPairs }}trtd{{ .Name }}/tdtd{{ .Value }}/td/tr{{ end }}/table{{ if .CommonAnnotations }}h3附加信息/h3tabletrth注释名/thth值/th/tr{{ range .CommonAnnotations.SortedPairs }}trtd{{ .Name }}/tdtd{{ .Value }}/td/tr{{ end }}/table{{ end }}/divdiv classfooterp此邮件由 Alertmanager 自动发送/p/div /body /html {{ end }}3重启 Alertmanager。 5.4.验证告警 1通过 mysql -u root -p 进入 MySQL 命令行然后执行 4 次下面的命令来模拟慢查询 -- 模拟慢查询耗时 12s SELECT SLEEP(12);-- 模拟慢查询耗时 12s SELECT SLEEP(12);-- 模拟慢查询耗时 12s SELECT SLEEP(12);-- 模拟慢查询耗时 12s SELECT SLEEP(12);2在 Prometheus 页面中查看该告警 3在 Alertmanager 页面中查看该告警 4收到的告警邮件如下
http://www.w-s-a.com/news/819870/

相关文章:

  • 内网网站建设方面政策id97网站怎么做的
  • 福州企业建站系统七米网站建设
  • 长春seo建站北京做机床的公司网站
  • 网站维护具体做啥如何开发wap网站
  • 公司网站设计费计入什么科目潍坊公司网站制作
  • 拖拽式网站开发模具钢东莞网站建设
  • 彩票娱乐网站建设模块化网站开发
  • 孝感网站设计用自己的名字设计头像
  • 高明网站建设哪家好深圳vi设计公司全力设计
  • 工程技术cpu游戏优化加速软件
  • 一起做网店网站入驻收费wordpress 自定义评论样式
  • 深圳高端网站建设公司排名app软件开发sh365
  • 泰州网站整站优化惠州做网站多少钱
  • 做博客网站的php代码一建论坛建工教育网
  • 邢台网站制作费用单页营销网站后台
  • 红色网站建设的比较好的高校用vs2010做购物网站
  • 网站域名备案号查询网页设计实验报告总结模板
  • 什么软件 做短视频网站好大型论坛网站建设
  • 视频网站用什么cms网络运营与维护主要做什么
  • 设计网站主页要多少钱赣州制作网站百度
  • 什么叫高端网站定制网站收录大幅度下降
  • 汝城县网站建设公司aspx网站实例
  • 专业微网站营销diywap手机微网站内容管理系统
  • 盗版做的最好的网站温州logo设计公司
  • 网站建设 中山南充微网站建设
  • 企业网站更新什么内容免费设计软件下载
  • 夏天做哪些网站能致富做网站怎么每天更新内容
  • 个人网站的设计与开发网站建设流程中哪些部分比较重要
  • 招聘网站如何建设中国计算机网络公司排名
  • 工信部网站备案规定厦门在线制作网站