beats:监控和日志处理

时间:2022-05-06
本文章向大家介绍beats:监控和日志处理,主要内容包括beats 简介、filebeat、packetbeat、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

一晃新的一年就过去了 1/24,程序君发现自己竟然还没有写上哪怕只言片语,未免让「程序人生」的读者感到失望。如果说之前说自己忙都是瞎忙,如今我是体会到了什么叫忙得连去上厕所的路上都要以 6km/h 的速度前进。不过忙归忙,公众号还是要更新的,今天先来一篇短文,答谢大家的苦苦等待。

系统监控和日志处理这块,有很多现成的工具。除了商业上比较成功的 new relic 和 datadog 外,开源的解决方案也不少,如 elk stack (elasticsearch, logstash, kibana),reimann 等。elk 大家用的比较多,各种成功的解决方案也都能找到,尤其在 amazon 提供了 elasticsearch services 之后,大家需要操心的就只有安装和配置 logstash 而已,运维的门槛大大降低。

然而,单单配置 logstash 也不是件容易的活儿,你得掌握其一堆 input / output / filter plugins,弄懂配置文件的语法,学会成功撰写 grok pattern 等等。有时候你只是想消费你硬盘中的日志文件而已,有没有办法不用配置 logstash,让 log agent 能够直接 plug & play?

当然!程序世界的挠痒痒定律(当你为一个问题感觉到奇痒难耐的时候,这个世界一定有相当数量的人和你一样奇痒难耐,于是有人会解决这个问题)保证了这一点。一个创业公司为了他们的系统在 elk 的基础上搞了套 beats 系统,能够处理大部分日志格式,于是,他们就和做 elasticsearch SAAS 的公司 found 一样,被 elastic (elk 的母公司) 收编了。不过,收不收编不重要,重要的是 beats 依旧在 apache 2.0 协议下开源。下面我们简单讲讲这个体系。

beats 简介

beats 是用 golang(感觉 golang 要渐渐统治运维软件的市场了)写的一组 collector,它可以从操作系统,文件和网络中抓取信息,发送到 logstash,或者直接发送到 elasticsearch,从而让这些信息得到可视化。目前 beats 项目包含这些子项目:

他们之间的关系是这样的:

我们主要看看 filebeat 和 packetbeat。

filebeat

filebeat 的目的主要是取代 logstash forwarder,你可以从系统的日志文件中抓取信息,发送到 elasticsearch 上。安装很简单(redhat):

$ curl -L -O https://download.elastic.co/beats/filebeat/filebeat-1.0.1-x86_64.rpm
$ sudo rpm -vi filebeat-1.0.1-x86_64.rpm

如果你的 elasticsearch cluster 不是 localhost,需要修改 /etc/filebeat/filebeat.yml 中对应的配置。之后就可以:

$ sudo /etc/init.d/filebeat start

之后你就可以使用 kibana 查询到你当前的日志信息了。

filebeat 比较直观,不多说。

packetbeat

packetbeat 是个值得拥有的神器。logging 应该有层级的概念:network layer,web server layer,application layer,etc. 越往上的层级,收集 log 的手段越丰富,然而,对于 network layer,至少我之前一直忽视。packetbeat 使用 libpcap 直接从网卡上抓包,进行协议分析后将其存入 elasticsearch,相当于一个加强版的 wireshark。目前 packetbeat 支持 DNS,HTTP,MySQL,Postgres,MongoDB,Redis/Memcached,Thrift RPC 等协议,对于一般的 web 应用,足矣(也许还应该支持 AMQP),通过 packetbeat 你可以做一些应用层需要特殊处理才能完成的事情,比如实时发现系统中的 slow query(不管是 sql 还是 mongoDB),或者是实时网络拓扑的发现(很多复杂的服务器应用,应用的开发者都不知道某种 traffic 会经历哪些 server,做哪些事情)。

说句题外话,做网络设备的厂商,应该为自己,或者为客户开发这样的系统。为自己开发,可以用于debug,把 tcpdump 下来的数据用 ELK 可视化以发现其中的关联;为客户开发可以帮客户更好的定位潜在的风险,各个应用的瓶颈,以及更好的调试手段。

扯远了。

packetbeat 安装稍微麻烦,需要先装 libpcap:

sudo yum install libpcap
curl -L -O https://download.elastic.co/beats/packetbeat/packetbeat-1.0.1-x86_64.rpm
sudo rpm -vi packetbeat-1.0.1-x86_64.rpm

然后在 /etc/packetbeat/packetbeat.yml 中修改 elasticsearch 的地址, 然后运行即可:

$ sudo /etc/init.d/packetbeat start