概要
ログを分析するためいにオープンソースプロジェクトである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をインストールします。
- OpenJDK11及び必要なパッケージのインストール
- sudo apt update
- sudo apt install -y apt-transport-https openjdk-11-jre-headless uuid-runtime pwgen curl dirmngr
- 確認
- java -version
Elasticsearchのインストール、セットアップ、起動
インストール
Elasticsearchはログデータを保管してREST APIで検索できるようにします。
- GPGキーを取得
- wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
- Elasticsearchリポを追加
- 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
- Elasticsearchをインストール
- sudo apt update
- sudo apt install -y elasticsearch-oss
- インストールされたelasticsearchのバージョンを確認
- sudo /usr/share/elasticsearch/bin/elasticsearch --version
ElasticsearchをGraylog用にセットアップ
Elasticsearchの設定ファイルを編集します。Graylog4.0はElasticsearch 7.11以降に対応していませんので注意してください。次の手順でUbuntu20.04にインストールしたら6.8.15がインストールされました。
- テキストエディタで/etc/elasticsearch/elasticsearch.ymlを開きます。今回はviを利用します。
- sudo vi /etc/elasticsearch/elasticsearch.yml
- クラスタ名を「graylog」に設定します。
- コメントを外して値を設定
- cluster.name: graylog
- 最後に追加
- action.auto_create_index: false
- 保存してテキストエディタを終了
- コメントを外して値を設定
- elasticsearchサービスを起動
- sudo systemctl daemon-reload
- sudo systemctl start elasticsearch
- sudo systemctl enable elasticsearch
- サービスが起動していることを確認
- sudo systemctl status elasticsearch
- テスト
- curl -X GET http://localhost:9200
- 戻されたjsonのcluster_name値が「"graylog"」であることを確認
MongoDBのインストールと起動
GraylogはMongoDB 4.0及び4.2に対応しています。apt install mongodb-serverでインストールすると3.xがインストールされるのでMongoDBリポを追加します。
- キーを追加
- sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
- リポを追加
- 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
- MongoDBをインストール
- sudo apt update
- sudo apt install -y mongodb-org
- インストールされたmongoDBのバージョンを確認。4.0又は4.2であることを確認。
- mongo --version
- MongoDBを起動
- sudo systemctl daemon-reload
- sudo systemctl enable mongod.service
- sudo systemctl restart mongod.service
- 起動していることを確認
- sudo systemctl status mongod
Graylogサーバのインストール
- Graylogサーバをインストール
- Graylog4.0リポ設定をダウンロードしてインストールします。
- sudo wget https://packages.graylog2.org/repo/packages/graylog-4.0-repository_latest.deb
- sudo dpkg -i graylog-4.0-repository_latest.deb
- Graylogサーバをインストール
- sudo apt-get update
- sudo apt-get install graylog-server
- Graylog4.0リポ設定をダウンロードしてインストールします。
セットアップ
- 機密パスワードを生成します。
- pwgen -N 1 -s 96
- 出力結果をメモします
- ログイン用のパスワードをsha256ハッシュ
- echo -n "Enter Password: " && head -1 </dev/stdin | tr -d '\n' | sha256sum | cut -d" " -f1
- 出力結果をメモします
- テキストエディタで/etc/graylog/server/server.confを開きます。今回はviを利用します。
- sudo vi /etc/graylog/server/server.conf
- 機密パスワードを設定します。
- password_secret = <メモして機密パスワード>
- ログインパスワードを設定します。
- root_password_sha2 = <メモしたsha256ハッシュ>
- Webブラウザから開けるようにするためにGraylogサーバのIPアドレスを設定します。「http_bind_address=」行のコメントをはずして値をGraylogサーバのIPアドレスに設定します
- http_bind_address = <サーバのIPアドレス>:9000
- 機密パスワードを設定します。
- 保存してテキストエディタを終了します。
- sudo vi /etc/graylog/server/server.conf
- Graylogサーバを起動します
- sudo systemctl daemon-reload
- デーモンがロードされるまで少し時間を置く
- sudo systemctl start graylog-server
- sudo systemctl enable graylog-server
- 起動していることを確認します
- sudo systemctl status graylog-server
- 起動処理が終了するまで待つ。次のコマンドを実行して「Graylog server is up and running」が表示されるまで待つ。
- sudo tail -f /var/log/graylog-server/server.log
Graylogサーバにログインする
ログを取得するUbuntuサーバにrsyslogのインストールとセットアップ
- Graylogサーバをrsyslogサーバに指定する
- sudo vi /etc/rsyslog.conf
- 最後に次の行を追加する。今回はUDPを利用します。Graylogにログを送る場合は1024より大きなポート番号を使う必要があります。今回はポート1514を利用します。
- . @:1514
- 保存してテキストエディタを終了する
- rsyslogを再起動します。
- sudo systemctl restart rsyslog
又は
sudo /etc/init.d/rsyslog force-reload
- sudo systemctl restart rsyslog
- 確認します。
- sudo systemctl status rsyslog
- ファイルウォールを設定している場合はudpポート1514を開放します。
- ファイルウォールを確認します。
- sudo ufw status
- ファイアウォールが有効でudpポート1514が閉鎖されている場合は開放します。
- sudo ufw allow proto udp to 0.0.0.0/0 port 1514
- 設定した後に確認します。次のような記述があるはずです。
1514/udp ALLOW Anywhere
- ファイルウォールを確認します。
Graylogサーバのセットアップ
Graylogサーバでrsyslogを取得できるようにします。
- メニューから「System」-「Inputs」を選択します。
- 今回はrsyslogをUDPで送るように設定したのでInputsから「Syslog UDP」を選択します。
- 「Launch new input」ボタンを押下します。
- 項目「Title」に任意の名前を入力します。項目「Port」にrsyslogに設定したポート番号を入力します。今回はポート1514に設定したので1「1514」にします。Graylogは1024以下のポートを指定すると正しくログを取得しません。
入力した後に右下の「Save」ボタンを押下します。 - 「Show received messages」ボタンを押下すると取得したログが表示されます。
- メニューから「Search」を選択すると時間軸毎に取得したログメッセージと送信先サーバ名が表示されます。
以上