Ubuntu Server 16.04 LTSにOSSのログ分析ツール『Graylog』をインストールする

前回、CentOS 7にGraylogをインストールしたので、今回はUbuntu Server 16.04 LTSにインストールを行う。

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

1-1.Oracle JDKのインストール

まずは、以下のコマンドでOracle JDKのインストールを行う。

sudo add-apt-repository -y ppa:webupd8team/java
sudo apt-get update
sudo apt-get -y install oracle-java8-installer
blacknon@BS-PUB-UBUNTU-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のインストールを行う。
以下のコマンドでリポジトリのインストール、設定を行う。

sudo wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://packages.elastic.co/elasticsearch/2.x/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch.list
sudo apt-get update
sudo apt-get install elasticsearch
sudo update-rc.d elasticsearch defaults

インストール後、設定ファイルの編集を行いサービス再起動を実施する。

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

最後に、以下のコマンドを実行し正常に返ってくること確認する。

sudo curl -X GET http://localhost:9200
sudo curl -XGET 'http://localhost:9200/_cluster/health?pretty=true'
blacknon@BS-PUB-UBUNTU-01:~$ curl -X GET http://localhost:9200
{
  "status" : 200,
  "name" : "Gauntlet",
  "cluster_name" : "graylog",
  "version" : {
    "number" : "1.7.5",
    "build_hash" : "00f95f4ffca6de89d68b7ccaf80d148f1f70e4d4",
    "build_timestamp" : "2016-02-02T09:55:30Z",
    "build_snapshot" : false,
    "lucene_version" : "4.10.4"
  },
  "tagline" : "You Know, for Search"
}
blacknon@BS-PUB-UBUNTU-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
}

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

次に、MongoDBをインストールする。
以下のコマンドでリポジトリの追加、インストールを行う。

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
echo "deb http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list
sudo apt-get update
sudo apt-get install mongodb-org

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

sudo systemctl start mongod
sudo systemctl enable mongod

2.Graylogのインストール

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

wget https://packages.graylog2.org/repo/packages/graylog-2.0-repository_latest.deb
sudo dpkg -i graylog-2.0-repository_latest.deb
sudo apt-get install -y apt-transport-https
sudo apt-get update
sudo apt-get install -y graylog-server

次に、Graylogの設定ファイルを編集する。

sudo apt-get install pwgen
sudo \
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 = メールアドレス" \
    -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_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

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

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

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

サービス起動後、Webブラウザから「http://IPアドレス:9000」へアクセスする。

無事、ログインできた。
Syslogの設定については、以前仮想アプライアンスを利用した際に記述したのでそちらを参照してもらいたい。

なお、その際に注意したいのがポート番号。仮想アプライアンスと違って一般ユーザを作って動かしているため、1024番以下のポートを開くことができない。
(setcapで「setcap 'cap_net_bind_service=+ep' PATH」をしてもダメだった)
そのため、514以外の適当なポート(10514とか)を開いてやるといいだろう。