系统监控及日志收集elk+beats
针对数据中心的监控, 许多公司积极响应并开源自己的方案, 传统的有nagios和zabbix等.
当前比较流行的方案有flume/scribe/openfalcon/elk(beats), 这里将具体介绍下elk.
最新官方建议使用轻量级的beats(golang)取代logstash作为客户端, beats收集数据发送到logstash broker或者直接发送到elasticsearch.
笔者建议使用beats => logstash => elasticsearch => kibana这种数据流, 利用logstash可以对数据作额外处理以及减少系统耦合性.
beats客户端
beats包含多种工具, 常用的有三种:
topbeat: 主要监控系统的cpu/memory/disk, 周期性的收集系统数据.
filebeat: 用于收集系统和应用程序日志, 发送日志到logstash作额外处理可以收集感兴趣的信息.
packetbeat: 用于嗅探系统网络信息(被动), 如http/mysql/等等.
但是, topbeat中没有收集linux系统/proc/net基本信息的功能, 而是集成到packetbeat中显得稍笨重不方便使用.
logstash
logstash起初是作为elk中的客户端, 但作为一个收集系统基本数据的工具, 而显得太笨重而一直被诟病.
尽管如此, logstash提供了许多插件功能极其丰富, 很适合作为broker节点.
logstash的数据处理通常有三部分构成, 分别对应于三种插件:
(1) input插件, 获取数据, 比如监听端口或者从消息队列中订阅数据.
(2) filter插件, 对收集到的数据作进一步的处理, 例如解析ip地址为经纬度.
(3) output插件, 输出数据到其它服务中,如elasticsearch/kafka/zeromq.
elasticsearch
终于回到正题了, elasticsearch是基于lucence引擎的一套简单高可用系统, 提供了非常方面的nosql/rest服务的功能, 也是这套监控系统的核心所在.
最新版本的elasticsearch可以很方便建立一个分布式集群, 在该集群中通常有master和数据这两大类节点.
(1) 节点属性
1 | cluster.name: es_cluster # 集群名 |
这里注意, 如果node.master和node.data均为false, 则该节点是一个仲裁节点, 类似nginx负载均衡的功能.
(2) 发现机制zen
1 | discovery.zen.ping.multicast.enabled: false |
采用unicast方式显示设置集群中的节点, 默认各个节点之间使用的端口是9300.
(3) 配置网络
1 | # network |
kibana
收集数据是为了展现, kibana即是一种基于elasticsearch数据展现的工具.
kibana默认提供了topbeat/filebeat/packetbeat等的数据展示模版.
elastalert
作为一个监控系统, 报警机制不得缺少, elastic官方提供的收费方案比较简单.
这里介绍一种免费开源方案, 那就是elastalert, 具体参考官方代码.

皖ICP备2026004021号-1