次の方法で共有


Elastic Stack を使用したログ記録

ヒント

このコンテンツは、Azure 用のクラウド ネイティブ .NET アプリケーションの設計に関する電子ブックからの抜粋であり、.NET Docs またはオフラインで読み取ることができる無料のダウンロード可能な PDF として入手できます。

Azure eBook 用の Cloud Native .NET アプリの表紙サムネイル。

多くの優れた集中ログ ツールがあり、無料のオープンソース ツールからより高価なオプションまで、コストが異なります。 多くの場合、無料ツールは有料の製品やサービスと同じくらい、時にはそれ以上に優れています。 そのようなツールの 1 つは、Elasticsearch、Logstash、Kibana の 3 つのオープンソース コンポーネントの組み合わせです。

これらのツールをまとめてエラスティック スタックまたは ELK スタックと呼びます。

Elastic Stack

Elastic Stack は、Kubernetes クラスターから情報を収集するための強力なオプションです。 Kubernetes では Elasticsearch エンドポイントへのログの送信がサポートされています。ほとんどの場合、開始する必要があるのは、図 7-5 に示すように環境変数を設定することです。

KUBE_LOGGING_DESTINATION=elasticsearch
KUBE_ENABLE_NODE_LOGGING=true

図 7-5。 Kubernetes の構成変数

この手順では、クラスターに Elasticsearch をインストールし、すべてのクラスター ログを送信するターゲットを設定します。

Kubernetes から取り込まれたログに対するクエリの結果を示す Kibana ダッシュボードの例 を図 7-6 に示します。 Kubernetes から取り込まれたログに対するクエリの結果を示す Kibana ダッシュボードの例

構成の詳細については、「 ログ記録の構成 (Kibana)」を参照してください。

Elastic Stack の利点は何ですか?

Elastic Stack は、低コストでスケーラブルでクラウドに優しい方法で一元的なログ記録を提供します。 そのユーザー インターフェイスは、データ分析を合理化し、不器用なインターフェイスと戦う代わりに、データから分析情報を収集するのに時間を費やすことができます。 分散アプリケーションがさまざまな種類のサービスにまたがるように、さまざまな入力をサポートしているため、ログとメトリック データをシステムに引き続きフィードできることが期待できます。 Elastic Stack は、大規模なデータ セット間でも高速検索をサポートしているため、大規模なアプリケーションでも詳細なデータをログに記録し、パフォーマンスの高い方法で可視化することができます。

Logstash

最初のコンポーネントは Logstash です。 このツールは、さまざまなソースからログ情報を収集するために使用されます。 たとえば、Logstash はディスクからログを読み取り、 Serilog などのログ ライブラリからメッセージを受信することもできます。 Logstash では、ログが到着すると、基本的なフィルター処理と拡張を行うことができます。 たとえば、ログに IP アドレスが含まれている場合、Logstash は地理的な検索を実行し、そのメッセージの国/地域または出発地を取得するように構成できます。

Serilog は、パラメーター化されたログ記録を可能にする .NET 言語用のログ ライブラリです。 フィールドを埋め込むテキスト ログ メッセージを生成する代わりに、パラメーターは個別に保持されます。 このライブラリを使用すると、よりインテリジェントなフィルター処理と検索が可能になります。 Logstash に書き込むための Serilog 構成の例を図 7-7 に示します。

var log = new LoggerConfiguration()
         .WriteTo.Http("http://localhost:8080")
         .CreateLogger();

図 7-7 HTTP 経由でログ情報を logstash に直接書き込むための Serilog 構成

Logstash では、図 7-8 に示すような構成が使用されます。

input {
    http {
        #default host 0.0.0.0:8080
        codec => json
    }
}

output {
    elasticsearch {
        hosts => "elasticsearch:9200"
        index=>"sales-%{+xxxx.ww}"
    }
}

図 7-8 Serilog からログを使用するための Logstash 構成

広範なログ操作が必要ないシナリオでは、 Beats と呼ばれる Logstash に代わる方法があります。 Beats は、ログからネットワーク データ、アップタイム情報まで、さまざまなデータを収集できるツールファミリです。 多くのアプリケーションでは Logstash と Beats の両方が使用されます。

Logstash によってログが収集されたら、ログを配置する場所が必要になります。 Logstash ではさまざまな出力がサポートされていますが、よりエキサイティングなものの 1 つは Elasticsearch です。

Elasticsearch

Elasticsearch は、ログの到着時にインデックスを作成できる強力な検索エンジンです。 これにより、ログに対するクエリの実行が迅速になります。 Elasticsearch は大量のログを処理でき、極端な場合は多数のノード間でスケールアウトできます。

パラメーターを含むよう作成されたログ メッセージ、または Logstash 処理によってパラメーターが分割されたログ メッセージは、Elasticsearch がこの情報を保持するため、直接クエリを実行できます。

図 7-9 に、 jill@example.comがアクセスした上位 10 ページを検索するクエリが表示されます。

"query": {
    "match": {
      "user": "jill@example.com"
    }
  },
  "aggregations": {
    "top_10_pages": {
      "terms": {
        "field": "page",
        "size": 10
      }
    }
  }

図 7-9 ユーザーがアクセスした上位 10 ページを検索するための Elasticsearch クエリ

Kibana Web ダッシュボードを使用した情報の視覚化

スタックの最後のコンポーネントは Kibana です。 このツールは、Web ダッシュボードで対話型の視覚化を提供するために使用されます。 ダッシュボードは、非技術的なユーザーでも作成できます。 Elasticsearch インデックスに存在するほとんどのデータは、Kibana ダッシュボードに含めることができます。 個々のユーザーが異なるダッシュボードの要望を持つ場合があり、Kibana では、ユーザー固有のダッシュボードを許可することでこのカスタマイズが可能になります。

Azure への Elastic Stack のインストール

Elastic Stack は、さまざまな方法で Azure にインストールできます。 常に、 仮想マシンをプロビジョニングし、Elastic Stack を直接インストールすることができます。 このオプションは、最も高度なカスタマイズ性を提供するため、経験豊富なユーザーによって推奨されます。 サービスとしてのインフラストラクチャにデプロイすると、管理オーバーヘッドが大きくなり、その道を選択した場合、マシンのセキュリティ保護やパッチで最新状態を維持するなど、サービスとしてのインフラストラクチャに関連するすべてのタスクを自分で行わなければなりません。

オーバーヘッドが少ないオプションは、Elastic Stack が既に構成されている多数の Docker コンテナーのいずれかを使用することです。 これらのコンテナーは、既存の Kubernetes クラスターにドロップし、アプリケーション コードと共に実行できます。 sebp/elk コンテナーは、適切に文書化され、テストされた Elastic Stack コンテナーです。

もう 1 つのオプションは、最近発表されたELKのサービス提供です

リファレンス