らくがきちょう

なんとなく

ElasticSearch + Kibana + Fluentd で NetFlow コレクタを作成する

ElasticSearch + Kibana + Fluentd で NetFlow コレクタを作成する手順をメモしておきます。

OpenJDK のインストール

OpenJDK をインストールします。

yum -y install java-1.8.0-openjdk

ElasticSearch のインストール

ElasticSearch をインストールする為に GPG-KEY をインポートしておきます。

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

リポジトリを定義します。以下の内容で /etc/yum.repos.d/elasticsearch.repo というファイルを新規作成します。

[elasticsearch-5.x]
name=Elasticsearch repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

ElasticSearch をインストールします。

yum -y install elasticsearch

起動&自動起動の設定をしておきます。

systemctl daemon-reload
systemctl enable elasticsearch.service
systemctl start elasticsearch.service

Kibana のインストール

リポジトリを定義します。以下の内容で /etc/yum.repos.d/kibana.repo というファイルを新規作成しておきます。

[kibana-5.x]
name=Kibana repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

Kibana をインストールします。

yum -y install kibana

設定ファイルは /etc/kibana/kibana.yml にあります。server.host を以下のように修正しておきます。

server.host: "0.0.0.0"

起動&自動起動の設定をしておきます。

systemctl daemon-reload
systemctl enable kibana.service
systemctl start kibana.service

Fluentd のインストール

以下のスクリプトを実行することだけで Fluentd をインストール出来ます。

curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh | sh

NetFlow を利用する為にプラグインをインストールしておきます。

td-agent-gem install fluent-plugin-elasticsearch
td-agent-gem install fluent-plugin-netflow

NetFlow を利用する為に /etc/td-agent/td-agent.conf へ以下の内容を追記します。

<match netflow.**>
  type elasticsearch
  host localhost
  port 9200
  type_name netflow
  logstash_format true
  logstash_prefix flow
  logstash_dateformat %Y%m%d
</match>

<source>
  type netflow
  tag netflow.event
  port 5141
  versions [5, 9]
</source>

Fluentd を systemctl から制御する為に、以下の内容で /etc/systemd/system/td-agent.service を新規作成します。

[Unit]
Description=Fluentd: data collector for Treasure Data
Documentation=http://docs.fluentd.org/
After=network-online.target consul_agent.service
Wants=network-online.target

[Service]
Type=forking
PIDFile=/var/run/td-agent/td-agent.pid
ExecStart=/etc/rc.d/init.d/td-agent start
ExecStop=/etc/rc.d/init.d/td-agent stop
ExecReload=/etc/rc.d/init.d/td-agent reload
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

起動&自動起動の設定をしておきます。

systemctl daemon-reload
systemctl enable td-agent.service
systemctl start td-agent.service

Kibana にアクセスしてみる

Kibana は「http:// 〜 :5601」にアクセスします。

参考

ElasticSearch の起動ログ

正常時

# systemctl status elasticsearch
● elasticsearch.service - Elasticsearch
   Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2017-01-01 11:56:03 JST; 7min ago
     Docs: http://www.elastic.co
  Process: 832 ExecStartPre=/usr/share/elasticsearch/bin/elasticsearch-systemd-pre-exec (code=exited, status=0/SUCCESS)
 Main PID: 835 (java)
   CGroup: /system.slice/elasticsearch.service
           └─835 /bin/java -Xms2g -Xmx2g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+Disab...

Jan 01 11:56:03 mgmt-centos7-02 systemd[1]: Starting Elasticsearch...
Jan 01 11:56:03 mgmt-centos7-02 systemd[1]: Started Elasticsearch.
Jan 01 11:56:04 mgmt-centos7-02 elasticsearch[835]: OpenJDK 64-Bit Server VM warning: If the number of processors is expected to increase fro...reads=N
Hint: Some lines were ellipsized, use -l to show in full.

メモリ不足時

# systemctl status elasticsearch
● elasticsearch.service - Elasticsearch
   Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Sun 2017-01-01 11:37:57 JST; 10min ago
     Docs: http://www.elastic.co
  Process: 1038 ExecStart=/usr/share/elasticsearch/bin/elasticsearch -p ${PID_DIR}/elasticsearch.pid --quiet -Edefault.path.logs=${LOG_DIR} -Edefault.path.data=${DATA_DIR} -Edefault.path.conf=${CONF_DIR} (code=exited, status=1/FAILURE)
  Process: 1036 ExecStartPre=/usr/share/elasticsearch/bin/elasticsearch-systemd-pre-exec (code=exited, status=0/SUCCESS)
 Main PID: 1038 (code=exited, status=1/FAILURE)

Jan 01 11:37:56 mgmt-centos7-02 elasticsearch[1038]: OpenJDK 64-Bit Server VM warning: If the number of processors is expected to increase fr...reads=N
Jan 01 11:37:57 mgmt-centos7-02 elasticsearch[1038]: OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000085330000, 2060255232...rno=12)
Jan 01 11:37:57 mgmt-centos7-02 elasticsearch[1038]: #
Jan 01 11:37:57 mgmt-centos7-02 elasticsearch[1038]: # There is insufficient memory for the Java Runtime Environment to continue.
Jan 01 11:37:57 mgmt-centos7-02 elasticsearch[1038]: # Native memory allocation (mmap) failed to map 2060255232 bytes for committing reserved memory.
Jan 01 11:37:57 mgmt-centos7-02 elasticsearch[1038]: # An error report file with more information is saved as:
Jan 01 11:37:57 mgmt-centos7-02 elasticsearch[1038]: # /tmp/hs_err_pid1038.log
Jan 01 11:37:57 mgmt-centos7-02 systemd[1]: elasticsearch.service: main process exited, code=exited, status=1/FAILURE
Jan 01 11:37:57 mgmt-centos7-02 systemd[1]: Unit elasticsearch.service entered failed state.
Jan 01 11:37:57 mgmt-centos7-02 systemd[1]: elasticsearch.service failed.
Hint: Some lines were ellipsized, use -l to show in full.