在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的设置(插件)而异。
输入命令尾部
这部分是用于设置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的处理,那就很不错了!
那么我们来看一下指令的内容吧。
输入 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/

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

简单来说,这个界面是Kibana4的初始设置界面,它用于设置可视化的Elasticsearch索引和时间参数。
当您点击“创建”按钮时,初始设置将完成。
2.2. 看一下访问情况。
我们来看一下访问日志的情况。让我们尝试选择“Discover”。

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

让我们点击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"と表示されている部分をクリックしてみましょう。
期間を変更することができます。
请尝试点击一些字段,屏幕左侧会显示访问日志的字段名称。每个字段的计数排名将会显示出来。

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

如果您只想简单浏览,这里是Discover页面。
2.2. 尝试制作一张图表
这次点击Visualize。
在Visualize中,您可以通过各种类型的图表进行可视化。

首先,将显示可视化类型列表。
选择可视化类型。
本次我想要将所有访问状态码的比例进行可视化。
我们选择使用饼状图。

选择搜索资源。
这次我们选择新的搜索选项。
2.2.2. 进行视觉化设置
我們設定了在這種情況下想要用餅狀圖來表示什麼。
首先選擇分割扇區。

在Aggregation中选择Terms。

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

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

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

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

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

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

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

选择状态饼图。

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

通过将想要查看的信息逐渐可视化并添加到仪表板中,能够一目了然地确认所需信息!
以上完成了接下来的部分。
我试着将数据导入Elasticsearch,并在Kibana4中进行可视化。
下次计划将更详细地整理Kibana4的可视化方法以及Elasticsearch的技巧!