SpringBootを使用したGraylogへのロギング
1. 序章
Graylogはログ集約サービスです。 簡単に言えば、複数のソースから数百万のログメッセージを収集し、それらを単一のインターフェイスに表示することができます。
また、リアルタイムアラート、グラフやチャートを備えたダッシュボードなど、他の多くの機能も提供します。
このチュートリアルでは、Graylogサーバーをセットアップし、Spring Bootアプリケーションからサーバーにログメッセージを送信する方法を説明します。
2. グレイログの設定
Graylogをインストールして実行する方法はいくつかあります。 このチュートリアルでは、DockerとAmazonWebServicesの2つの最も簡単な方法について説明します。
2.1. Docker
次のコマンドは、必要なすべてのDockerイメージをダウンロードし、各サービスのコンテナーを開始します。
$ docker run --name mongo -d mongo:3
$ docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e ES_JAVA_OPTS="-Xms2g -Xmx4g" \
-e "discovery.type=single-node" -e "xpack.security.enabled=false" \
-e "bootstrap.memory_lock=true" --ulimit memlock=-1:-1 \
-d docker.elastic.co/elasticsearch/elasticsearch:5.6.11
$ docker run --name graylog --link mongo --link elasticsearch \
-p 9000:9000 -p 12201:12201 -p 514:514 -p 5555:5555 \
-e GRAYLOG_WEB_ENDPOINT_URI="http://127.0.0.1:9000/api" \
-d graylog/graylog:2.4.6-1
グレイログダッシュボードは、URL http:// localhost:9000 / を使用して利用できるようになり、デフォルトのユーザー名とパスワードは両方ともadminです。
Dockerのセットアップは最も簡単ですが、かなりの量のメモリを必要とします。 また、Docker for Macでは機能しないため、すべてのプラットフォームに適しているとは限りません。
2.2. アマゾンウェブサービス
テスト用にGraylogを設定するための次の最も簡単なオプションは、AmazonWebServicesです。 Graylogは、必要なすべての依存関係を含む公式AMIを提供しますが、インストール後に追加の構成が必要になります。
こちらをクリックしてリージョンを選択することで、GraylogAMIを使用してEC2インスタンスをすばやくデプロイできます。 Graylogは、少なくとも4GBのメモリを備えたインスタンスを使用することをお勧めします。
インスタンスが開始したら、ホストにSSHで接続し、いくつかの変更を加える必要があります。 次のコマンドは、Graylogサービスを構成します。
$ sudo graylog-ctl enforce-ssl
$ sudo graylog-ctl set-external-ip https://<EC2 PUBLIC IP>:443/api/
$ sudo graylog-ctl reconfigure
また、EC2インスタンスで作成されたセキュリティグループを更新して、特定のポートでのネットワークトラフィックを許可する必要があります。 次の図は、有効にする必要のあるポートとプロトコルを示しています。
グレイログダッシュボードは、URLを使用して利用できるようになりました https://
2.3. その他のGraylogインストール
DockerとAWSの他に、さまざまなオペレーティングシステム用のGraylogパッケージもあります。 このアプローチでは、ElasticSearchおよびMongoDBサービスもセットアップする必要があります。
このため、DockerとAWSは、特に開発とテストの目的で、セットアップがはるかに簡単です。
3. ログメッセージの送信
Graylogを起動して実行したら、Graylogサーバーにログメッセージを送信するようにSpringBootアプリケーションを構成する必要があります。
すべてのJavaロギングフレームワークは、GELFプロトコルを使用したGraylogサーバーへのメッセージの送信をサポートできます。
3.1. Log4J
現時点で公式にサポートされているロギングフレームワークはLog4Jのみです。 Graylogは、 MavenCentralで利用可能なアペンダーを提供します。
次のMaven依存関係を任意のpom.xmlファイルに追加することで有効にできます。
<dependency>
<groupId>org.graylog2</groupId>
<artifactId>gelfj</artifactId>
<version>1.1.16</version>
</dependency>
また、Spring Bootスターターモジュールを使用する場合は、ロギングスターターモジュールを除外する必要があります。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
これで、log4j.xmlファイルで新しいアペンダーを定義できます。
<appender name="graylog" class="org.graylog2.log.GelfAppender">
<param name="graylogHost" value="<GRAYLOG IP>"/>
<param name="originHost" value="localhost"/>
<param name="graylogPort" value="12201"/>
<param name="extractStacktrace" value="true"/>
<param name="addExtendedInformation" value="true"/>
<param name="facility" value="log4j"/>
<param name="Threshold" value="INFO"/>
<param name="additionalFields" value="{'environment': 'DEV', 'application': 'GraylogDemoApplication'}"/>
</appender>
これにより、INFOレベル以上のすべてのログメッセージがGraylogアペンダーに送信されるように構成され、GraylogアペンダーがログメッセージをGraylogサーバーに送信します。
3.2. その他のロギングフレームワーク
Graylogマーケットプレイスには、Logback、Log4J2などの他のさまざまなロギングフレームワークをサポートする追加のライブラリがあります。 これらのライブラリはGraylogによって維持されていないことに注意してください。 それらのいくつかは放棄されており、他の人はほとんどまたはまったく文書を持っていません。
これらのサードパーティライブラリに依存する場合は注意が必要です。
3.3. グレイログコレクターサイドカー
ログ収集のもう1つのオプションは、 Graylog CollectorSidecarです。 サイドカーは、ファイルコレクターに沿って実行され、ログファイルの内容をGraylogサーバーに送信するプロセスです。
Sidecarは、ログ構成ファイルの変更が不可能なアプリケーションに最適なオプションです。 また、ディスクから直接ログファイルを読み取るため、任意のプラットフォームおよびプログラミング言語からのログメッセージを統合するためにも使用できます。
4. グレイログでのメッセージの表示
Graylogダッシュボードを使用して、ログメッセージが正常に配信されたことを確認できます。 フィルタsource:localhost を使用すると、上記のサンプルlog4j構成からのログメッセージが表示されます。
5. 結論
Graylogは、多くのログ集約サービスの1つにすぎません。 何百万ものログメッセージをすばやく検索し、ログデータをリアルタイムで視覚化し、特定の条件が真になったときにアラートを送信できます。
GraylogをSpringBootアプリケーションに統合するには、数行の構成のみが必要であり、新しいコードは必要ありません。
コードサンプルは、いつものように、GitHubで見つけることができます。