三、Linux 运行VMware_exporter
通过docker -v 将变量写入到环境中
VMware_exporter不需要做持久化
#docker 运行的方式docker run -d -p 9272:9272-e VSPHERE_USER=administrator@192.168.31.200-e VSPHERE_PASSWORD=密码-e VSPHERE_HOST=主机-e VSPHERE_IGNORE_SSL=True-e VSPHERE_SPECS_SIZE=2000--name vmware_exporterpryorda/vmware_exporter#Linux直接运行#需要安装python3.6 我这里就不演示了Requires Python >= 3.61.Install with $ python setup.py install or via pip $ pip install vmware_exporter. The docker command below is preferred.2.Create config.yml based on the configuration section. Some variables can be passed as environment variables3.Run $ vmware_exporter -c /path/to/your/config4.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端口,也可以自己定义。

四、群晖Docker 运行VMware_exporter
很多情况下我们家里可能只有群晖,没有Linux相关服务,又不想进入群晖执行shell命令,那么就可以通过控制面板的Docker工具来直接进行配置及管理
打开Docker搜索VMware_exporter
选中镜像,安装
点击高级设置

勾选启动自动重启容器
网络默认即可
设置docker端口号

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

没有问题,我们点击启动

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

同样我们访问群晖的http://ip:9272/metrics 就可以看到值了
五、Kubernetes 运行VMware_exporter
官方文档已经设置了对应Kubernetes的yaml文件,我们按照需求修改一下
创建一个命名空间
kubectl create ns abcdocker
设置configmap环境信息
cat >vmware_exporter_config.yaml<<EOFapiVersion: v1kind: ConfigMapmetadata:namespace: abcdockername: vmware-exporter-configdata:VSPHERE_USER: "administrator@192.168.31.200"VSPHERE_HOST: "192.168.31.200"VSPHERE_IGNORE_SSL: "True"VSPHERE_COLLECT_HOSTS: "True"VSPHERE_COLLECT_DATASTORES: "True"VSPHERE_COLLECT_VMS: "True"EOF
考虑密码的安全性,密码不存放在变量中
使用read命令以交互方式输入密码,在使用secret的方式存储
read -s VSPHERE_PASSWORD #执行完后输入密码kubectl create -n abcdocker secret generic vmware-exporter-password --from-literal=VSPHERE_PASSWORD=$VSPHERE_PASSWORDcat >>vmware-exporter_deployment.yaml<<EOFapiVersion: apps/v1kind: Deploymentmetadata:name: vmware-exporternamespace: abcdockerspec:selector:matchLabels:app: vmware-exportertemplate:metadata:labels:app: vmware-exporterrelease: vmware-exporterannotations:prometheus.io/path: "/metrics"prometheus.io/port: "9272"prometheus.io/scrape: "true"spec:containers:- name: vmware-exporterimage: "pryorda/vmware_exporter:latest"imagePullPolicy: Alwaysports:- containerPort: 9272name: httpenvFrom:- configMapRef:name: vmware-exporter-config- secretRef:name: vmware-exporter-passwordEOF
这里还需要在创建一个service,我这里默认使用NodePort
cat >>vmware-exporter_svc.yaml<<EOFapiVersion: v1kind: Servicemetadata:name: vmware-exporternamespace: abcdockerspec:selector:app: vmware-exportertype: NodePortports:- protocol: TCPport: 9272targetPort: 9272nodePort: 30009EOF
接下来创建所有yaml
[root@k8s-01 vmware-exporter]# kubectl apply -f .deployment.apps/vmware-exporter createdconfigmap/vmware-exporter-config createdservice/vmware-exporter created
查看对应的pod、secret、configmap
[root@k8s-01 vmware-exporter]# kubectl get all -n abcdockerNAME READY STATUS RESTARTS AGEpod/vmware-exporter-9997f7d9d-42wkn 1/1 Running 0 7m34sNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEservice/vmware-exporter NodePort 10.104.225.76 <none> 9272:30009/TCP 3m8sNAME READY UP-TO-DATE AVAILABLE AGEdeployment.apps/vmware-exporter 1/1 1 1 7m34sNAME DESIRED CURRENT READY AGEreplicaset.apps/vmware-exporter-9997f7d9d 1 1 1 7m34s
接下来我们测试一下svc的地址和nodeport都是否可以curl通
[root@k8s-01 vmware-exporter]# kubectl get svc -n abcdockerNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEvmware-exporter NodePort 10.104.225.76 <none> 9272:30009/TCP 3m45s
测试nodeport
[root@k8s-01 vmware-exporter]# curl -s -q 192.168.31.10:30009/metrics|tail -n 1vmware_host_net_usage_average{cluster_name="abcdocker",dc_name="Datacenter",host_name="192.168.31.100"} 8.0
页面访问测试
六、路由器端口转发
因为我是想在我云服务器上统一查看监控报警,家里的esxi和腾讯云服务器又不在一个内网,所以需要跨公网通信。
企业环境中可能不需要做路由器端口转发,这个针对我家用的。如果是企业环境可以跳过
前提是要有公网IP哈,不然只能考虑用FRP的方式
进入路由器–>高级设置
点击端口转发

我们新创建一个规则即可
这里的ip和端口号就是我们部署VMware_exporter的节点

测试公网可以访问

七、Prometheus 添加监控项
vmware_exporter安装完成只是第一步,我们需要在Prometheus中添加针对VMware_exporter信息的收集
本次案例文章基于
Prometheus 监控MySQL数据库
修改Prometheus配置文件
[root@prometheus ~]# cd /etc/prometheus/[root@prometheus prometheus]# vim prometheus.yml#添加下面的配置- job_name: 'vmware_vcenter'metrics_path: '/metrics'static_configs:- targets:- 'esxi.frps.cn'relabel_configs:- source_labels: [__address__]target_label: __param_target- source_labels: [__param_target]target_label: instance- target_label: __address__replacement: dsm.frps.cn:9272#targets 在Prometheus中显示的名称#replacement VMware_exporter地址#relabel_configs中配置了自动发现

八、Grafana设置
Prometheus中已经有数据了,接下来导入模板~
https://grafana.com/grafana/dashboards/11243
目前使用的是11243模板,没有找到更好的,后续自己改一个

点击导入

需要选择数据源

效果图如下

九、AlertManager 告警配置
alertmanager基于下方文章搭建
AlertManager 微信告警配置
实际上grafana的效果图我们可能半年才上去看一次,主要的告警还是要通过alert直接触发
针对VMware_exporter我们需要添加rule规则,对VMware_exporter状态进行触发告警
添加rule文件
#注意格式,格式错误会让prometheus无法启动vim /etc/prometheus/rules/vmware_exporter.yamlgroups:- name: vmware statusrules:- alert: HighNumberOfSnapshots #大量快照模板expr: vmware_vm_snapshots > 5for: 30mlabels:severity: warningannotations:summary: High Number of Snapshots (instance {{ $labels.instance }})description: "High snapshots number on {{ $labels.instance }}: {{ $value }}n Num = {{ $value }}n VMware_Name = {{ $labels.vm_name }}"- alert: VirtualMachineMemoryWarning #虚拟机内存警告模板expr: vmware_vm_mem_usage_average / 100 >= 80 and vmware_vm_mem_usage_average / 100 < 50for: 30mlabels:severity: warningannotations:summary: Virtual Machine Memory Warning (instance {{ $labels.instance }})description: "High memory usage on {{ $labels.instance }}: {{ $value | printf "%.2f"}}%n VALUE = {{ $value }}n VMware_Name = {{ $labels.vm_name }}"- alert: VirtualMachineMemoryCritical #虚拟机内存严重模板expr: vmware_vm_mem_usage_average / 100 >= 90for: 30mlabels:severity: errorannotations:summary: Virtual Machine Memory Critical (instance {{ $labels.instance }})description: "High memory usage on {{ $labels.instance }}: {{ $value | printf "%.2f"}}%n VALUE = {{ $value }}n VMware_Name = {{ $labels.vm_name }}"- alert: OutdatedSnapshots #过时的快照模板 (单位是舔)expr: (time() - vmware_vm_snapshot_timestamp_seconds) / (60 * 60 * 24) >= 90for: 30mlabels:severity: warningannotations:summary: Outdated Snapshots (instance {{ $labels.instance }})description: "Outdated snapshots on {{ $labels.instance }}: {{ $value | printf "%.0f"}} daysn VALUE = {{ $value }}n VMware_Name = {{ $labels.vm_name }}"- alert: EsxiHostMemoryCritical #esxi内存使用百分比模板expr: ((vmware_host_memory_usage / vmware_host_memory_max) * 100) > 50for: 5mlabels:severity: warningannotations:summary: Esxi Host Memory Warning (instance {{ $labels.instance }})description: "Outdated Host Esxi Memory on {{ $labels.instance }}: {{ $value | printf "%.0f"}} %n VALUE = {{ $value }}n VMware_Name = {{ $labels.host_name }}"- alert: EsxiHostCPUCritical #esxi cpu 百分比expr: ((vmware_host_cpu_usage / vmware_host_cpu_max) * 100) > 50for: 5mlabels:severity: warningannotations:summary: Esxi Host CPU Warning (instance {{ $labels.instance }})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我就直接重启镜像了
我这里使用微信报警,接下来我们看微信即可
温馨提示一下,可以把prometheus告警值设置低一点,来测试是否有问题,后面在修改回去
最终效果图
参考文档:https://github.com/pryorda/vmware_exporter
【参考文档】
本文转自:https://i4t.com/5287.html
参考:prometheus监控VShereClient7.0_EXSi7.0主机状态(快速简易)
快速脚本部署参考:https://www.scriptjc.com/article/1284
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/aiops/287328.html