QIAOPANG.COM · 陈天(TYR CHEN)2013–2026 精选技术与随笔文集 · 共 260 篇按时间顺序浏览(2013 → 2026)↗
程序人生 · 陈天文集QiaoPang · Systems, Craft & Agentic Era
时间轴 ↗

beats:监控和日志处理

beats:监控和日志处理

一晃新的一年就过去了 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 项目包含这些子项目:

beats:监控和日志处理

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

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

就这么多,希望对你有用。

MORE IN 系统与架构

同专栏延伸阅读

查看「系统与架构」全部文章 →

日志的未来:必也正名乎

我们花了十年,把可观测性盖成一座漂亮的大厦,地基却是漂浮的字符串:字段名靠默契、基数靠运气、账单靠忍。这篇文章给出一个激进的方案,用 protobuf 给每一件被观测的事正名,把日志、指标、审计统一成一份带版本、带 owner、带保留策略的事件目录,旁边留一扇叫 ForensicEvent 的逃生舱兜住所有未知未知。AI 已经成为代码的主笔,schema-first 的最后一道阻力随之消失。是时候让 schema 重新成为可观测性大厦的

New Hope (2025–2026)10,772 字 · 24 分钟

彻底抛弃多环境:用 Rust 与 Pingora 重塑下一代 Serverless 架构

当我们退回原点重新思考"计算"的本质,会发现多环境是个幻觉,K8s 是个过度抽象,而 Serverless 的冷启动和连接池风暴是自找的。这篇文章拆解一套基于 Baggage Header 路由、Pingora 智能网关、Firecracker 微虚拟机和 Rust Data Bus 的无环境架构,试图回答:Post-Kubernetes 时代的计算该长什么样。

New Hope (2025–2026)23,788 字 · 53 分钟