prometheus监控vmware vsphere vcsa

【1】我的最佳实现

下载好包去官网:

# 解压

gizp -d vmware_exporter-0.18.3.tar

cat vmware_exporter-0.18.3.tar |docker import - vmware_exporter

三、Linux 运行VMware_exporter

通过docker -v 将变量写入到环境中

VMware_exporter不需要做持久化

  1. #docker 运行的方式
  2. docker run -d -p 9272:9272
  3. -e VSPHERE_USER=administrator@192.168.31.200
  4. -e VSPHERE_PASSWORD=密码
  5. -e VSPHERE_HOST=主机
  6. -e VSPHERE_IGNORE_SSL=True
  7. -e VSPHERE_SPECS_SIZE=2000
  8. --name vmware_exporter
  9. pryorda/vmware_exporter
  10. #Linux直接运行
  11. #需要安装python3.6 我这里就不演示了
  12. Requires Python >= 3.6
  13. 1.Install with $ python setup.py install or via pip $ pip install vmware_exporter. The docker command below is preferred.
  14. 2.Create config.yml based on the configuration section. Some variables can be passed as environment variables
  15. 3.Run $ vmware_exporter -c /path/to/your/config
  16. 4.Go to http://localhost:9272/metrics?vsphere_host=vcenter.company.com to see metrics

VSPHERE_USERNAME vcenter用户名
VSPHERE_PASSWORD vcenter密码
VSPHERE_HOST vcenter地址

环境变量配置信息

变量名默认值注释
VSPHERE_HOST   连接地址
VSPHERE_USER   用户名
VSPHERE_PASSWORD   密码
VSPHERE_SPECS_SIZE 5000 查询统计功能的规格列表大小
VSPHERE_IGNORE_SSL False 忽略与 vsphere 主机的连接上的 ssl 证书
VSPHERE_FETCH_CUSTOM_ATTRIBUTES False 设置为 true 以收集对象自定义属性作为度量标签
VSPHERE_FETCH_TAGS False 设置为 true 以收集对象标签作为度量标签
VSPHERE_FETCH_ALARMS False 获取对象触发警报,并且在主机 hdw 警报的情况下也是如此
VSPHERE_COLLECT_HOSTS True 设置为 false 以禁用主机指标收集
VSPHERE_COLLECT_DATASTORES True 设置为 false 以禁用数据存储指标的收集
VSPHERE_COLLECT_VMS True 设置为 false 以禁用收集虚拟机指标
VSPHERE_COLLECT_VMGUESTS True 设置为 false 以禁用虚拟机来宾指标的收集
VSPHERE_COLLECT_SNAPSHOTS True 设置为 false 以禁用快照指标的收集

访问测试
http://192.168.31.10:9272/metrics 访问docker主机的9272端口,也可以自己定义。

1645338130298.png

四、群晖Docker 运行VMware_exporter

很多情况下我们家里可能只有群晖,没有Linux相关服务,又不想进入群晖执行shell命令,那么就可以通过控制面板的Docker工具来直接进行配置及管理

打开Docker搜索VMware_exporter
1645350015765.png

选中镜像,安装
1645350066754.png

点击高级设置

1645350101446.png

勾选启动自动重启容器
1645350125905.png

网络默认即可
1645350533701.png

设置docker端口号

1645350204692.png

接下来是配置环境变量,步骤就是上面的方法

1645350658250.png

没有问题,我们点击启动

1645350354600.png

可以点到VMware_exporter容器查看一下状态

1645350386588.png

同样我们访问群晖的http://ip:9272/metrics 就可以看到值了
1645350713558.png

五、Kubernetes 运行VMware_exporter

官方文档已经设置了对应Kubernetes的yaml文件,我们按照需求修改一下

创建一个命名空间

  1. kubectl create ns abcdocker

设置configmap环境信息

  1. cat >vmware_exporter_config.yaml<<EOF
  2. apiVersion: v1
  3. kind: ConfigMap
  4. metadata:
  5. namespace: abcdocker
  6. name: vmware-exporter-config
  7. data:
  8. VSPHERE_USER: "administrator@192.168.31.200"
  9. VSPHERE_HOST: "192.168.31.200"
  10. VSPHERE_IGNORE_SSL: "True"
  11. VSPHERE_COLLECT_HOSTS: "True"
  12. VSPHERE_COLLECT_DATASTORES: "True"
  13. VSPHERE_COLLECT_VMS: "True"
  14. EOF

考虑密码的安全性,密码不存放在变量中

使用read命令以交互方式输入密码,在使用secret的方式存储

  1. read -s VSPHERE_PASSWORD #执行完后输入密码
  2. kubectl create -n abcdocker secret generic vmware-exporter-password --from-literal=VSPHERE_PASSWORD=$VSPHERE_PASSWORD
  3. cat >>vmware-exporter_deployment.yaml<<EOF
  4. apiVersion: apps/v1
  5. kind: Deployment
  6. metadata:
  7. name: vmware-exporter
  8. namespace: abcdocker
  9. spec:
  10. selector:
  11. matchLabels:
  12. app: vmware-exporter
  13. template:
  14. metadata:
  15. labels:
  16. app: vmware-exporter
  17. release: vmware-exporter
  18. annotations:
  19. prometheus.io/path: "/metrics"
  20. prometheus.io/port: "9272"
  21. prometheus.io/scrape: "true"
  22. spec:
  23. containers:
  24. - name: vmware-exporter
  25. image: "pryorda/vmware_exporter:latest"
  26. imagePullPolicy: Always
  27. ports:
  28. - containerPort: 9272
  29. name: http
  30. envFrom:
  31. - configMapRef:
  32. name: vmware-exporter-config
  33. - secretRef:
  34. name: vmware-exporter-password
  35. EOF

这里还需要在创建一个service,我这里默认使用NodePort

  1. cat >>vmware-exporter_svc.yaml<<EOF
  2. apiVersion: v1
  3. kind: Service
  4. metadata:
  5. name: vmware-exporter
  6. namespace: abcdocker
  7. spec:
  8. selector:
  9. app: vmware-exporter
  10. type: NodePort
  11. ports:
  12. - protocol: TCP
  13. port: 9272
  14. targetPort: 9272
  15. nodePort: 30009
  16. EOF

接下来创建所有yaml

  1. [root@k8s-01 vmware-exporter]# kubectl apply -f .
  2. deployment.apps/vmware-exporter created
  3. configmap/vmware-exporter-config created
  4. service/vmware-exporter created

查看对应的pod、secret、configmap

  1. [root@k8s-01 vmware-exporter]# kubectl get all -n abcdocker
  2. NAME READY STATUS RESTARTS AGE
  3. pod/vmware-exporter-9997f7d9d-42wkn 1/1 Running 0 7m34s
  4. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  5. service/vmware-exporter NodePort 10.104.225.76 <none> 9272:30009/TCP 3m8s
  6. NAME READY UP-TO-DATE AVAILABLE AGE
  7. deployment.apps/vmware-exporter 1/1 1 1 7m34s
  8. NAME DESIRED CURRENT READY AGE
  9. replicaset.apps/vmware-exporter-9997f7d9d 1 1 1 7m34s

接下来我们测试一下svc的地址和nodeport都是否可以curl通

  1. [root@k8s-01 vmware-exporter]# kubectl get svc -n abcdocker
  2. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  3. vmware-exporter NodePort 10.104.225.76 <none> 9272:30009/TCP 3m45s

测试nodeport

  1. [root@k8s-01 vmware-exporter]# curl -s -q 192.168.31.10:30009/metrics|tail -n 1
  2. vmware_host_net_usage_average{cluster_name="abcdocker",dc_name="Datacenter",host_name="192.168.31.100"} 8.0

页面访问测试
1645353360676.png

六、路由器端口转发

因为我是想在我云服务器上统一查看监控报警,家里的esxi和腾讯云服务器又不在一个内网,所以需要跨公网通信。
企业环境中可能不需要做路由器端口转发,这个针对我家用的。如果是企业环境可以跳过

前提是要有公网IP哈,不然只能考虑用FRP的方式

进入路由器-->高级设置
1645353430849.png

点击端口转发

1645353497264.png

我们新创建一个规则即可

这里的ip和端口号就是我们部署VMware_exporter的节点

1645353569669.png

测试公网可以访问

1645353730561.png

七、Prometheus 添加监控项

vmware_exporter安装完成只是第一步,我们需要在Prometheus中添加针对VMware_exporter信息的收集

本次案例文章基于

Prometheus 监控MySQL数据库

修改Prometheus配置文件

  1. [root@prometheus ~]# cd /etc/prometheus/
  2. [root@prometheus prometheus]# vim prometheus.yml
  3. #添加下面的配置
  4. - job_name: 'vmware_vcenter'
  5. metrics_path: '/metrics'
  6. static_configs:
  7. - targets:
  8. - 'esxi.frps.cn'
  9. relabel_configs:
  10. - source_labels: [__address__]
  11. target_label: __param_target
  12. - source_labels: [__param_target]
  13. target_label: instance
  14. - target_label: __address__
  15. replacement: dsm.frps.cn:9272
  16. #targets 在Prometheus中显示的名称
  17. #replacement VMware_exporter地址
  18. #relabel_configs中配置了自动发现

1645354461451.png

八、Grafana设置

Prometheus中已经有数据了,接下来导入模板~
https://grafana.com/grafana/dashboards/11243

目前使用的是11243模板,没有找到更好的,后续自己改一个

1645357846248.png

点击导入

1645357888781.png

需要选择数据源

1645357933735.png

效果图如下
1645357968395.png

1645358009089.png

九、AlertManager 告警配置

alertmanager基于下方文章搭建

AlertManager 微信告警配置

实际上grafana的效果图我们可能半年才上去看一次,主要的告警还是要通过alert直接触发

针对VMware_exporter我们需要添加rule规则,对VMware_exporter状态进行触发告警

添加rule文件

  1. #注意格式,格式错误会让prometheus无法启动
  2. vim /etc/prometheus/rules/vmware_exporter.yaml
  3. groups:
  4. - name: vmware status
  5. rules:
  6. - alert: HighNumberOfSnapshots #大量快照模板
  7. expr: vmware_vm_snapshots > 5
  8. for: 30m
  9. labels:
  10. severity: warning
  11. annotations:
  12. summary: High Number of Snapshots (instance {{ $labels.instance }})
  13. description: "High snapshots number on {{ $labels.instance }}: {{ $value }}n Num = {{ $value }}n VMware_Name = {{ $labels.vm_name }}"
  14. - alert: VirtualMachineMemoryWarning #虚拟机内存警告模板
  15. expr: vmware_vm_mem_usage_average / 100 >= 80 and vmware_vm_mem_usage_average / 100 < 50
  16. for: 30m
  17. labels:
  18. severity: warning
  19. annotations:
  20. summary: Virtual Machine Memory Warning (instance {{ $labels.instance }})
  21. description: "High memory usage on {{ $labels.instance }}: {{ $value | printf "%.2f"}}%n VALUE = {{ $value }}n VMware_Name = {{ $labels.vm_name }}"
  22. - alert: VirtualMachineMemoryCritical #虚拟机内存严重模板
  23. expr: vmware_vm_mem_usage_average / 100 >= 90
  24. for: 30m
  25. labels:
  26. severity: error
  27. annotations:
  28. summary: Virtual Machine Memory Critical (instance {{ $labels.instance }})
  29. description: "High memory usage on {{ $labels.instance }}: {{ $value | printf "%.2f"}}%n VALUE = {{ $value }}n VMware_Name = {{ $labels.vm_name }}"
  30. - alert: OutdatedSnapshots #过时的快照模板 (单位是舔)
  31. expr: (time() - vmware_vm_snapshot_timestamp_seconds) / (60 * 60 * 24) >= 90
  32. for: 30m
  33. labels:
  34. severity: warning
  35. annotations:
  36. summary: Outdated Snapshots (instance {{ $labels.instance }})
  37. description: "Outdated snapshots on {{ $labels.instance }}: {{ $value | printf "%.0f"}} daysn VALUE = {{ $value }}n VMware_Name = {{ $labels.vm_name }}"
  38. - alert: EsxiHostMemoryCritical #esxi内存使用百分比模板
  39. expr: ((vmware_host_memory_usage / vmware_host_memory_max) * 100) > 50
  40. for: 5m
  41. labels:
  42. severity: warning
  43. annotations:
  44. summary: Esxi Host Memory Warning (instance {{ $labels.instance }})
  45. description: "Outdated Host Esxi Memory on {{ $labels.instance }}: {{ $value | printf "%.0f"}} %n VALUE = {{ $value }}n VMware_Name = {{ $labels.host_name }}"
  46. - alert: EsxiHostCPUCritical #esxi cpu 百分比
  47. expr: ((vmware_host_cpu_usage / vmware_host_cpu_max) * 100) > 50
  48. for: 5m
  49. labels:
  50. severity: warning
  51. annotations:
  52. summary: Esxi Host CPU Warning (instance {{ $labels.instance }})
  53. description: "Outdated Host Esxi CPU on {{ $labels.instance }}: {{ $value | printf "%.0f"}} %n VALUE = {{ $value }}n VMware_Name = {{ $labels.host_name }}"

这里我根据我自己的需求单独添加了2个,针对esxi cpu和内存的触发器报警。它的监控项比较多,大家可以根据自己的需求来添加告警。不一定要和我相同

添加完成后重启prometheus和alert,我这里是docker我就直接重启镜像了
1645372466307.png

我这里使用微信报警,接下来我们看微信即可
1645372586307.png

温馨提示一下,可以把prometheus告警值设置低一点,来测试是否有问题,后面在修改回去

最终效果图
1645373532725.png

参考文档:https://github.com/pryorda/vmware_exporter

posted @ 2022-09-05 10:51  郭大侠1  阅读(1492)  评论(0编辑  收藏  举报