Ubuntu 20.04にGraylog4.0.6をインストールする手順

#概要
ログを分析するためいにオープンソースプロジェクトであるGraylogをUbuntu20.04にインストールする。
GraylogとはJava + Elasticsearch + MongoDBを利用した海外のログ分析用のオープンソースプロジェクトである。ELK（Elasticsearch + Logstash + Kibana）のように無償のコミュニティ版と有償のエンタープライズライセンス版があります。
GraylogはSplunkのようにログサーバ機能もありサーバ及びネットワーク機器からログを収取して古いログをアーカイブサーバに送ることができます。
今回はサーバやネットワーク機器からのリアルタイムでエラー及び警告メッセージを収集して障害が発生する前に対応できるようにします。
Splunkのように多くの機能がある有償サービスもありますが、先ずログ管理を始めるために短時間でインストール／セットアップできる無償版のGraylogサーバを利用することにしました。

# インストール手順
Graylogを利用するためにはJava, Elasticsearch, MongoDB, Graylogサーバをインストールします。
## OpenJDKのインストール
GraylogはJavaアプリケーションのために先ずはJavaをインストールします。Oracle JDK8以降又はOpenJDK8以降に対応しています。今回はOpenJDK11をインストールします。

1. OpenJDK11及び必要なパッケージのインストール
    1. sudo apt update
    1. sudo apt install -y apt-transport-https openjdk-11-jre-headless uuid-runtime pwgen curl dirmngr
1. 確認
    1. java -version

## Elasticsearchのインストール、セットアップ、起動
### インストール
Elasticsearchはログデータを保管してREST APIで検索できるようにします。

1. GPGキーを取得
    1. wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
1. Elasticsearchリポを追加
    1. echo "deb https://artifacts.elastic.co/packages/oss-6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list
1. Elasticsearchをインストール
    1. sudo apt update
    1. sudo apt install -y elasticsearch-oss
1. インストールされたelasticsearchのバージョンを確認
    1. sudo /usr/share/elasticsearch/bin/elasticsearch --version
### ElasticsearchをGraylog用にセットアップ
Elasticsearchの設定ファイルを編集します。Graylog4.0はElasticsearch 7.11以降に対応していませんので注意してください。次の手順でUbuntu20.04にインストールしたら6.8.15がインストールされました。

1. テキストエディタで/etc/elasticsearch/elasticsearch.ymlを開きます。今回はviを利用します。
    1. sudo vi /etc/elasticsearch/elasticsearch.yml
    1. クラスタ名を「graylog」に設定します。
        1. コメントを外して値を設定
            1. cluster.name: graylog
        1. 最後に追加
            1. action.auto_create_index: false
        1. 保存してテキストエディタを終了
1. elasticsearchサービスを起動
    1. sudo systemctl daemon-reload
    1. sudo systemctl start elasticsearch
    1. sudo systemctl enable elasticsearch
1. サービスが起動していることを確認
    1. sudo systemctl status elasticsearch
1. テスト
    1. curl -X GET http://localhost:9200
    1. 戻されたjsonのcluster_name値が「"graylog"」であることを確認

## MongoDBのインストールと起動
GraylogはMongoDB 4.0及び4.2に対応しています。apt install mongodb-serverでインストールすると3.xがインストールされるのでMongoDBリポを追加します。

1. キーを追加
    1. sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
1. リポを追加
    1. echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list
1. MongoDBをインストール
    1. sudo apt update
    1. sudo apt install -y mongodb-org
1. インストールされたmongoDBのバージョンを確認。4.0又は4.2であることを確認。
    1. mongo --version
1. MongoDBを起動
    1. sudo systemctl daemon-reload
    1. sudo systemctl enable mongod.service
    1. sudo systemctl restart mongod.service
1. 起動していることを確認
    1. sudo systemctl status mongod

## Graylogサーバのインストール
1. Graylogサーバをインストール
    1. Graylog4.0リポ設定をダウンロードしてインストールします。
        1. sudo wget https://packages.graylog2.org/repo/packages/graylog-4.0-repository_latest.deb
        1. sudo dpkg -i graylog-4.0-repository_latest.deb
    1. Graylogサーバをインストール
        1. sudo apt-get update
        1. sudo apt-get install graylog-server

# セットアップ
1. 機密パスワードを生成します。
    1. pwgen -N 1 -s 96
    1. 出力結果をメモします
1. ログイン用のパスワードをsha256ハッシュ
    1. echo -n "Enter Password: " && head -1 </dev/stdin | tr -d '\n' | sha256sum | cut -d" " -f1
    1. 出力結果をメモします
1.  テキストエディタで/etc/graylog/server/server.confを開きます。今回はviを利用します。
    1.  sudo vi /etc/graylog/server/server.conf
        1. 機密パスワードを設定します。
            1. password_secret = <メモして機密パスワード>
        1. ログインパスワードを設定します。
            1. root_password_sha2 = <メモしたsha256ハッシュ>
        1. Webブラウザから開けるようにするためにGraylogサーバのIPアドレスを設定します。「http_bind_address=」行のコメントをはずして値をGraylogサーバのIPアドレスに設定します
            1. http_bind_address = <サーバのIPアドレス>:9000
    1. 保存してテキストエディタを終了します。
1. Graylogサーバを起動します
    1. sudo systemctl daemon-reload
    1. デーモンがロードされるまで少し時間を置く
    1. sudo systemctl start graylog-server
    1. sudo systemctl enable graylog-server
1. 起動していることを確認します
    1. sudo systemctl status graylog-server
1. 起動処理が終了するまで待つ。次のコマンドを実行して「Graylog server is up and running」が表示されるまで待つ。
    1. sudo tail -f /var/log/graylog-server/server.log

# Graylogサーバにログインする
1. Webブラウザから次ぎのURLを開く
    1. http://<IPアドレス>:9000<br/><img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/067aa6af-fe08-052c-3d7a-17e2119a8bb0.png"/>
    1. ユーザ名は「admin」、パスワードは上で設定したログインパスワード<br/><img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/bd3c778e-56b9-9f04-193a-b2e7a0fcff16.png"/>

## ログを取得するUbuntuサーバにrsyslogのインストールとセットアップ
1. Graylogサーバをrsyslogサーバに指定する
    1. sudo vi /etc/rsyslog.conf
    1. 最後に次の行を追加する。今回はUDPを利用します。Graylogにログを送る場合は1024より大きなポート番号を使う必要があります。今回はポート1514を利用します。
        1. *.* @<GraylogサーバのIPアドレス>:1514
    1. 保存してテキストエディタを終了する
1. rsyslogを再起動します。
    1. sudo systemctl restart rsyslog<br/>又は<br/>sudo /etc/init.d/rsyslog force-reload
1. 確認します。
    1. sudo systemctl status rsyslog
1. ファイルウォールを設定している場合はudpポート1514を開放します。
    1. ファイルウォールを確認します。
        1. sudo ufw status
        1. ファイアウォールが有効でudpポート1514が閉鎖されている場合は開放します。
            1. sudo ufw allow proto udp to 0.0.0.0/0 port 1514
        1. 設定した後に確認します。次のような記述があるはずです。<pre>1514/udp                   ALLOW       Anywhere</pre>

## Graylogサーバのセットアップ
Graylogサーバでrsyslogを取得できるようにします。

1. メニューから「System」-「Inputs」を選択します。<br/>![rsyslog_input_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/a33dafc3-0214-f50e-4349-a22dd1b911fc.png)
1. 今回はrsyslogをUDPで送るように設定したのでInputsから「Syslog UDP」を選択します。<br/>![rsyslog_input_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/4e681f57-edba-5e75-88f6-a70f400d732a.png)
1. 「Launch new input」ボタンを押下します。<br/>![rsyslog_input_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/18b82f31-4386-93ef-55ad-9bc470c4a987.png)
1. 項目「Title」に任意の名前を入力します。項目「Port」にrsyslogに設定したポート番号を入力します。今回はポート1514に設定したので1「1514」にします。Graylogは1024以下のポートを指定すると正しくログを取得しません。<br/>入力した後に右下の「Save」ボタンを押下します。<br/>![rsyslog_input_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/eb08f408-379b-22a8-0a4d-40a64846dd09.png)
1. 「Show received messages」ボタンを押下すると取得したログが表示されます。<br/>![rsyslog_input_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/34980a5a-6da9-cddf-e6ed-e79c0af34094.png)
1. メニューから「Search」を選択すると時間軸毎に取得したログメッセージと送信先サーバ名が表示されます。![rsyslog_input_6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/3ef957e7-0c19-9765-efde-411a394b1452.png)


以上