在CentOS7环境下,构建Fluentd+Elasticsearch+Kibana4(下篇)

前面的时间已经过了很长时间,
后面的部分将终于将访问日志存入Elasticsearch,用Kibana4以图表方式查看访问情况!
我想试试看。

本次的主要流程是:
– 使用td-agent捕获Apache2的访问日志,并且将其传输到Elasticsearch中。
– 在Kibana4中进行初始设置,并查看存储在Elasticsearch中的访问日志数据。
这是一个相对简单的流程描述,但最终变成了相当冗长的文本。

另外,假设Apache2已经安装完毕。
根据需要进行安装。
如果您使用Nginx,可以直接将Apache替换为Nginx,应该差不多。

将Apache的访问日志捕捉并推送到Elasticsearch中。

终于轮到td-agent出场了。通过编辑td-agent的配置文件”td-agent.conf”来实现。

1.1. 修改td-agent.conf文件

让我们在编辑器中打开它。

$ sudo vi /etc/td-agent/td-agent.conf

我們會繼續添加設定。

1.1.1. 配置输入 Apache 访问日志的设置。

首先,我们来讲讲如何捕捉Apache的访问日志部分。

<source>
  type tail
  path /var/log/httpd/access_log
  format apache2
  pos_file /var/log/td-agent/httpd.access.log.pos
  tag apache2.access
</source>

本文介绍了td-agent.conf文件的描述规则,虽然对细节进行了省略,并且提供了简要说明。首先,~部分是源代码指令,用于配置输入源。在这个源代码指令中,会编写关于Apache日志的存放位置等设置。

以下是source指令的内容。
※此设定根据type的设置(插件)而异。

KeySample ValueRemarkstypetail入力(プラグイン)のタイプを指定しますpath/var/log/httpd/access_log入力するログファイルのパスを指定しますformatapache2入力ログのフォーマットを指定しますpos_file/var/log/td-agent/httpd.access.log.pos読み込み位置を覚えておく為のpos_fileのパスを指定しますtagapache2.accessこの入力イベントのタグ名を指定します。タグはtd-agentにおいて、イベントのルーティングに使用されます。

输入命令尾部

这部分是用于设置source指令的输入(插件)类型。

这次设置为”tail”,意味着和linux命令的tail -f相同,以读取添加到访问日志文件末尾的日志作为输入方式(tail插件)。还可以设置其他的,如”http”和”forward”,总称为”input插件”。

目录 /var/log/httpd/access_log

这部分是在Kibana4中设置要可视化的Apache访问日志的路径。

以中文写出以下句子的同义句:格式化Apache2

可以通过预设的格式类型或正则表达式来设置访问日志的格式。因为本次是针对Apache2的日志,所以指定了apache2的格式类型。可以指定类似”apache_error/nginx/syslog/tsv/csv/ltsv/json”的格式类型,但需要注意的是,如果自定义了访问日志的输出,格式类型可能无法解析。在这种情况下,需要使用正则表达式来描述,并且必须使用所谓的”命名捕获”格式。例如,可以按以下方式描述。

^(?<host>[^ ]+) [^ ]+ [^ ]+ \[(?<time>[^\]]+)\] "(?<request>[^ ]+ [^ ]+ [^ ]+)" (?<code>[^ ]+) .+ ".+" "(?<ua>.+)" (?<latency>[^ ]+)$

在此情况下,每个名称部分将成为传递给Elasticsearch的键名。

日志文件位置 /var/log/td-agent/httpd.access.log.pos

Tail插件是一个持续收集添加内容的插件。因此,需要记住已读取输入文件的位置,为此需要指定pos文件的位置。

Apache2.access 标签

设置此输入事件的标签名称。在此事件完成后,将转到下一个事件,以便用于路由。关于这个话题,在设置下一个Elasticsearch的输出时会稍微提及。

将日志输出到Elasticsearch(写入)的设置。

我們需要添加將接收到的 Apache 日誌輸出到 Elasticsearch 的設定。

<match apache2.access>
  type elasticsearch
  host localhost
  port 9200
  type_name apache_access
  logstash_format true
</match>

这次被~所包围。
这是一个称为match指令的东西,用来指定标签名称。
当匹配到这个标签名称时,就会执行相应的事件。

现在,在输入端的设置中,我们将source指令内的tag设为apache2.access。
通过source指令的事件,Apache的访问日志以tail -f的形式输入,并附加了一个名为apache2.access的标签,然后继续下一步处理。
然后,通过指令将匹配为的带有apache2.access标签的内容进行处理。

如果在这个“指令内描述写入到Elasticsearch的处理,那就很不错了!

那么我们来看一下指令的内容吧。

KeySample ValueRemarkstypeelasticsearch出力(プラグイン)のタイプを指定します。hostlocalhostElasticsearchのホスト名を指定します。port9200Elasticsearchのport番号を指定します。type_nameapache_accessElasticsearchに投入する際のタイプ名を指定します。logstash_formattrueLogstash形式で扱うかどうかを設定します。ここは基本的にtrueにしておきましょう。

输入 Elasticsearch

在这个指令中,我们希望能够将数据输出(写入)到Elasticsearch中,因此需要指定elasticsearch插件。

本地主机

指定输出到的Elasticsearch主机。由于本次td-agent和Elasticsearch位于同一主机上,因此指定为localhost。但如果分别独立设置,则需指定相应的主机。
如果使用hosts参数而不是host,也可以指定多个Elasticsearch。

9200 端口

你可以指定Elasticsearch的端口号。默认端口号是9200,但如果你进行了更改,就需要指定相应的端口号。

种类名称

在投入Elasticsearch时需要指定类型名称。Elasticsearch中的类型对应关系型数据库中的表。

日志格式

设置是否以Logstash格式处理。因为以Logstash格式处理更方便,所以基本上可以设为true。
当设置为true时,投放到Elasticsearch的索引名将会是logstash-YYYY.mm.dd,
在投放到Elasticsearch时,将会添加时间参数作为@timestamp。

顺便提一下,在Elasticsearch中,索引相当于关系型数据库中的数据库。

1. 重新启动 td-agent,并使设置生效。

因为进行了各种设置修改,所以我将重启服务。

$ sudo service td-agent restart

现在Apache的访问日志会被记录并快速地存储到Elasticsearch中!

让我们先确认一下。
我来查看Elasticsearch的索引名称。如果成功插入了数据,那么索引名称应该是logstash-YYYY.mm.dd!

[vagrant@localhost ~]$ curl -XGET localhost:9200/_alias?pretty
{
  ".kibana" : {
    "aliases" : { }
  },
  "logstash-2015.09.13" : {    // ★
    "aliases" : { }
  }
}
[vagrant@localhost ~]$

这是可以的!顺便说一下,Kibana索引记录了Kibana的配置信息,但现在不需要担心它。

ここで上手く入っていないという場合は、td-agentのログを見てみましょう。
$ /var/log/td-agent/td-agent.log

ひっかりやすい項目としては、
・td-agentにはApacheログを参照する権限がなくて開けない⇒パーミッションを変更する等しましょう
・単純にログがない⇒アクセスしましょう!
・どこかの設定が間違っている⇒td-agent.confを見直しましょう

2. 我们来用Kibana4来看一下。

终于准备工作完成了。Elasticsearch 正处于接收 Apache 日志的状态,我认为数据正在迅速积累。

就让我们在Kibana4中查看一下这个情况。

2.1. 访问Kibana4并进行初始设置。

在前篇的结尾,我已经有过访问经验了。

http://192.168.33.10:5601/
top_exists_index.png

由于这次在Elasticsearch中已经创建了索引,所以与上次看到的情况有些不同。
上次由于没有索引,所以会显示”Unable to fetch mapping…”等消息,
而这次”Time-field name”这部分被红框围起来了。

当你点击后,可以选择@timestamp,这次我们选择它。

top_exists_index_002.png

简单来说,这个界面是Kibana4的初始设置界面,它用于设置可视化的Elasticsearch索引和时间参数。

当您点击“创建”按钮时,初始设置将完成。

2.2. 看一下访问情况。

我们来看一下访问日志的情况。让我们尝试选择“Discover”。

kibana_menu.png

你可以通过时间顺序查看访问日志的状态。
虽说如此,不过我只临时做了一点点访问,所以非常遗憾……

kibana_discover_001.png

让我们点击Kibana4界面右上角的”Last 15 minutes”。
您可以更改要显示的访问日志的时间范围。
※ 在上面的示例图片中显示为”Last 24 hours”。

看到这个,就知道大约在17:00左右有大约100次访问呢。
※将鼠标悬停在绿色条上,就会弹出显示详细数量的弹窗。

あれ?Elasticsearchにデータあるはずなのに、"No results found"と表示される・・・
という方は、Kibana4で表示する「期間設定」が短い可能性があります。

Kibana4の画面の右上に"Last 15 minutes"という表示があると思いますが、デフォルトでは直近15分の
ログしか対象になりません。この場合、直近15分のアクセスログがないと、表示できるものが何もないので
"No results found..."となるわけです。

では、期間を変更すれば良いわけですが、"Last 15 minutes"と表示されている部分をクリックしてみましょう。
期間を変更することができます。

请尝试点击一些字段,屏幕左侧会显示访问日志的字段名称。每个字段的计数排名将会显示出来。

kibana_discover_003a.png

中央部分显示着最近日志的内容。

top_exists_index_004.png

如果您只想简单浏览,这里是Discover页面。

2.2. 尝试制作一张图表

这次点击Visualize。
在Visualize中,您可以通过各种类型的图表进行可视化。

kibana_menu_002.png

首先,将显示可视化类型列表。

选择可视化类型。

本次我想要将所有访问状态码的比例进行可视化。
我们选择使用饼状图。

visualize_001.png

选择搜索资源。

这次我们选择新的搜索选项。

2.2.2. 进行视觉化设置

我們設定了在這種情況下想要用餅狀圖來表示什麼。
首先選擇分割扇區。

pie_chart_001.png

在Aggregation中选择Terms。

pie_chart_002.png

在Field中选择code并点击Apply按钮。

pie_chart_003.png

用这个就可以制作表示状态码比例的饼图了!

pie_chart_004.png

2.2.3. 储存

好了,既然已经制作好了,那就保存起来吧。
在饼状图的右上方菜单中,选择保存按钮,然后给它取一个合适的名字进行保存。

pie_chart_005.png

我暂时将其保存为状态图表。

pie_chart_006.png

2.3. 尝试创建一个仪表板

仪表板是一种可以以列表形式查看创建的图表等内容的工具。如果能将刚刚创建的状态码饼图和访问计数折线图等一起显示出来,那在服务运营监控方面就非常方便了!

请选择仪表板。

kibana_menu_003.png

由于仪表板上没有任何内容,所以现在呈现的是这样的显示。

dashboard_001.png

让我们尝试添加之前创建的Pie图表。
请按下加号按钮,如下图所示。

dashborad_002.png

选择状态饼图。

dashborad_003.png

然后,刚刚创建的饼状图在仪表盘上显示出来了!

dashborad_004.png

通过将想要查看的信息逐渐可视化并添加到仪表板中,能够一目了然地确认所需信息!

以上完成了接下来的部分。
我试着将数据导入Elasticsearch,并在Kibana4中进行可视化。

下次计划将更详细地整理Kibana4的可视化方法以及Elasticsearch的技巧!

广告
将在 10 秒后关闭
bannerAds