Graylog: 入力タイプの選択

適切なGraylog入力タイプの選び方

👋 Stackheroのドキュメントへようこそ!

Stackheroは、数多くの利点を提供する、すぐに使えるGraylogクラウドソリューションを提供しています。

  • 無制限で専用のSMTP メールサーバーが含まれています。
  • ワンクリックで簡単にアップデート
  • HTTPSで保護されたカスタマイズ可能なドメイン名(例: https://logs.your-company.com)。
  • プライベートで専用のVMによる最適なパフォーマンスと強力なセキュリティ

時間を節約し、生活を簡素化:StackheroのGraylogクラウドホスティングソリューションを試すのに5分しかかかりません!

Graylogはさまざまな入力タイプを提供しています。これらの入力を利用することで、ログをGraylogサーバーに送信したり、Graylogが他のソースからログを取得したりすることができます。

ほとんどの場合、アプリケーションやデバイスからGraylogサーバーへデータを送信することになるでしょう。 Graylogが他の場所からログを取得する高度なケースについては本ガイドでは扱いませんが、もしそのような用途が必要な場合も、設定は非常に簡単ですのでご安心ください。

最適な入力タイプを選択するには、まずGraylogに送信したいログのフォーマットを決める必要があります。下記で詳しく説明する通り、GELFフォーマットの利用を推奨します。

次に、UDPまたはTCPのどちらのプロトコルを使用するかを選択します。

最初の判断ポイントは、ログメッセージのフォーマットを選ぶことです。主に3つの選択肢があります:RAW/PlaintextSyslogGELFです。

これは最もシンプルなフォーマットです。プレーンテキストメッセージをそのまま送信するため、どのようなシステムでも利用できます。非常に簡単に使えるため、netcatユーティリティを使った初期テストなどに最適です。

テストする場合は、「Raw/Plaintext UDP」入力を作成し、以下のいずれかのコマンドラインでテストログを送信できます:

  1. macOSの場合:echo "Hello Graylog from UDP" | nc -u -w1 -c <XXXXXX>.stackhero-network.com 5555
  2. Linuxの場合:echo "Hello Graylog from UDP" | nc -u -w1 <XXXXXX>.stackhero-network.com 5555

とても簡単ですよね?ただし、これは基本的なフォーマットのため、すぐに制限に直面することになります。そのため、簡単なテスト以外での利用は推奨しません。

これはサーバー環境で広く利用されている有名なフォーマットです。Linux、Windows、*BSDなど、さまざまなOSで利用されています。

Syslog、Rsyslog、または互換性のあるサービスを利用してサーバーからGraylogへログを送信したい場合は、syslog入力が最もシンプルな選択肢です。

ただし、GELFの方がより高機能なため、GELFフォーマットでメッセージを送信できる場合は、そちらを推奨します(詳細は下記参照)。

syslogフォーマットは1024文字までの制限がある点にご注意ください。

GELFは「Graylog Extended Log Format」の略です。このフォーマットはGraylogによって開発され、多くの製品で広く採用されており、事実上の標準となっています。

GELFフォーマットの強みは、ログを構造化して送信できる点です。構造化ログにより、単一の非構造化テキストメッセージではなく、複数のフィールドと値を送信できます。これにより、Graylog側での解析や情報の抽出が容易になります。

例えば、IPアドレスとリクエストタイプを含むログを送信したい場合、iprequest_typeという2つのフィールドを持つメッセージを送信できます。Graylog側では、request_type: POSTのようなクエリで直接これらのフィールドを検索できます。

GELFはJSONベースであり、最低限versionhostshort_messageフィールドを含める必要があります。追加フィールドを定義する場合は、フィールド名の先頭にアンダースコア(_)を付けてください。

例えば、device_idという追加フィールドを持つシンプルなメッセージは以下のようになります:

{
  "version": "1.1",
  "host": "myIotDevice",
  "short_message": "Something is happening",
  "_device_id": "abcd"
}

この場合、Graylogでdevice_id: abcdというクエリを使って、デバイス「abcd」からの全メッセージを検索できます。

GELFの詳細については、公式仕様書をご参照ください:https://docs.graylog.org/en/4.0/pages/gelf.html

サーバーやアプリケーションからログを送信したい場合は、自動的にメッセージを生成・送信できる各種ライブラリが利用可能です。Node.js.NETPython向けのサンプルも用意されています。

適切なフォーマット(ぜひGELFを選択してください!)を決めたら、TCPとUDPのどちらの通信プロトコルを使うかを選択します。

UDPプロトコルは非常にシンプルです。アプリケーションはサーバーにメッセージを送信しますが、受信確認は不要です。クライアントとサーバー間での対話はなく、サーバーがメッセージを受信したかどうかの確認は行われません。

この方式のメリットは、Graylogサーバーが遅い場合やダウンしている場合でも、アプリケーションのパフォーマンスに影響を与えない点です。一方で、アプリケーションから送信したすべてのログが必ずサーバーに届く保証はありません。また、UDPでは暗号化も利用できません。

  1. Graylogが遅い、またはダウンしていてもアプリケーションに影響しません。
  1. 一部のメッセージが失われる可能性があります。
  2. 暗号化は利用できません。
  3. メッセージサイズは8192バイトまでに制限されます。

TCPプロトコルはUDPと異なり、アプリケーションとGraylog間で情報のやり取りが行われます。つまり、Graylogがメッセージを受信したことを確認できます。

TCPの利点は、Graylogがメッセージを受信しなかった場合(たとえばサーバーがダウンしている場合)に再送信できる点です。一方で、Graylogが遅い、または応答しない場合、アプリケーションは応答またはタイムアウトを待つ必要があり、パフォーマンスに影響を与える可能性があります。

さらに、TLS(SSLとも呼ばれます)による通信の暗号化も可能です。

  • メッセージが確実に受信されたことを保証できます。
  • 暗号化(TLS)が利用可能です。
  • メッセージサイズの制限がありません。
  • Graylogの応答が遅い、またはダウンしている場合、送信側のアプリケーションが遅くなる可能性があります。

本ガイドが、Graylogにログを送信する際の最適なフォーマットとプロトコル選択の参考になれば幸いです。

なお、異なるポートを利用することで複数の入力を同時に稼働させることも可能です。たとえば、ポート514で「syslog UDP」入力、ポート12201で「GELF TCP」入力を同時に利用できます。