簡介
使用開放原始碼資料收集器軟體 Fluentd 從您的來源收集日誌資料。安裝 OCI Log Analytics 輸出 Plugin,將收集的日誌資料遞送至 Oracle Cloud Log Analytics。
注意:Oracle 建議您使用 Oracle Cloud Management Agent 來獲得將日誌資料擷取至 Oracle Cloud Log Analytics 的最佳體驗。不過,如果無法為您的使用案例選擇此選項,則僅使用適用於 Fluentd 的 OCI Log Analytics 輸出外掛程式。
在本教學課程中,Fluentd 設定是根據 Oracle Linux 上安裝的 td-agent rpm 套裝軟體所使用,但所需步驟可能與 Fluentd 的其他發行版本類似。
Fluentd 具有可共同運作的元件,可收集來自輸入來源的日誌資料、轉換日誌,以及將日誌資料遞送至所需的輸出。您可以安裝並設定 Fluentd 的輸出 Plugin,以從各種來源將日誌攝取至 Oracle Cloud Log Analytics。

圖解描述 fluentd_plugin_overview.png
目標
- 瞭解如何安裝 Oracle 提供的 OCI Log Analytics 輸出外掛程式,以便從您的來源擷取日誌。
 - 建立 Fluentd 組態,以建立從來源到 Log Analytics 的日誌收集。
 
將 OCI Log Analytics 輸出 Plugin 從 1.x 版本移轉至 2.x
如果您是 OCI Log Analytics 輸出 Plugin 的新使用者,而且尚未下載並安裝,請略過此區段並前往先決條件。如果您已使用 fluent-plugin-oci-logging-analytics-1.0.0.gem 檔案安裝外掛程式 version 1.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 Log Analytics 輸出 Plugin 日誌。
 - 參數 
plugin_log_rotation現在已不再使用。請改用plugin_log_file_size和plugin_log_file_count參數來執行相同的動作。 - 使用安裝輸出 Plugin 一節中可用的命令來安裝 Plugin version 2.x 。
 
執行先決任務
- 
    
安裝 Fluentd 和輸入 Plugin :執行下列步驟之前,請先確定您已為您的輸入來源安裝 Fluentd 和相關的輸入 Plugin。
請參閱 Fluentd 文件。
 - 
    
瞭解重要資源的階層:實體、來源以及剖析器是 Oracle Cloud Log Analytics 中用於設定日誌收集的一些主要資源。在開始檢視日誌總管中的日誌之前,請先瞭解它們的相互相依性以執行先決條件作業。
 - 
    
啟用 Log Analytics :Log Analytics 文件:快速入門。請記下您實體的 OCID 和類型,以及稍後區段中所要使用之日誌群組的 OCID。
 - 
    
建立來源和剖析器:識別必須在組態中指定的現有 Oracle 定義或使用者定義的來源和剖析器,以與後續段落中的個體建立關聯。或者,您可以建立自己的剖析器和來源,以符合您的使用案例。
請參閱 Log Analytics Documentation:Create a Parser 與 Log Analytics Documentation:Configure Sources 。
 - 
    
多處理作業工作者功能:Fluentd 流量越來越多,CPU 傾向於使用。在此情況下,請考慮使用多重工作者功能。
請參閱 Fluentd Documentation:Multi Process Workers 和 Fluentd Documentation:Performance Tuning 。
 - 
    
認證:若要連線至 OCI,您必須要有可從 OCI 主控台建立的 API 簽署金鑰。
 
建立 Fluentd 組態檔
若要設定 Fluentd 將日誌資料遞送至 Oracle Cloud Log Analytics,請編輯 Fluentd 或 td-agent 提供的組態檔,並提供與 Oracle Cloud Log 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>
建議設定次要 Plugin,當輸出 Plugin 持續無法寫入緩衝區區塊且超過重試的逾時臨界值時,Fluentd 會使用此次要 Plugin 來傾印備份資料。此外,如果發生無法復原的錯誤,Fluentd 會立即中止區塊,並將它移到次要或備份目錄中。請參閱 Fluentd 文件:次要輸出。
輸出外掛程式設定參數
提供適合的值給 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 的檔案路徑。請確定路徑存在且可供存取。預設值:工作目錄。 | 
| plugin_log_level | 輸出外掛程式紀錄等級 :除錯 < 資訊中 < 警告 < 錯誤 < 嚴重 < 未知 。預設值:INFO 。 | 
| plugin_log_rotation | (已棄用) 輸出 Plugin 日誌檔循環頻率:每日、每週或每月。預設值:每日。 | 
| plugin_log_file_size | 要循環日誌檔的日誌檔大小上限。(1KB、1MB 等)。預設值:1 MB。 | 
| plugin_log_file_count | 要保留的存檔 / 循環日誌檔數目 (大於 0)。預設值:10。 | 
如果您未指定 OCI Compute 節點的參數 config_file_location 和 profile_name ,則會使用以 instance_principal 為基礎的認證。
緩衝區組態參數
在您在上一節編輯的相同組態檔中,修改緩衝區區段並提供下列必要資訊:
| 必要的參數 | 描述 | 
|---|---|
| @type | 這裡指定後端使用的外掛程式 。輸入 file 。 | 
| 路徑 | 儲存緩衝區檔案的路徑。請確定路徑存在且可供存取。 | 
緩衝區區塊中包含下列選擇性參數:
| 選擇性參數 | 預設值 | 描述 | 
|---|---|---|
| flush_thread_count | 1 | 
      平行排清 / 寫入區塊的繫線數目。 | 
| retry_wait | 1s | 
      在下次重試排清之前等待秒數。 | 
| retry_max_times | none | 
      只有在 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 | 
      每個區塊的大小上限。這些事件會寫入區塊中,直到區塊大小變為此大小為止。注意:無論指定的值為何,Log Analytics 輸出 Plugin 目前會將值預設為 1MB。 | 
| total_limit_size | 64GB (適用於檔案) | 
      儲存的緩衝區大小總計達到此臨界值之後,所有附加作業都會因發生錯誤而失敗 (資料將會遺失)。 | 
| flush_interval | 60s | 
      將區塊排清至輸出 Plugin 的頻率。 | 
如需參數可能值的詳細資料,請參閱 Fluentd 文件:緩衝區外掛程式。
驗證內送日誌事件的格式
內送日誌事件必須使用特定格式,Oracle 提供的 Fluentd Plugin 才能處理日誌資料、將日誌分塊,並將其傳輸至 Oracle Cloud Log 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 :輸入 Plugin 類型。使用尾部來使用本機檔案的事件。其他可能的值可以是 http 、 forward 。
 - 
    
path :來源檔案的路徑。
 - 
    
tag :Oracle Fluentd Plugin 將使用的標記,用來篩選 Log Analytics 必須使用的日誌事件。請確定使用前置碼 oci,例如
oci.syslog。 - 
    
剖析指令:建議您不要在組態檔中定義剖析指令。保留值
<parse> @type none </parse>。您可以改用 Log Analytics 提供的 Oracle 定義的剖析器和來源,也可以在 Log Analytics 中建立自己的剖析器和來源。對於包裝在 json 包裝函式中的日誌,請使用剖析指令<parse> @type json </parse>。將 record_transformer 篩選中的訊息欄位覆寫為值${record["log"]}。注意:
- 
        
建議您不要使用任何 Fluentd 剖析器。請改以原始格式將日誌傳送至 Log Analytics。剖析指令的格式必須是:
<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> - 
        
針對由 json 包裝函式包裝的原始日誌,其中索引鍵值組中的其中一個索引鍵是 log ,建議您使用下列剖析指令:
<parse> @type json </parse> 
而且,將 record_transformer 篩選中的
message欄位覆寫為message ${record["log"]}。例如,在下列 Kafka 日誌篩選區塊中,日誌內容會儲存在 json 中包裝的索引鍵 log 值中。``` <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 :僅針對多行日誌設定此值,以確保 Log Analytics 使用所有日誌。若未設定多行日誌的值,Fluentd 將維持在下一批記錄的等待模式。預設會停用此參數。
 - pos_file :使用此參數指定 Fluentd 維護其上次讀取之位置記錄的檔案。
 
如需其他參數的資訊,請參閱 Fluentd Documentation:tail 。
篩選組態
使用這些參數列出必須用來處理日誌的 Log Analytics 資源。
為了確保 Oracle 提供的輸出 Plugin 可以處理您輸入來源的日誌,請確定輸入日誌事件符合指定的格式,例如設定 record_transformer 篩選 Plugin 來相應地更改格式。
提示:請注意,設定 record_transformer 篩選外掛程式只是其中一種在內送事件中包含必要參數的方式。如需其他方法,請參考 Fluentd 文件。
過濾器設定範例 :
    <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 Log Analytics 輸出外掛程式使用的表單。
 - enable_ruby :這可讓您在 
${...}內使用 Ruby 表示式。 - oci_la_entity_id :您先前在先決條件工作中建立以對應主機的 Log Analytics 實體 OCID。
 - oci_la_entity_type :您先前在先決條件工作中建立的 Log Analytics 實體的實體類型。
 - oci_la_log_source_name :必須用於處理日誌記錄的 Log Analytics 來源。
 - oci_la_log_path :指定日誌檔的原始位置。如果 
oci_la_log_path的值不是特權值或無效,則:- 如果 tag 可用,則會使用它作為 oci_la_log_path
 - 如果沒有 tag ,則 oci_la_log_path 會設為 UNDEFINED
 
 - oci_la_log_group_id :必須儲存日誌之 Log Analytics 日誌群組的 OCID。
 
您可以在篩選區塊中選擇性提供下列其他參數:
<filter oci.**>:使用此篩選來提供適用於所有來源的組態資訊。如果您使用此篩選,請確定其在篩選之間是先以執行順序排列。如果全域篩選和個別來源篩選都指定了相同的索引鍵,則來源層級篩選值將會覆寫全域篩選。建議您使用oci作為所有標記的前置碼。- oci_la_global_metadata :使用此參數以 
'key1': 'value1', 'key2': 'value2'格式指定其他描述資料以及 Log Analytics 的原始日誌內容。在這裡,索引鍵是必須先定義的 Log Analytics 欄位,才能在此處指定。全域描述資料會套用至所有日誌檔。 - oci_la_metadata :使用此參數以 
'key1': 'value1', 'key2': 'value2'格式定義其他描述資料以及 Log Analytics 的原始日誌內容。在這裡,索引鍵是必須先定義的 Log Analytics 欄位,才能在此處指定。 - tag :使用此參數將標記附加至訊息供內部使用。指定格式為 
tag ${tag}。 - 訊息 ${record["log"]} :在 json 包裝程式中包裝的日誌包含此參數,其中原始日誌訊息是 json 內 log 屬性的值。
 
可用於監督下列日誌的組態範例:
安裝輸出外掛程式
使用 Oracle 提供的 gem 檔案來安裝 OCI Log Analytics 輸出 Plugin。本節中的步驟適用於以 Oracle Linux 上安裝的 td-agent rpm 套裝軟體為基礎的 Fluentd 設定。
- 
    
執行下列指令來安裝輸出外掛程式:
gem install fluent-plugin-oci-logging-analytics 
如需詳細資訊,請參閱 RubyGems 上的 Fluentd 輸出外掛程式,將日誌 / 事件傳送至 OCI Log Analytics :https://rubygems.org/gems/fluent-plugin-oci-logging-analytics 。
- 
    
Systemd 會以 td-agent 使用者啟動 td-agent。讓 td-agent 使用者能夠存取 OCI 檔案與資料夾。若要以服務形式執行 td-agent,請執行 OCI Log Analytics 輸出 Plugin 資料夾的
chown或chgrp命令,以及 .OCI pem 檔案 (例如chown td-agent [FILE])。 - 
    
若要開始收集 Oracle Cloud Log 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 
開始檢視 Log Analytics 中的日誌
前往日誌總管,然後使用 Oracle Cloud Log Analytics 的「視覺化」面板來檢視表單中的日誌資料,以協助您更加瞭解和分析。您可以根據資料集所要達成的目標,選取最適合您應用程式的視覺化類型。
建立並執行搜尋查詢之後,您可以將日誌搜尋儲存並共用為小工具以供進一步重複使用。
您可以透過新增 Oracle 定義的小工具或您建立的自訂小工具,在「儀表板」頁面上建立自訂儀表板。
使用 Prometheus 監督 Fluentd
您可以使用 Prometheus 選擇性監控 Fluentd。如需顯示下列指標的步驟,以及 Fluentd 發給 Prometheus 的其他指標,請參閱 Fluentd Documentation:Monitoring by Prometheus 。如果您只想監督核心 Fluentd 和這些測量結果,請略過參照之 Fluentd 文件中的步驟 1:依 Prometheus 篩選 Plugin 計算內送記錄和步驟 2:依 Prometheus 輸出 Plugin 計算外送記錄步驟。
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 Log 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 Log 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 Log 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 Log 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 Log 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 Log 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 Log Analytics by the Fluentd output plugin.
Type : Histogram
深入瞭解
其他學習資源
探索有關 Oracle Learn 的其他教學課程,或在 Oracle Learning YouTube 頻道上存取更多免費學習內容。此外,請造訪 Oracle 教育訓練,成為 Oracle Learning Explorer。
如需產品文件,請造訪 Oracle Help Center 。