雑木林

頭の中の整理と忘れないための確認メモ

rsyslogから直接elasticsearchにログ蓄積する

サーバやネットワーク装置のログ蓄積と可視化について調査してまして、通常だとfluentdが有名ですが、rsyslogから直接elasticsearchに転送するモジュールがあったので導入してみました。

今回実装した環境は以下になります。(elasticsearchとkibanaは予め構築済み)

  • CentOS7.3
  • elasticsearch-5.4.3-1
  • kibana-5.4.3-1

rsyslog-elasticsearchのインストー

@baseリポジトリにあるrsyslog-elasticsearchをインストールします。

# yum install rsyslog-elasticsearch
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ rsyslog-elasticsearch.x86_64 0:7.4.7-16.el7 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

=======================================================================================
 Package                       アーキテクチャー
                                              バージョン            リポジトリー  容量
=======================================================================================
インストール中:
 rsyslog-elasticsearch         x86_64         7.4.7-16.el7          base          41 k

トランザクションの要約
=======================================================================================
インストール  1 パッケージ

総ダウンロード容量: 41 k
インストール容量: 40 k
Is this ok [y/d/N]: y
Downloading packages:
rsyslog-elasticsearch-7.4.7-16.el7.x86_64.rpm                   |  41 kB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : rsyslog-elasticsearch-7.4.7-16.el7.x86_64              1/1 
  検証中                  : rsyslog-elasticsearch-7.4.7-16.el7.x86_64              1/1 

インストール:
  rsyslog-elasticsearch.x86_64 0:7.4.7-16.el7                                          

完了しました!

elasticsearch転送用のconfigを作成する

基本的には公式サイトに従って記述すればよいです。 ただ、そのままだと単一のインデックスで作成されるため、dynSearchIndexを有効化してsyslog-YYYY-MM-DDで日付ごとにインデックスを作成するように変更しています。

# vi /etc/rsyslog.d/elasticsearch.conf
module(load="omelasticsearch")

# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514

# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514

#### TEMPLATES ####
template(name="syslog"
         type="list"
         option.json="on") {
           constant(value="{")
             constant(value="\"timestamp\":\"")      property(name="timereported" dateFormat="rfc3339")
             constant(value="\",\"message\":\"")     property(name="msg")
             constant(value="\",\"host\":\"")        property(name="hostname")
             constant(value="\",\"severity\":\"")    property(name="syslogseverity-text")
             constant(value="\",\"facility\":\"")    property(name="syslogfacility-text")
             constant(value="\",\"syslogtag\":\"")   property(name="syslogtag")
           constant(value="\"}")
         }

$template syslog-index,"syslog-%timereported:1:10:date-rfc3339%"


#### RULES ####

*.*         action(type="omelasticsearch"
        server="localhost"
        serverport="9200"
        template="syslog"
        dynSearchIndex="on"
        searchIndex="syslog-index"
        bulkmode="on"
        queue.type="linkedlist"
        queue.size="5000"
        queue.dequeuebatchsize="300"
        action.resumeretrycount="-1")

rsyslogをリスタートする

# systemctl restart rsyslog

elasticsearchでインデックスが作成されているか確認する

正常に動作していれば、自動的にインデックスが作成されています。

# curl localhost:9200/_cat/indices |sort
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  3901  100  3901    0     0  20649      0 --:--:-- --:--:-- --:--:-- 20640
yellow open  .kibana             lCPWOQLCRLi1LfLEWlUEUA 1 1    7 0  41.1kb  41.1kb
yellow open  syslog-2017-07-10   1eC8AkrdTla0bukomGdSKw 5 1 3451 0   1.1mb   1.1mb

データを検索して蓄積されていることが確認できます。

# curl -s -S -XGET 'http://localhost:9200/syslog-2017-07-10/events/_search?pretty=true' -d '{ "query" : { "term" : { "severity" : "info" } } }' | head -n 20
{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 3386,
    "max_score" : 0.059038434,
    "hits" : [
      {
        "_index" : "syslog-2017-07-10",
        "_type" : "events",
        "_id" : "AV0oKZqP8_xTAaCoS53M",
        "_score" : 0.059038434,
        "_source" : {
          "timestamp" : "2017-07-10T01:23:21.281591+09:00",
          "message" : " [origin software=\"rsyslogd\" swVersion=\"7.4.7\" x-pid=\"4143\" x-info=\"http://www.rsyslog.com\"] start",