13 - Logs - 挖掘系统内部发生的状况 (1/4) - Logs 与 Filebeat 的基本介绍

Logs - 挖掘系统内部发生的状况 系列文章


本篇学习重点

  • Logs 在 Observability 中的基本介绍
  • Filebeat 的简介,以及如何用 Filebeat 来收集 Logs 资料

Observability Logs 的基本介绍

Logs 在 Observability 扮演的角色

Google Cloud Architecture Center - DevOps Guides [1] 对针 Observability 这个词的定义中,描述到:

Observability is tooling or a technical solution that allows teams to actively debug their system. Observability is based on exploring properties and patterns not defined in advance.

有提到一个重点,就是『非事先定义』,Observability 也就是拥有能够探索未事先定义的属性与模式的能力,我们在先前介绍的 UptimeMetrics 的部份,其实都是需要事先定义,就算是 Elastic 已经做好很多预设的 Integration 以及 Dashboard,但也都是先定义好的,如果没有定义的部份,也就不会被收集到。

而 Observability 当中的 Logs 与 APM,就拥有较多可以观察到『非事先定义』部份的能力,针对 Logs 的部份,源头当然还是需要系统、应用程序端、或是服务端,有记录足够资讯的日志,而这些日志,将会让我们拥有『当发现系统有异常时,能够进一步深入挖掘系统内部运作的情况,并且提供分析核心原因及找到解决方案』的能力。

Observability 中的 Logs 提供了什麽样的能力

即时监控不断产生的 Logs - Streaming

就好比我们在 *nix 环境中常会针对日志档使用的指令 tail -f,能让我们查看最新不断产生的日志内容,Logs 也提供了 Streaming 的功能,在 Kibana > Observability > Logs 当中,我们可以启用 Stream live 的按钮,就可以让我们即时的查看分散在多台主机的系统、服务、应用程序,所最新产生的日志内容。

13-Kibana-O11y-Logs-stream

在这个 Logs Streaming 的功能之中,由於资讯量很大,所以 Logs 同时也有提供一些能力,能协助我们找到或是关注在我们所需要的资料上:

  • 使用 KQL (Kibana Query Language) 定义筛选的规则

  • 使用 Highlights 在结果当中以颜色突显、也会在右方的时间轴上呈现出哪些时间有发生
    13-Kibana-O11t-Stream-Highlight

  • 在查询到指定某一条 log 时,能透过 View in Context 的方式来检视,也就是可以快速的翻查这行 log 的前、後的 logs,这个功能非常的实用。

13-Kibana-O11t-Stream-view-in-context

使用 Machine Learning 来协助分析 Logs

这部份在 Observability 的 Logs 之中,预设在选单上就有列出两个功能,都是透过 Machine Learning 来协助做到二个类型的处理:

  • Anomalies 异常
  • Categories 分类

透过机器学习的方式,能针对指定 Logs 的时间启始点、针对哪些 Index,建立 Machine Learning 的 Job。

13-Kibana-Create-ML-Job

在进入这两个功能的检视画面时,就可以发现 Elastic 已经贴心的帮我们建立好这些基本的学习规则,可以直接查看当下发现的结果。

13-Kibana-Create-Anomalies

进一步可以从 Anomaly Explorer 查看异常分析的内容。

13-Kibana-Create-Anomaly-Explorer

甚至可以查看异常判断的原因。

13-Kibana-Create-Anomaly-Reason

Filebeat 基本介绍

要使用上述介绍到 Elastic 在 Kibana 提供的 Observability Logs 的这些基本能力之前,我们要先将 Logs 收集到 Elasticsearch 之中,Elastic Stack 中负责收集 Logs 资讯的主要角色,就是 Filebeat,如同先前介绍的 Metricbeat 和 Heartbeat 一样,Filebeat 也是 Beats 家族中的一员,所以也是从 libbeat 所发展出来,并且是针对档案类型的 Logs 进行收集的工具。

Filebeat 的主要运作架构

如下图所示,Filebeat 主要是针对机器上的各种档案,并且会使命必达的负责将指定的目录中的档案有新增的 logs,收集起来并且往後传递,可以直接送到 Elasticsearch 或是送到 Logstash 进行 ETL (Etract, Transform, Load) 的处理,又或是送到 Kafka 或 Redis 的 Queue 之中,再透过其他的工具进行後续的处理。

13-Filebeat-Architecture

Filebeat 的安装方式

安装的方式如同其他 Beats 家族成员相似,以下是使用最简单的安装步骤来做介绍,其实与官方的 Quick start 的文件差不多,先大约知道将 Metricbeat 运作起来的流程为何,我将会以 MacOS 为例。

  1. 下载,并解压缩 Filebeat。
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.15.0-darwin-x86_64.tar.gz
tar xzvf filebeat-7.15.0-darwin-x86_64.tar.gz
  1. 在解压缩目录下的 filebeat.yml 指定 Elasticsearch 的位置
output.elasticsearch:
  hosts: ["myEShost:9200"]
  username: "filebeat_internal"
  password: "YOUR_PASSWORD" 
  1. 启动要安装的模组
./filebeat modules enable {module_name}

Filebeat 提供了非常多内建的模组 (modules),像是 ElasticsearchApacheNginxMySQLPostgreSQLRedisMongoDB...等,详细可以查看 官方文件 Filebeat Modules [2]。

另外针对启动的模组,通常都会要调整这些模组的 config 档,档案的路径就在 ./modules.d/ 里面,档名就会是 module 的名字,副档名为 .yml

  1. 安装 Filebeat 内建的 Kibana Dashboard,以及 Elasticsearch 的 Index Template。
./filebeat setup -e
  1. 启动 Filebeat
./filebeat -d

若是要以 root 执行,要记得把 config 的拥有者也改成 root

sudo chown root filebeat.yml 
sudo chown root modules.d/system.yml 
sudo ./filebeat -e

接下来就可以到 Kibana 查看 Filebeat 所发送的资料,有没有成功的进入到 Elasticsearch了。

参考资料

  1. Google Cloud Architecture Center - DevOps Guides
  2. 官方文件 Filebeat Modules

查看最新 Elasticsearch 或是 Elastic Stack 教育训练资讯: https://training.onedoggo.com
欢迎追踪我的 FB 粉丝页: 乔叔 - Elastic Stack 技术交流
不论是技术分享的文章、公开线上分享、或是实体课程资讯,都会在粉丝页通知大家哦!


<<:  Day14 - 做一半的产品编辑 modal

>>:  Day13 - this&Object Prototypes Ch3 Objects - Contents - Existence - Enumeration 作者建议

第32天~MS-SQL开始

这个得上一篇-https://ithelp.ithome.com.tw/articles/10283...

企划实现(24)

使用tablatout串fragment xml程序码 <?xml version="...

Day 1:前言

背景 这次有幸受到学弟邀请来参加铁人赛,本来是想要写 godot 的教学的(留到之後有机会再分享吧)...

Day18:终於要进去新手村了-Javascript-回圈-for

今天也看了彭彭的影片,要来记录的是for回圈的部分,基本上判断概念跟while回圈一样,需要注意初始...

K8S架设ELK的E

【YC的迷路青春】 写给已经架server上Azure然後发现好像要蒐集LOG的人 新增两个yaml...