监控工具部署
少于1分钟
一 概述
本文主要记录下如何使用 Prometheus +Grafana 基于kubernetes容器搭建对各种服务的性能监控
prometheus 官网地址:https://prometheus.io/
Github 地址:https://github.com/prometheus/prometheus
Grafana 官网地址 https://grafana.com/
Grafana dashboards模板地址 https://grafana.com/grafana/dashboards/
架构图
监控组件部署
prometheus-server部署
部署说明:
- 监控数据持久化,建议修改部署文件中 - mountPath: /prometheus到nfs 等持久化存储
- 配置引用configMap,便于维护
- namespace命名空间自定义
- 配置修改参见官网地址:https://prometheus.io/
- 容器pod 节点node采用自动发现功能
- 请注意,Prometheus要求主机时间和浏览器时间一致,如不一致请同步: ntpdate time1.aliyun.com
部署文件:
对部分标红处修改实际需要值、配置持久化存储,使用kubectl apply -f xxx.yaml进行部署
自动发现配置说明
服务发现机制
prometheus默认是采用pull方式定时去目标拉取数据,每个被抓取目标向prometheus提供一个http接口,prometheus需要知道向哪个地址拉取数据,通过prometheus.yml中scrape_configs定义的job来实现目标的定义.这样就无法感知到新加入的变更信息.
通过daemonset实现在k8s环境中,当有新节点加入node-exporter和cadvisor的自动安装.
如果是传统方式,需要手动将新地址加入,并重启prometheus.
动态服务发现能够自动发现集群中的新端点,并加入配置中,通过服务发现,prometheus能够查询到需要监控的Target列表,然后轮询这个Target获取监控数据.
添加数据源的方法有很多种,常见的有静态配置和服务发现配置.
prometheus支持多种服务发现,常见的有:
kubernetes_sd_configs: kubernetes服务发现,让prometheus动态发现kubernetes中被监控的目标
static_configs: 静态服务发现,基于prometheus配置文件指定监控目标
dns_sd_configs: DNS服务发现监控目标
consul_sd_configs: Consul服务发现,基于consul服务动态发现监控目标
file_sd_configs: 基于指定的文件事先服务发现,prometheus定时读取文件如果发生变化则加载新目标
标签重写
prometheus的relabeling(标签重写)可以在抓取到目标实例之前把目标实例的元数据标签动态修改,动态添加或覆盖.
Prometheus在加载Target成功之后,在Taret实例中,都包含一些Metadata标签信息,默认标签有:
标签 | 含义 |
---|---|
_address_ | 以:格式显示targets的地址 |
_scheme_ | 采用的目标服务地址的Scheme形式,HTTP或者HTTPS |
_metrics_path_ | 采用的目标服务的访问路径 |
修改标签的时机:
relabel_configs: 在抓取数据之前,可以使用relabel_configs添加一些标签,也可以值采集特定目标或过滤目标
metric_relabel_configs: 在抓取数据之后,可以使用metric_relabel_configs做最后的重新标记和过滤
- label
source_labels: 源标签,没有经过relabel处理之前的名字
target_labels: 通过action处理之后的新标签名字
regex: 正则表达式,匹配源标签
replacement: 通过分组替换后标签(target_label)对应的值
-
action
标签 含义
replace 替换标签值,根据regex正则匹配到源标签的值,使用replacement来引用表达式匹配的分组
keep 满足regex正则条件的实例进行采集,把source_labels中没有匹配到regex正则内容的target实例丢弃,只采集匹配成功的实例
drop 满足regex正则匹配条件的不采集,把source_labels中匹配到regex正则内容的Target丢弃,只采集没有匹配到的实例
Hashmod 使用Hashmod计算source_labels的Hash值并进行对比,基于自定义的模数取模,以实现对目标进行分类,重新赋值等功能
labelmap 匹配regex所有标签名称,然后赋值匹配标签的值进行分组,通过replacement分组引用替代
labelkeep 匹配regex所有标签名称,其他不匹配的标签都将从标签集中删除
labeldrop 匹配regex所有标签名称,其他匹配的标签都将从标签集中删除
-
常见发现类型(如上配置)
-
node
-
service
-
endpoint
-
pod
注意:监控目标pod中需要配置prometheus注解
-
配置nacos采集应用指标埋点
修改nacos 中对应环境的配置列表,找到DataId 为public记录,编辑配置,设置 seeyon.system.metric 为true,重新部署应用生效。
grafana部署
使用kubectl apply -f xxx.yaml进行部署
alertmanager 部署
告警方式及规则
- 命名空间自定义
- 告警方式自定义
- 告警规则自定义 参照https://prometheus.io/docs/alerting/latest/configuration/
对部分标红处修改实际需要值,使用kubectl apply -f xxx.yaml进行部署
prometheus-pushgateway 部署
使用kubectl apply -f xxx.yaml进行部署
node-exporter部署
- node-exporter
可配置自动发现,也可以使用demonset方式
redis-exporter部署
对部分标红处修改实际需要值,使用kubectl apply -f xxx.yaml进行部署
kafka-exporter部署
对部分标红处修改实际需要值,使用kubectl apply -f xxx.yaml进行部署
mysql-exporter部署
对部分标红处修改实际需要值,使用kubectl apply -f xxx.yaml进行部署
grafana配置
准备配置文件
前往http://gitlab.seeyon.com/a9/devops/a9c_install.git下载最新配置文件,克隆a9c_install仓库,进入monitor/grafana-dashboards目录,该目录下的文件为grafana监控大盘配置文件。
登录grafana
默认用户名:admin 密码:admin
配置数据源
进入系统,点击配置->数据源->添加数据源。
数据源类型选择Prometheus,在URL中填入prometheus-server地址。
导入仪表盘
进入如下界面,导入第一步准备好的grafana大盘配置文件。
选择上一步配置的数据源。
查看V8应用监控
点击应用名称进入应用指标明细界面。