CentOS 7にOSSのログ分析ツール『Graylog』をインストールする

以前、Syslogサーバとして利用できるログ分析ツール『Graylog』について仮想アプライアンスとして触ってみたのだけど、今回はこれをCentOS 7にインストールしてみる。
仮想アプライアンスと違い、ある程度カスタマイズできるので仕事で導入するときはこっちのほうがいいかな?とりあえず、やっていこう。

1.前提パッケージの導入

1-1.OracleJDKのインストール

まずは、前に書いたようにこちらからOracle JDKのrpmパッケージのURLを確認して、以下のようにコマンドを実行しOracleJDKをインストールする。

wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u101-b13/jdk-8u101-linux-x64.rpm
rpm -ihv jdk-8u101-linux-x64.rpm
[root@BS-PUB-CENT7-01 ~]# java -version
java version "1.8.0_101"
Java(TM) SE Runtime Environment (build 1.8.0_101-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)

1-2.Elasticsearchのインストール

次に、Elasticsearchのインストールを行う。
以下のコマンドでリポジトリのインストール、設定を行う。

rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
cat << EOF > /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-2.x]
name=Elasticsearch repository for 2.x packages
baseurl=https://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1
EOF

で、以下のコマンドでElasticsearchのインストールを行う。

yum -y install elasticsearch

サービスの起動回りについて設定を行う。

systemctl daemon-reload
systemctl enable elasticsearch

Elasticsearchの設定ファイルを編集し、サービス再起動を行う。

cp /etc/elasticsearch/elasticsearch.yml{,.bk}
cat <<EOF >> /etc/elasticsearch/elasticsearch.yml
cluster.name: graylog
script.inline: false
script.indexed: false
script.file: false
EOF
service elasticsearch restart

以下のコマンドを実行して、ちゃんと設定できていることを確認する。
無事設定できていれば、赤字になっているとこは同じステータスになってるはずだ。

curl -X GET http://localhost:9200
curl -XGET 'http://localhost:9200/_cluster/health?pretty=true'
[root@BS-PUB-CENT7-01 ~]# curl -X GET http://localhost:9200
{
  "name" : "Spymaster",
  "cluster_name" : "graylog",
  "version" : {
    "number" : "2.3.5",
    "build_hash" : "90f439ff60a3c0f497f91663701e64ccd01edbb4",
    "build_timestamp" : "2016-07-27T10:36:52Z",
    "build_snapshot" : false,
    "lucene_version" : "5.5.0"
  },
  "tagline" : "You Know, for Search"
}
[root@BS-PUB-CENT7-01 ~]# curl -XGET 'http://localhost:9200/_cluster/health?pretty=true'
{
  "cluster_name" : "graylog",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 1,
  "number_of_data_nodes" : 1,
  "active_primary_shards" : 0,
  "active_shards" : 0,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}

1-3.MongoDBのインストール

次に、MongoDB 3.2をインストールする。
以下のコマンドでリポジトリ設定、パッケージインストールを実施する。

cat <<"EOF" > /etc/yum.repos.d/mongodb-org-3.2.repo
[mongodb-org-3.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.2.asc
EOF
yum install -y mongodb-org

サービスの起動設定を行う。

systemctl start mongod
systemctl enable mongod

2.Graylogのインストール

前提となるパッケージをインストールできたら、Graylogのインストールを行う。
まず、以下のコマンドでリポジトリを導入してパッケージをインストールする。

rpm -Uvh https://packages.graylog2.org/repo/packages/graylog-2.0-repository_latest.rpm
yum -y install graylog-server

次に、Graylog自体の設定ファイルを編集する。
(以下のコマンドではEpelとpwgenをインストールしている)

yum -y install epel-release
yum -y install pwgen
sed -e "/^password_secret/c password_secret = $(pwgen -N 1 -s 96)" \
    -e "/^root_password_sha2 /c root_password_sha2 = $(echo -n P@ssw0rd | sha256sum | awk '{print $1}')" \
    -e "/^#root_email/c root_email = root@localhost" \
    -e "/^root_timezone/c root_timezone = Japan" \
    -e "/^elasticsearch_discovery_zen_ping_unicast_hosts/c elasticsearch_discovery_zen_ping_unicast_hosts = $(hostname -I | xargs -n 1 | xargs -I{} echo {}:9300 | tr '\n' ',' | sed 's/,$//g')" \
    -e "/^elasticsearch_max_docs_per_index/c elasticsearch_max_docs_per_index = 20000000" \
    -e "/^elasticsearch_shards/c elasticsearch_shards = 1" \
    -e "/^elasticsearch_replicas/c elasticsearch_replicas = 0" \
    -e "/^rest_listen_uri/c rest_listen_uri = http://IPアドレス:12900/" \
    -e "/#web_listen_uri/c web_listen_uri = http://IPアドレス:9000/" \
    -i.bk /etc/graylog/server/server.conf

設定ファイルの編集ができたら、以下のコマンドでサービスの起動設定を行う。

systemctl daemon-reload
systemctl restart graylog-server
systemctl enable graylog-server
systemctl enable elasticsearch

最後に、Firewalldのポート開放を行う。

firewall-cmd --permanent --zone=public --add-port=9000/tcp
firewall-cmd --permanent --zone=public --add-port=12900/tcp
firewall-cmd --permanent --zone=public --add-port=1514/tcp
firewall-cmd --reload

3.WebブラウザからGraylogにアクセスする

さて、それではWebブラウザからGraylogにアクセスしよう。
「http://IPアドレス:9000」にアクセスする。IDは「admin」、パスワードはroot_password_sha2で指定したものでログインできる。

無事、ログインすることができた。
あとは、以前書いた内容のようにSyslogの設定もろもろを行うだけだ。

なお、今回は一般ユーザで構築しているため、1024番ポート以下のポートを開けることができない。
そのため、rsyslogのデフォルトポートである514ではなく、10514とかその辺を指定して開けてやるといいだろう。