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見つけることができます。