在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&#9;timeLog:%t{yyyy/MM/dd HH:mm:ss}&#9;user:%u&#9;method:%m&#9;uri:%U%q&#9;protocol:%H&#9;status:%s&#9;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的信息就可以了。

120.png

安装 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。

111.png

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的可视化中进行日志数据的图形化。

111.jpg
112.jpg
113.jpg

小知識

Elasticsearch会自动将格式为日期的字段映射为日期类型,并将其注册到索引中。详细信息请参考这里。

对于上述输出的访问日志中的”timeLog”字段,Elasticsearch会自动识别它为日期。

另外,由於在此次實施環境中,各產品和數據的時區存在偏差,因此在Kibana中無法正確顯示的問題發生了。

    • インデックスに登録したデータ → JST

 

    • Elasticsearch → UTC

 

    KibanaのTimezone → JST

在这种状态下,当将数据注册并在Kibana中显示时,访问日志的时间显示为与日本时间不同的时间。

解决方法:
修改Kibana的「日期格式的时区」设置。

变更位置:「管理」→「高级设置」→「日期格式的时区」
变更内容:将默认的「浏览器」改为「Etc/UTC」。

请遵循

使用Fluentd监听Apache的访问日志,并将其投入到Elasticsearch中。

广告
将在 10 秒后关闭
bannerAds