Prometheus
▶ 架构图

▶ 数据类型
数据类型| 能否增加和减少| 用途| 数据存储
---|---|---|---
Counter(计数器)| 只能增加,重置为 0| 计数,例如请求总数、错误总数等| 累积总量
Gauge(测量值)| 可以增加和减少| 测量瞬时值,例如 CPU 使用率、温度等| 当前值
Histogram(直方图)| 记录分布区间| 持续时间、文件大小等的分布| 桶、总数、总和
Summary(摘要)| 记录分位数| 精确的分位数计算(如 90th 百分位)| 分位数、总数、总和
▶ prometheus部署
• 部署node_exporter收集节点资源信息
vim node_exporter.yaml
Prometheus部署yaml文件--->1
• RBAC授权,创建sa账号,让它有比较大权限获取k8s相关资源信息
vim prometheus-rbac.yaml
Prometheus部署yaml文件--->2
• 创建数据持久化
vim prometheus-pvc.yaml
Prometheus部署yaml文件--->3
• 部署端口暴露服务
vim prometheus-svc.yaml
Prometheus部署yaml文件--->4
• 部署configmap配置
vim prometheus-configmap.yaml
Prometheus部署yaml文件--->5
• 部署prometheus应用
vim prometheus-deploy.yaml
Prometheus部署yaml文件--->6
▶ 监控远程服务
• 安装go环境
wget https://golang.google.cn/dl/go1.23.1.linux-amd64.tar.gz
tar xvzf go1.23.1.linux-amd64.tar.gz -C /usr/local/
配置环境变量:
vim /etc/profile
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
export GOPATH=/opt/go
export PATH=$PATH:$GOPATH/BIN
source /etc/profile
go version
• 编译go源码
解决依赖下载速度过慢:
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
进入源码目录:
cd /tmp/client_golang-1.20.4/examples/random
编译源码:
go build
执行random程序查看生成监控数据:
./ random --listen-address=:8080
浏览器打开对应的服务器ip的8080端口,就可以看到监控数据了
▶ 配置prometheus的config文件,显示到上面
kubectl -n kube-mon edit cm prometueus-configmap
…………
…………
scrape_configs:
- job_name: "go_service"
static_configs:
- targets: ['xxx.xxx.xx.x:8080']
▶ 标签操作
• 缩进示例
- job_name: 'go_service"
statuc_configs:
- targets: ['xxx.xx.xx.x:8080']
relabel_configs:
- action: replace
source_labels: []
target_label: xxx
replacement: "xxx"
• 替换标签
将现有标签替换为新值:
- action: replace
source_labels: [__address__]
target_label: my_instance
• 添加新标签
创建一个新标签并赋予固定值:
- action: replace
source_labels: []
target_label: xxx
replacement: "xx"
• 删除标签
从抓取目标中删除指定标签:
- action: labeldrop
regex: __metrics_path__
• 保留标签
保留匹配到的标签:
- action: labelkeep
reges: __.* #以两条下划线打头的标签
• 重命名标签
将一个标签重命名为另一个名称
- action: replace
source_labels: [old_label]
target_label: new_label
• 通过正则表达式过滤
- action: replace
source_labels: [__address__]
target_label: new_address
regex: (.*):80 #正则匹配
replacement: $1:8080 #将端口80替换为8080
• 合并标签值
- action: replace
source_labels: [label1,label2]
target_label: new_label
• 条件修改标签
- action: replace
source_labels: [__address__,__meta_kubernetes_xxxxx]
target_label: __address__
reges: ([^:]+)(?::\d+)?;(\d+) ?:表示改括号不参与下面的$引用
replacement: $1:$2
address为172.23.4.40:80,后面的值为8080
$1为172.23.4.40 $2为8080
最终address将会被替换为172.23.4.40:8080
• 标签的重新映射labelmap
对标签进行优化处理,批量地重命名标签
- regex: 'app_(.*) #匹配以'app_'开头的标签
action: labelmap
replacement: 'application_$1' #把'app_'替换为'application_'
▶ 部署Granfana(监控指标可视化)
• 部署yaml文件
vim granfa.yaml
Prometheus部署yaml文件--->7
• 访问Granfana:http://节点ip:30300,进入界面操作
1.Granfana对接Prometheus:
配置对接,点击Data Sources
点击Add new data source-->选择prometheus-->填写名字,填写prometheus的访问地址,其他默认
2.对接数据源之后,添加模板文件
模板下载链接:https://grafana.com/grafana/dashboards/
试验使用模板:Node Exporter Full and K8s containers | Grafana Labs
导入模板文件json
3.修改个别模块里面的PQL语句
▶ PromeQL语句
• 示例
模板:指标名{标签key="标签值",label2!="xxx"}[时间范围] 运算符 阈值
1.度量指标:node_load1(节点1分钟的负载情况)
2.[1m]捕获的是前面的值,在多长时间段的一个取值
3.node_load1{instance=~"k8s-master.."}
显示标签是k8s-master开头的节点数据情况
4.avg_over_time(node_load1{instance="k8s-master01"}[3m])
显示的是过去3分钟,节点k8s-master01的1分钟的平均负载
5.by (instance)
分组条件,表示按instance标签进行分组。