Spring Bootを使用したGraylogへのロギング
1. 前書き
Graylogはログ集約サービスです。 簡単に言えば、複数のソースから数百万のログメッセージを収集し、それらを単一のインターフェースに表示することができます。
また、リアルタイムアラート、グラフやチャートを備えたダッシュボードなど、他の多くの機能も提供します。
このチュートリアルでは、Graylogサーバーをセットアップし、SpringBootアプリケーションからサーバーにログメッセージを送信する方法を説明します。
2. Graylogのセットアップ
Graylogをインストールして実行するには、いくつかの方法があります。 このチュートリアルでは、DockerとAmazon WebServicesの2つの最も簡単な方法について説明します。
2.1. 港湾労働者
次のコマンドは、必要なすべての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
グレイログダッシュボードは、URLhttp://localhost:9000/を使用して利用できるようになり、デフォルトのユーザー名とパスワードは両方ともadminになります。
Dockerセットアップは最も単純ですが、かなりの量のメモリが必要です。 また、Docker for Macでは機能しないため、すべてのプラットフォームに適しているとは限りません。
2.2. アマゾンウェブサービス
Graylogをテスト用にセットアップするための次の最も簡単なオプションは、Amazon Web Servicesです。 Graylog provides an official AMI that includes all the required dependencies。ただし、インストール後に追加の構成が必要です。
hereをクリックしてリージョンを選択することで、GraylogAMIを使用してEC2インスタンスをすばやくデプロイできます。 Graylog recommends using an instance with at least 4GB memory。
インスタンスが起動したら、ホストにSSHで接続し、いくつかの変更を行う必要があります。 次のコマンドは、Graylogサービスを構成します。
$ sudo graylog-ctl enforce-ssl
$ sudo graylog-ctl set-external-ip https://:443/api/
$ sudo graylog-ctl reconfigure
また、特定のポートでネットワークトラフィックを許可するには、EC2インスタンスで作成されたセキュリティグループを更新する必要があります。 以下の図は、有効にする必要があるポートとプロトコルを示しています。
グレイログダッシュボードは、URLhttps://<EC2 PUBLIC IP>/を使用して利用できるようになり、デフォルトのユーザー名とパスワードは両方ともadminになります。
2.3. その他のGraylogインストール
DockerとAWSの他に、さまざまなオペレーティングシステム用のGraylog packagesもあります。 With this approach, we also have to set up an ElasticSearch and MongoDB service。
このため、特に開発とテストの目的では、DockerとAWSのセットアップがはるかに簡単です。
3. ログメッセージの送信
Graylogを起動して実行したら、Graylogサーバーにログメッセージを送信するようにSpring Bootアプリケーションを構成する必要があります。
すべてのJavaロギングフレームワークは、GELFプロトコルを使用したGraylogサーバーへのメッセージ送信をサポートできます。
3.1. Log4J
現時点で公式にサポートされている唯一のロギングフレームワークはLog4Jです。 Graylogは、Maven centralで使用可能なアペンダーを提供します。
次のMaven依存関係を任意のpom.xmlファイルに追加することで有効にできます。
org.graylog2
gelfj
1.1.16
また、Spring Bootスターターモジュールを使用するすべての場所で、ロギングスターターモジュールを除外する必要があります。
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-logging
これで、log4j.xmlファイルに新しいアペンダーを定義できます。
これにより、INFOレベル以上のすべてのログメッセージがGraylogアペンダーに移動し、GraylogアペンダーがログメッセージをGraylogサーバーに送信します。
3.2. その他のロギングフレームワーク
Graylog marketplaceには、Logback、Log4J2などの他のさまざまなロギングフレームワークをサポートする追加のライブラリがあります。 Just beware that these libraries are not maintained by Graylog。 それらのいくつかは放棄されており、他のドキュメントはほとんどまたはまったくありません。
これらのサードパーティライブラリに依存する場合は注意が必要です。
3.3. グレイログコレクターサイドカー
ログ収集のもう1つのオプションは、Graylog Collector Sidecarです。 サイドカーは、ファイルコレクターに沿って実行されるプロセスであり、ログファイルの内容をGraylogサーバーに送信します。
Sidecarは、ログ構成ファイルの変更が不可能なアプリケーションに最適なオプションです。 また、ログファイルをディスクから直接読み取るため、it can also be used to integrate log messages from any platform and programming language。
4. Graylogでメッセージを表示する
5. 結論
Graylogは、多くのログ集約サービスの1つにすぎません。 数百万のログメッセージをすばやく検索し、ログデータをリアルタイムで視覚化し、特定の条件が満たされたときにアラートを送信できます。
GreylogをSpring Bootアプリケーションに統合するには、数行の設定だけで、新しいコードは必要ありません。
いつものように、コードサンプルはfound on GitHubにすることができます。