在Windows环境下,使用Fluentd+Elasticsearch+kibana进行访问日志的可视化
想做的事情
我在Windows 7环境下尝试将应用程序的访问日志通过Kibana进行可视化,现在写下备忘录。
希望以下内容能对您有所帮助:
* 使用Spring Boot创建的应用程序
* 服务器使用Tomcat
* 希望实现应用程序的可视化
目前软件的版本列表如下:
* Java 1.8
* Spring Boot 2.1.0
* Tomcat 9
* td-agent 3.2.1
* elasticsearch 6.5.3
* kibana 6.5.3
※ 因为这是我第一次写文章,请您不明之处和建议,请务必在评论中告诉我!
为了实现应用程序的可视化,需要进行访问日志输出的设定。
我在处理关于Spring Boot到Tomcat访问日志输出的问题时,参考了Fintan的文章。
使用画面或API将Tomcat的访问日志输出
我已经将logback-access.xml文件进行了以下配置。
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>./log/access.log</file>
<encoder>
<pattern>host:%h	timeLog:%t{yyyy/MM/dd HH:mm:ss}	user:%u	method:%m	uri:%U%q	protocol:%H	status:%s	thread:%I</pattern>
</encoder>
</appender>
实际输出的日志(LTSV格式):
host:127.0.0.1 timeLog:2018/12/16 17:35:07 user:user1@example.com method:GET uri:/questions/94 protocol:HTTP/1.1 status:200 thread:http-nio-8080-exec-4
host:127.0.0.1 timeLog:2018/12/16 17:35:07 user:user1@example.com method:GET uri:/questions/94 protocol:HTTP/1.1 status:200 thread:http-nio-8080-exec-4
host:127.0.0.1 timeLog:2018/12/16 17:35:07 user:user1@example.com method:GET uri:/questions/94 protocol:HTTP/1.1 status:200 thread:http-nio-8080-exec-4
host:127.0.0.1 timeLog:2018/12/15 17:35:07 user:user1@example.com method:GET uri:/questions/94 protocol:HTTP/1.1 status:200 thread:http-nio-8080-exec-4
host:127.0.0.1 timeLog:2018/12/15 17:35:07 user:user2@example.com method:GET uri:/questions/94 protocol:HTTP/1.1 status:200 thread:http-nio-8080-exec-4
host:127.0.0.1 timeLog:2018/12/15 17:35:07 user:user3@example.com method:GET uri:/questions/94 protocol:HTTP/1.1 status:200 thread:http-nio-8080-exec-4
host:127.0.0.1 timeLog:2018/12/15 17:35:07 user:user4@example.com method:GET uri:/questions/94 protocol:HTTP/1.1 status:200 thread:http-nio-8080-exec-4
...
环境构建
安装Fluentd
从官方网站下载安装Fluentd。
使用 .msi 安装程序在 Windows 上安装 Fluentd。
只需要确认到上述链接的第二个步骤就可以了。
安装 Elasticsearch
从官方网站下载最新版本的 Elasticsearch 进行安装。
解压缩Zip文件。
展開先の参考例 C:\tool\elasticsearch-6.5.3
elasticsearchの起動ファイル C:\tool\elasticsearch-6.5.3\bin\elasticsearch.bat
请确实确认动作。
启动Elasticsearch并在浏览器中打开http://localhost:9200,如果能够显示Elasticsearch的信息就可以了。
安装 Kibana
从Elasticsearch的官网下载最新版本即可安装Kibana。
最好将Kibana的版本与Elasticsearch的版本对齐。如果使用不同版本,可能会无法使用某些功能。
展開先の参考例
C:\tool\kibana-6.5.3
kibanaの起動ファイル C:\tool\kibana-6.5.3\bin\kibana.bat
确认行动
在本地打开Kibana并在浏览器中访问 http://localhost:5601,如果能够显示GUI界面,则表示OK。
Fluentd的配置
在td-agent.conf文件中进行设置。
文件位于C:\opt\td-agent\etc\td-agent的目录下。
<source>
@type tail
path C:\****\log\access.log ← 読込対象ファイルのパス
pos_file C:\opt\td-agent\log\access.log.pos ← 読み込んだポジションの格納先
tag sample ← 読み込んだ内容にsampleタグを付ける
format ltsv ← ログデータの形式に合わせる
</source>
<match sample> ← マッチ対象はsampleタグ
@type elasticsearch ← Elasticsearchに送信するため
host localhost
port 9200
</match>
Elasticsearch和Kibana的配置设置
关于Elasticsearch和Kibana的配置,由于本次是在本地环境进行,使用默认设置就可以了。
elasticsearch-6.5.3\config\elasticsearch.yml ← elasticsearchの設定ファイル
kibana-6.5.3\config\kibana.yml ← kibanaの設定ファイル
可视化 – kě shì huà
環境搭建后,当访问创建的应用程序时,数据将被发送到Elasticsearch中,因此,请在Kibana的「管理」→「索引模式」→「创建索引模式」中选择「fluentd」作为索引,然后将「配置设置」设为「timelog」,并点击「创建索引模式」按钮。
所以,Kibana的Discovery界面可以看到一个名为”fluentd”的索引。
本次忽略在Kibana的可视化中进行日志数据的图形化。
小知識
Elasticsearch会自动将格式为日期的字段映射为日期类型,并将其注册到索引中。详细信息请参考这里。
对于上述输出的访问日志中的”timeLog”字段,Elasticsearch会自动识别它为日期。
另外,由於在此次實施環境中,各產品和數據的時區存在偏差,因此在Kibana中無法正確顯示的問題發生了。
-
- インデックスに登録したデータ → JST
-
- Elasticsearch → UTC
- KibanaのTimezone → JST
在这种状态下,当将数据注册并在Kibana中显示时,访问日志的时间显示为与日本时间不同的时间。
解决方法:
修改Kibana的「日期格式的时区」设置。
变更位置:「管理」→「高级设置」→「日期格式的时区」
变更内容:将默认的「浏览器」改为「Etc/UTC」。
请遵循
使用Fluentd监听Apache的访问日志,并将其投入到Elasticsearch中。