ノート:
- このチュートリアルではOracle Cloudへのアクセスが必要です。無料アカウントにサインアップするには、Oracle Cloud Infrastructure Free Tierの開始を参照してください。
- Oracle Cloud Infrastructureの資格証明、テナンシおよびコンパートメントの値の例を使用します。演習を完了するときは、これらの値をクラウド環境に固有の値に置き換えます。
Fluentdを使用したOCIログ・アナリティクスへのログの収集
イントロダクション
オープン・ソースのデータ収集ソフトウェアであるFluentdを使用して、ソースからログ・データを収集します。OCIログ・アナリティクス出力プラグインをインストールして、収集したログ・データをOracle Cloud Logging Analyticsにルーティングします。
ノート: Oracleでは、ログ・データをOracle Cloud Logging Analyticsに取り込むための最良の経験のためにOracle Cloud Management Agentを使用することをお薦めします。ただし、ユース・ケースでこれを選択できない場合は、FluentdのOCIログ・アナリティクス出力プラグインを使用します。
このチュートリアルでは、Oracle Linuxにインストールされているtd- agent rpmパッケージに基づくFluentd設定が使用されていますが、Fluentdの他のディストリビューションで必要なステップが類似している可能性があります。
Fluentdには、入力ソースからログ・データを収集し、ログを変換し、ログ・データを目的の出力にルーティングするために連携するコンポーネントがあります。様々なソースからログをOracle Cloud Logging Analyticsに取り込むようにFluentdの出力プラグインをインストールおよび構成できます。
図fluentd_plugin_overview.pngの説明
目的
- Oracleが提供するOCIロギング・アナリティクス出力プラグインをインストールして、ソースからログを取得する方法について学習します。
- Fluentd構成を作成して、ソースからLogging Analyticsへのログ収集を確立します。
OCIロギング・アナリティクス出力プラグインのバージョン1.xから2.xへの移行
OCIロギング・アナリティクス出力プラグインの新しいユーザーで、まだダウンロードしてインストールしていない場合は、このサブセクションをスキップして前提条件に進みます。ファイル fluent-plugin-oci-logging-analytics-1.0.0.gem
を使用してプラグイン version 1.xをインストールした場合は、プラグイン version 2.xに移行するために必要な変更に注意してください。
- version 2.xでは、次の構成パラメータの名前が変更されています。
1.x | 2.x |
---|---|
global_metadata | oci_la_global_metadata |
メタデータ | oci_la_metadata |
エンティティID | oci_la_entity_id |
entityType | oci_la_entity_type |
logSourceName | oci_la_log_source_name |
logPath | oci_la_log_path |
logGroupId | oci_la_log_group_id |
- OCIロギング・アナリティクス出力プラグイン・ログの自動パージのサポートが追加されました。
- パラメータ
plugin_log_rotation
は非推奨になりました。かわりに、パラメータplugin_log_file_size
とplugin_log_file_count
を組み合せて使用して、同じアクションを実行します。 - Install the Output Pluginのセクションにあるコマンドを使用して、プラグイン version 2.xをインストールします。
前提条件
-
Fluentdと入力プラグインのインストール: 次のステップを実行する前に、入力ソースのFluentdおよび関連する入力プラグインがインストールされていることを確認してください。
Fluentd Documentationを参照してください。
-
キー・リソースの階層の理解: エンティティ、ソースおよびパーサーは、ログ収集の設定に使用されるOracle Cloud Logging Analyticsのキー・リソースの一部です。ログ・エクスプローラでログの表示を開始する前に、それらの相互依存関係を理解して前提条件タスクを実行します。
Logging Analyticsのドキュメンテーション: ログ・分析についてを参照してください。
-
ログ・アナリティクスの有効化: ログ・アナリティクス・ドキュメント: クイック・スタート。エンティティのOCIDとタイプ、および後のセクションで使用するログ・グループのOCIDに注意してください。
-
ソースおよびパーサーの作成: 後続のセクションでエンティティに関連付けるために構成で指定する必要がある既存のOracle定義またはユーザー定義のソースおよびパーサーを識別します。または、ユースケースに合せて独自のパーサーおよびソースを作成できます。
ログ・アナリティクスのドキュメント: パーサーの作成およびログ・アナリティクスのドキュメント: ソースの構成を参照してください。
-
マルチ・プロセス・ワーカー機能: トラフィックが増えるほど、FluentdはCPUの境界を広げる傾向があります。このような場合は、複数ワーカー機能の使用を検討してください。
Fluentd Documentation: Multi Process WorkersおよびFluentd Documentation: Performance Tuningを参照してください。
-
認証: OCIに接続するには、OCIコンソールから作成できるAPI署名キーが必要です。
OCIドキュメンテーション: API署名キーの作成方法を参照してください。
Fluentd構成ファイルの作成
Oracle Cloud Logging Analyticsにログ・データをルーティングするようにFluentdを構成するには、Fluentdまたはtd- agentが提供する構成ファイルを編集し、Oracle Cloud Logging Analyticsおよびその他のカスタマイズに関連する情報を指定します。
Fluentd出力プラグイン構成は、次の形式になります。
<match pattern>
@type oci-logging-analytics
namespace <YOUR_OCI_TENANCY_NAMESPACE>
# Auth config file details
config_file_location ~/.oci/config
profile_name DEFAULT
# When there is no credentials for proxy
http_proxy "#{ENV['HTTP_PROXY']}"
# To provide proxy credentials
proxy_ip <IP>
proxy_port <port>
proxy_username <user>
proxy_password <password>
# Configuration for plugin (oci-logging-analytics) generated logs
plugin_log_location "#{ENV['FLUENT_OCI_LOG_LOCATION'] || '/var/log'}"
plugin_log_level "#{ENV['FLUENT_OCI_LOG_LEVEL'] || 'info'}"
plugin_log_rotation "#{ENV['FLUENT_OCI_LOG_ROTATION'] || 'daily'}" **(DEPRECATED)**
plugin_log_file_size "#{ENV['FLUENT_OCI_LOG_AGE'] || '1MB'}"
plugin_log_file_count "#{ENV['FLUENT_OCI_LOG_AGE'] || '10'}"
# Buffer Configuration
<buffer>
@type file
path "#{ENV['FLUENT_OCI_BUFFER_PATH'] || '/var/log'}"
flush_thread_count "#{ENV['FLUENT_OCI_BUFFER_FLUSH_THREAD_COUNT'] || '10'}"
retry_wait "#{ENV['FLUENT_OCI_BUFFER_RETRY_WAIT'] || '2'}" #seconds
retry_max_times "#{ENV['FLUENT_OCI_BUFFER_RETRY_MAX_TIMES'] || '10'}"
retry_exponential_backoff_base "#{ENV['FLUENT_OCI_BUFFER_RETRY_EXPONENTIAL_BACKOFF_BASE'] || '2'}" #seconds
retry_forever true
overflow_action block
disable_chunk_backup true
</buffer>
</match>
出力プラグインがバッファーチャンクの書き込みで引き続き失敗し、再試行のタイムアウトしきい値を超えた場合に、Fluentdがバックアップデータをダンプするために使用するセカンダリプラグインを構成することをお勧めします。また、回復不能なエラーの場合、Fluentdはチャンクをただちに中止し、セカンダリまたはバックアップディレクトリに移動します。Fluentd Documentation: Second Outputを参照してください。
出力プラグイン構成パラメータ
Fluentd構成ファイルの次のパラメータに適切な値を入力します。
構成パラメータ | 説明 |
---|---|
namespace (必須パラメータ) | 収集されたログ・データのアップロード先となるOCIテナンシ・ネームスペース |
config_file_location | OCI認証詳細を含む構成ファイルの場所 |
profile_name | 構成ファイルから使用されるOCI構成プロファイル名 |
http_proxy | 資格証明のないプロキシ。例: www.proxy.com:80 |
proxy_ip | 資格証明が必要な場合のプロキシIP詳細。例: www.proxy.com |
proxy_port | 資格証明が必要な場合のプロキシ・ポートの詳細。例: 80 |
proxy_username | プロキシ・ユーザー名の詳細 |
proxy_password | 資格証明が必要な場合のプロキシ・パスワードの詳細 |
plugin_log_location | 独自のログを書き込む出力プラグインのファイル・パス。パスが存在し、アクセスできることを確認してください。デフォルト値: 作業ディレクトリ。 |
plugin_log_level | 出力プラグイン・ロギング・レベル: DEBUG < INFO < WARN < ERROR < FATAL < UNKNOWN。デフォルト値: INFO。 |
plugin_log_rotation | (非推奨)プラグイン・ログ・ファイルのローテーション頻度(日次、週次または月次)を出力します。デフォルト値: Daily。 |
plugin_log_file_size | ローテーションするログ・ファイルの最大サイズ(1KB、1MBなど)。デフォルト値: 1MB。 |
plugin_log_file_count | 保持するアーカイブ/ローテーションされたログ・ファイルの数(0より大きい)。デフォルト値: 10。 |
OCIコンピュート・ノードのパラメータconfig_file_locationおよびprofile_nameを指定しない場合、instance_principalベースの認証が使用されます。
バッファ構成パラメータ
前のセクションで編集したのと同じ構成ファイルで、バッファ・セクションを変更し、次の必須情報を指定します。
必須パラメータ | 説明 |
---|---|
@type | バックエンドとして使用するプラグインを指定します。fileと入力します。 |
パス | バッファ・ファイルが格納されるパス。パスが存在し、アクセスできることを確認してください。 |
次のオプション・パラメータをバッファ・ブロックに含めることができます。
オプションのパラメータ | デフォルト値 | 説明 |
---|---|---|
flush_thread_count | 1 |
チャンクをパラレルにフラッシュ/書込みするスレッドの数。 |
retry_wait | 1s |
次の再試行がフラッシュされるまで待機する秒数。 |
retry_max_times | なし |
これは、retry_foreverフィールドがfalseの場合のみ必須です。 |
retry_exponential_backoff_base | 2 |
次の指数バックオフの定数の前に待機する秒数。 |
retry_forever | false |
trueの場合、プラグインは retry_max_timesオプションを無視し、永久にフラッシュを再試行します。 |
overflow_action | throw_exception |
使用可能な値: throw_exception / block / drop_oldest_chunk。推奨値: ブロック。 |
disable_chunk_backup | false |
falseを指定すると、バックアップディレクトリ内の回復不可能なチャンクが破棄されます。 |
chunk_limit_size | 8MB |
各チャンクの最大サイズ。イベントは、チャンクのサイズがこのサイズになるまでチャンクに書き込まれます。ノート: 指定した値に関係なく、現在ロギング・アナリティクス出力プラグインでは値が1MBにデフォルト設定されます。 |
total_limit_size | 64GB (ファイル用) |
ストアド・バッファの合計サイズがこのしきい値に達すると、追加操作はすべてエラーで失敗し、データは失われます。 |
flush_interval | 60s |
出力プラグインへのチャンクのフラッシュの頻度。 |
パラメータの可能な値の詳細は、Fluentd Documentation: Buffer Pluginsを参照してください。
受信ログ・イベントの書式の確認
Oracleが提供するFluentdプラグインがログ・データを処理し、チャンク化してOracle Cloud Logging Analyticsに転送できるように、受信ログ・イベントは特定の形式である必要があります。
例の入力構成で、syslog
、apache
およびkafka
ログ・ファイルの監視に使用できる構成例を表示します。
ソース/入力プラグイン構成
syslogログのソース構成の例:
<source>
@type tail
@id in_tail_syslog
multiline_flush_interval 5s
path /var/log/messages*
pos_file /var/log/messages*.log.pos
read_from_head true
path_key tailed_path
tag oci.syslog
<parse>
@type json
</parse>
</source>
ソース・ブロックを定義するには、次のパラメータが必須です。
-
@type: 入力プラグイン・タイプ。ローカル・ファイルからのイベントの消費にはtarを使用します。その他に指定できる値は、http、forwardです。
-
path: ソースファイルのパス。
-
tag: OracleのFluentdプラグインがロギング分析で消費する必要があるログ・イベントをフィルタするために使用するタグ。必ず接頭辞ociを使用してください(例:
oci.syslog
)。 -
解析ディレクティブ: 構成ファイルに解析ディレクティブを定義しないことをお薦めします。値
<parse> @type none </parse>
を保持します。かわりに、ロギング・アナリティクスによって提供されるOracle定義のパーサーおよびソースを使用するか、ログ・アナリティクスで独自のパーサーおよびソースを作成できます。jsonラッパーでラップされたログの場合は、解析ディレクティブ<parse> @type json </parse>
を使用します。record_transformerフィルタのメッセージ・フィールドを値${record["log"]}
でオーバーライドします。ノート:
-
Fluentdパーサーを使用しないことをお薦めします。かわりに、ログを元の形式でロギング・アナリティクスに送信します。解析ディレクティブの形式は、次のとおりです。
<parse> @type none </parse>
-
ただし、複数行ログエントリの場合は、複数行パーサータイプを使用して、ログの複数の行を単一のレコードとして送信します。次に例を示します。
<parse> @type multiline format_firstline /^\S+\s+\d{1,2}\s+\d{1,2}:\d{1,2}:\d{1,2}\s+/ format1 /^(?<message>.*)/ </parse>
-
キーと値のペアの1つのキーがログであるjsonラッパーによってラップされる元のログでは、次の解析ディレクティブを使用することをお薦めします。
<parse> @type json </parse>
また、record_transformerフィルタの
message
フィールドをmessage ${record["log"]}
でオーバーライドします。たとえば、kafkaログの次のフィルタ・ブロックでは、ログ・コンテンツは、jsonにラップされたキーログの値に格納されます。``` <filter oci.kafka> @type record_transformer enable_ruby true <record> oci_la_metadata KEY_VALUE_PAIRS oci_la_entity_id LOGGING_ANALYTICS_ENTITY_OCID # If same across sources. Else keep this in individual filters oci_la_entity_type LOGGING_ANALYTICS_ENTITY_TYPE # If same across sources. Else keep this in individual filters oci_la_log_source_name LOGGING_ANALYTICS_SOURCENAME oci_la_log_group_id LOGGING_ANALYTICS_LOGGROUP_OCID oci_la_log_path "${record['tailed_path']}" message ${record["log"]} # Will assign the 'log' key value from json wrapped message to 'message' field tag ${tag} </record> </filter> ```
-
次のオプション・パラメータをソース・ブロックに含めることができます。
- multiline_flush_interval: すべてのログがロギング・アナリティクスによって消費されるように、マルチライン・ログに対してのみこの値を設定します。値が複数行ログ用に設定されていない場合、Fluentdは次のレコード・バッチの待機モードのままになります。デフォルトで、このパラメータは無効です。
- pos_file: このパラメータを使用して、Fluentdが最後に読み取った位置のレコードを保持するファイルを指定します。
その他のパラメータについては、Fluentd Documentation: tailを参照してください。
フィルタ構成
これらのパラメータを使用して、ログの処理に使用するロギング・アナリティクス・リソースをリストします。
入力ソースからのログが Oracleによって提供される出力プラグインによって処理されるようにするには、record_transformerフィルタプラグインを構成して、それに応じて形式を変更することによって、入力ログイベントが規定された形式に準拠していることを確認します。
ヒント: record_transformerフィルタプラグインの構成は、受信イベントに必要なパラメータを含める方法の1つにすぎません。その他の方法については、Fluentd Documentationを参照してください。
フィルタ構成の例:
<filter oci.kafka>
@type record_transformer
enable_ruby true
<record>
oci_la_metadata KEY_VALUE_PAIRS
oci_la_entity_id LOGGING_ANALYTICS_ENTITY_OCID # If same across sources. Else keep this in individual filters
oci_la_entity_type LOGGING_ANALYTICS_ENTITY_TYPE # If same across sources. Else keep this in individual filters
oci_la_log_source_name LOGGING_ANALYTICS_SOURCENAME
oci_la_log_group_id LOGGING_ANALYTICS_LOGGROUP_OCID
oci_la_log_path "${record['tailed_path']}"
message ${record["log"]} # Will assign the 'log' key value from json wrapped message to 'message' field
tag ${tag}
</record>
</filter>`
フィルタ・ブロックに次の必須情報を指定します。
<filter oci.kafka>
: ソース・ブロックで指定されたタグのフィルタ・ブロックを定義するパラメータ。- @type record_transformer: レコード・トランスフォーマ・プラグインは、元のログ・レコードをOCIロギング・アナリティクス出力プラグインで消費できるフォームに変換します。
- enable_ruby: これにより、
${...}
内でRuby式を使用できます。 - oci_la_entity_id: ホストをマップするための前提条件タスクで以前に作成したロギング・アナリティクス・エンティティのOCID。
- oci_la_entity_type: 前提条件タスクで以前に作成したロギング・アナリティクス・エンティティのエンティティ・タイプ。
- oci_la_log_source_name: ログ・レコードの処理に使用するロギング・アナリティクス・ソース。
- oci_la_log_path: ログ・ファイルの元の場所を指定します。
oci_la_log_path
の値が非公開または無効な場合は、次のようになります。- tagが使用可能な場合、oci_la_log_pathとして使用されます
- tagが使用できない場合、oci_la_log_pathは UNDEFINEDに設定されます
- oci_la_log_group_id: ログを格納する必要があるロギング・アナリティクス・ログ・グループのOCID。
オプションで、フィルタ・ブロックに次の追加パラメータを指定できます。
<filter oci.**>
: このフィルタを使用して、すべてのソースに適用可能な構成情報を指定します。このフィルタを使用する場合は、最初にフィルタ間の実行順であることを確認します。グローバル・フィルタと個々のソース・フィルタの両方で同じキーが指定されている場合、ソース・レベルのフィルタ値はグローバル・フィルタをオーバーライドします。すべてのタグの接頭辞としてoci
を使用することをお薦めします。- oci_la_global_metadata: このパラメータを使用して、ログ・アナリティクスに対する元のログ・コンテンツに加えて、
'key1': 'value1', 'key2': 'value2'
という形式で追加のメタデータを指定します。ここで、キーはロギング・アナリティクスのフィールドで、ここで指定する前に定義しておく必要があります。グローバル・メタデータはすべてのログ・ファイルに適用されます。 - oci_la_metadata: このパラメータを使用して、
'key1': 'value1', 'key2': 'value2'
というフォーマットで、元のログ・コンテンツとともに追加のメタデータをロギング・アナリティクスに定義します。ここで、キーはロギング・アナリティクスのフィールドで、ここで指定する前に定義しておく必要があります。 - tag: このパラメータを使用して、内部使用のためにメッセージにタグをアタッチします。
tag ${tag}
の形式で指定します。 - message ${record["log"]}: 元のログ・メッセージがjson内のlog属性の値である場合に、jsonラッパーでラップされるログにこのパラメータを含めます。
次のログの監視に使用できる構成の例:
出力プラグインのインストール
Oracleが提供するgemファイルを使用して、OCIロギング・アナリティクス出力プラグインをインストールします。この項のステップは、Oracle Linuxにインストールされているtd- agent rpmパッケージに基づくFluentd設定用です。
-
次のコマンドを実行して、出力プラグインをインストールします。
gem install fluent-plugin-oci-logging-analytics
詳細は、RubyGems: https://rubygems.org/gems/fluent-plugin-oci-logging-analyticsのFluentd Output plugin to Ship log/events to OCI Logging Analyticsを参照してください。
-
Systemdは、td- agentユーザーでtd- agentを起動します。td- agentユーザーにOCIファイルおよびフォルダへのアクセス権を付与します。td- agentをサービスとして実行するには、OCIロギング・アナリティクス出力プラグイン・フォルダおよび.OCI pemファイル(
chown td-agent [FILE]
など)に対してchown
またはchgrp
コマンドを実行します。 -
Oracle Cloud Logging Analyticsでログの収集を開始するには、td- agentを実行します:
TZ=utc /etc/init.d/td-agent start
ログ収集中または設定中に問題が発生した場合は、ログ・ファイル
/var/log/td-agent/td-agent.log
を使用してデバッグできます。td- agentを任意の時点で停止するには、次のコマンドを実行します。
TZ=utc /etc/init.d/td-agent stop
ログ・アナリティクスのログの表示の開始
「ログ・エクスプローラ」に移動し、Oracle Cloud Logging Analyticsの「ビジュアル化」パネルを使用して、ログ・データをわかりやすく分析できる形式で表示します。データ・セットで実現するものに基づいて、アプリケーションに最適なビジュアライゼーション・タイプを選択できます。
検索問合せを作成および実行した後で、さらに再利用するためのウィジェットとしてログ検索を保存および共有できます。
Oracle定義ウィジェットまたは作成したカスタム・ウィジェットを追加して、「ダッシュボード」ページでカスタム・ダッシュボードを作成できます。
Prometheusを使用したFluentdの監視
Prometheusを使用してFluentdをオプションでモニターできます。FluentdからPrometheusに発行された次のメトリックやその他のメトリックを公開する手順については、Fluentd Documentation: Monitoring by Prometheusを参照してください。Fluentdコアおよびこれらのメトリックのみをモニターする場合は、参照されるFluentdドキュメントのステップ1: Prometheusフィルタ・プラグインによる受信レコードのカウントおよびステップ2: Prometheus出力プラグインによる送信レコードのカウントのステップをスキップします。
Fluentdプラグインは、Prometheus形式で次のメトリックを発行します。これは、プラグインによって収集および処理されるデータに関するインサイトを提供します。
Metric Name: oci_la_fluentd_output_plugin_records_received
labels: [:tag,:oci_la_log_group_id,:oci_la_log_source_name,:oci_la_log_set]
Description: Number of records received by the OCI Logging Analytics Fluentd output plugin.
Type : Gauge
Metric Name: oci_la_fluentd_output_plugin_records_valid
labels: [:tag,:oci_la_log_group_id,:oci_la_log_source_name,:oci_la_log_set]
Description: Number of valid records received by the OCI Logging Analytics Fluentd output plugin.
Type : Gauge
Metric Name: oci_la_fluentd_output_plugin_records_invalid
labels: [:tag,:oci_la_log_group_id,:oci_la_log_source_name,:oci_la_log_set,:reason]
Description: Number of invalid records received by the OCI Logging Analytics Fluentd output plugin.
Type : Gauge
Metric Name: oci_la_fluentd_output_plugin_records_post_error
labels: [:tag,:oci_la_log_group_id,:oci_la_log_source_name,:oci_la_log_set,:error_code, :reason]
Description: Number of records failed posting to OCI Logging Analytics by the Fluentd output plugin.
Type : Gauge
Metric Name: oci_la_fluentd_output_plugin_records_post_success
labels: [:tag,:oci_la_log_group_id,:oci_la_log_source_name,:oci_la_log_set]
Description: Number of records posted by the OCI Logging Analytics Fluentd output plugin.
Type : Gauge
Metric Name: oci_la_fluentd_output_plugin_chunk_time_to_receive
labels: [:tag]
Description: Average time taken by Fluentd to deliver the collected records from Input plugin to OCI Logging Analytics output plugin.
Type : Histogram
Metric Name: oci_la_fluentd_output_plugin_chunk_time_to_post
labels: [:oci_la_log_group_id]
Description: Average time taken for posting the received records to OCI Logging Analytics by the Fluentd output plugin.
Type : Histogram
さらに学ぶ
- Fluentdのドキュメント
- ログ・アナリティクスのドキュメント: チャートおよびコントロールを使用したデータのビジュアル化
- 「Logging Analytics」ドキュメント: ダッシュボードの作成
- ロギング分析ドキュメント: ログ検索の保存および共有
その他の学習リソース
他のラボをdocs.oracle.com/learnで探すか、Oracle LearningのYouTubeチャネルでより無料の学習コンテンツにアクセスします。また、education.oracle.com/learning-explorerにアクセスしてOracle Learningエクスプローラになります。
製品ドキュメントについては、Oracle Help Centerを参照してください。
Ingest logs to OCI Logging Analytics using Fluentd
F46550-04
October 2022
Copyright © 2022, Oracle and/or its affiliates.