今天简单来聊下Azure VM内存指标的一些事,总体来说没什么深度,只是一些常见问题的分析和总结
首先来说想看内存数据的话肯定是要安装agent的,否则没办法收集到内存数据,这一点各个云平台应该都是差不多的,一般来说除了第三方监控平台以外,如果用Azure原生的监控方式,那么推荐用MMA或者Log Analytics Agent,把数据收集到Log Analytics workspace,然后统一查看和处理,已经设置对应的告警,简单方便,但是这种方案的缺点是监控指标不够直观,很多东西都需要使用Kusto的query来做
还有一种方案就是用Diagnostic Extention,这种方法也可以看到各种内存指标,但是缺点是没办法针对所有机器统一处理,比如一次性直接查看所有机器的内存指标
总结一下就是
- MMA或者Log Analytics Agent
- 优点:
- 方便统一管理,查看,分析
- 可扩展性强,支持定制化需求
- 缺点
- 数据展现不直观,需要自己编写query
- Diagnostic Extention
- 优点
- 数据展现直观,简单方便
- 缺点
- 不利于统一管理,功能比较简单
总体来说的话,还是更推荐使用MMA或者Log Analytics Agent,功能毕竟要强很多,除了方案之外,再来聊一下如果使用了MMA或者Log Analytics Agent的话,内存指标都应该如何查询,这个话题听起来很简单,实际上还是有一点道道的
首先默认情况下,CPU,内存这种数据是不会被收集的,需要手动添加对应的指标,如果是Log Analytics Agent的话,需要在Legacy agents management里添加performance counter,这里就可以添加Memory(*)\% Committed Bytes In Use之类的指标了
添加之后agent才会开始采集这些数据,如果是要查询的话,可以通过类似下边的语句来查询
Perf
| where TimeGenerated > ago(1h)
| where (CounterName == "% Processor Time" and InstanceName == "_Total") or CounterName == "% Used Memory"
| project TimeGenerated, CounterName, CounterValue
| summarize avg(CounterValue) by CounterName, bin(TimeGenerated, 1m)
| render timechart
之后可以得到类似下边的结果,说实话和传统的监控工具比,还是有不小改进空间的。。
再来说一下查看内存数据用的指标,如果要查看使用了多少内存,可以用类似下边的指标
- Windows
- Memory(*)\Available Mbytes
- Linux
- Used Memory MBytes
但是如果要设置告警的话,用固定的数量作为告警的条件很明显是不太合适的,因为每个机器分配的内存大小都是不一样的,一个16G内存的机器可能内存可用数量小于2G就应该告警了,但是对于一个4G内存的机器,可能小于2G可用内存就是个正常情况
所以还是比较推荐用百分比来设置告警条件,如果是Linux机器,其实已经提供了% Used Memory这种counter,但是对于Windows来说,这方面其实是比较缺失的,并没有内置的按百分比来显示可用内存数量的指标,这里就需要用一些其他的法子了,下篇可以详细来讲讲