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 项目包含这些子项目:
他们之间的关系是这样的:
我们主要看看 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
- 快速入门系列--TSQL-01基础概念
- 初识javascript
- [原创]x.509证书在WCF中的应用(Web/IIS篇)
- Javascript之Dom学习
- 考试备战系列--软考--01基础架构概念
- HTML技术简介
- 记一次非常愉悦的 Python 使用经历
- Jquery 触发器之treigger()方法简介
- 如何节省 1TB 图片带宽?解密极致图像压缩
- Redis快速入门
- 王者荣耀未来新版本的环境优化计划,人工智能技术将引入
- Jquery遍历数组之$.inArray()方法介绍
- [原创图解]Win2003证书服务配置/客户端(服务端)证书申请/IIS站点SSL设置
- JavaScript之firstChild属性、lastChild属性、nodeValue属性学习
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- c++之类模板成员函数的类外实现
- c++之类模板分文件编写
- c++之类模板和友元
- c++之类模板案例
- 【ICLR2020】Transformer Complex-order:一种新的位置编码方式
- 多角度理解CNN
- 【NLP保姆级教程】手把手带你CNN文本分类(附代码)
- 【NLP保姆级教程】手把手带你RNN文本分类(附代码)
- 作为一名Android面试官的碎碎念,面试要掌握这几个关键点!
- 拉格朗日乘子法和KKT约束
- Transformers Assemble(PART IV)
- 【NLP保姆级教程】手把手带你fastText文本分类(附代码)
- 【情感分析】ABSA模型总结(PART I)
- 【Kick Algorithm】十大排序算法及其Python实现
- 【情感分析】ABSA模型总结(PART II)