全部產品
Search
文件中心

Simple Log Service:阿里雲Log ServiceSplunk Add-on

更新時間:Aug 27, 2026

本文介紹如何通過阿里雲Log ServiceSplunk Add-on將Log Service上的日誌投遞到Splunk。

架構

Splunk Add-on架構:

  • 通過Splunk Data Input建立Log Service消費組,並從Log Service進行即時日誌消費。

  • 將採集到的日誌通過Splunk私人協議(Private Protocol)或者HTTP Event Collector(HEC)投遞到Splunk indexer。

說明

此Add-on僅用於採集資料,只需要在Splunk Heavy Forwarder上安裝,不需要在Indexer和Search Head上安裝。

機制

  • 一個Data Input相當於一個消費者,對日誌進行消費。

  • 一個消費組由多個消費者構成,同一個消費組下面的消費者共同消費一個LogStore中的資料,消費者之間不會重複消費資料。

  • 一個LogStore下面會有多個Shard。

    • 每個Shard只會分配到一個消費者。

    • 一個消費者可以同時擁有多個Shard。

  • 所建立的消費者名字是由消費組名、host名、進程名、event協議類型組合而成,保證同一消費組內的消費者不重名。

更多關於消費組的資訊,請參見通過消費組消費日誌。

準備工作

  • 擷取Log Service的AccessKey。

    您可以通過阿里雲RAM擷取Log ServiceProject的AccessKey。更多資訊,請參見存取金鑰。

    您可以通過許可權助手配置RAM許可權。更多資訊,請參見配置許可權助手。常用的RAM配置如下:

    說明

    <Project name>為您的Log ServiceProject名稱,<LogStore name>為您的Log ServiceLogStore名稱,請根據實際情況替換,名字替換支援萬用字元*。

    {
      "Version": "1",
      "Statement": [
        {
          "Action": [
            "log:ListShards",
            "log:GetCursorOrData",
            "log:GetConsumerGroupCheckPoint",
            "log:UpdateConsumerGroup",
            "log:ConsumerGroupHeartBeat",
            "log:ConsumerGroupUpdateCheckPoint",
            "log:ListConsumerGroup",
            "log:CreateConsumerGroup"
          ],
          "Resource": [
            "acs:log:*:*:project/<Project name>/logstore/<LogStore name>",
            "acs:log:*:*:project/<Project name>/logstore/<LogStore name>/*"
          ],
          "Effect": "Allow"
        }
      ]
    }
  • 檢查Splunk版本及運行環境。

    • 確保使用最新的Add-on版本。

    • 作業系統:Linux、Mac OS、Windows。

    • Splunk版本:Splunk heavy forwarder 8.0及以上版本、Splunk indexer 7.0及以上版本。

  • 配置Splunk HTTP Event Collector。更多資訊,請參見Configure HTTP Event Collector on Splunk Enterprise。

    如果需要使用HEC來發送event,請確保HEC配置成功。如果選擇Splunk私人協議,則可以跳過該步驟。

    說明

    目前建立Event Collector token時,不支援開啟indexer acknowledgment功能。

  • 完成Kubernetes叢集容器日誌採集。

    請確保已完成Kubernetes叢集容器日誌採集配置。推薦使用LoongCollector或Logtail以DaemonSet方式部署在ACK叢集中,將容器標準輸出和記錄檔採集至Log Service。具體操作,請參見Kubernetes叢集容器日誌採集須知。

    說明

    只有Log Service中已有採集到的容器日誌資料後,才能通過Splunk Add-on將日誌投遞到Splunk。

安裝Add-on

您可以登入Splunk web UI頁面,通過以下兩種方法安裝Splunk Add-on。

說明

此Add-on僅用於採集資料,只需要在Splunk Heavy Forwarder上安裝,不需要在Indexer和Search Head上安裝。

  • 方法一

    1. 單擊Splunk-004表徵圖。

    2. 在應用頁面,單擊瀏覽更多應用。

    3. 搜尋Alibaba Cloud Log Service Add-on for Splunk,單擊安裝。

    4. 安裝完成後,根據頁面提示重啟 Splunk服務。

  • 方法二

    1. 單擊Splunk-004表徵圖。

    2. 在應用頁面,單擊從檔案安裝應用。

    3. 選擇目標.tgz檔案,單擊上傳。

      您可以App Search Results上下載目標.tgz檔案。

    4. 單擊安裝。

    5. 安裝完成後,根據頁面提示重啟 Splunk服務。

配置Add-on

當Splunk運行在非阿里雲ECS上時,您可以使用阿里雲存取金鑰AccessKey ID和AccessKey Secret來訪問Log Service。具體操作如下:

  1. 在Splunk Web UI頁面中,單擊Alibaba Cloud Log Service Add-on for Splunk。

  2. 配置全域帳號。

    選擇配置 > Account,在Account頁簽中,配置Log Service的AccessKey資訊。

    說明

    此處配置的使用者名稱、密碼分別對應Log Service的AccessKey ID、AccessKey Secret。

  3. 配置Add-on的作業記錄層級。

    選擇配置 > Logging,在Logging頁簽中,配置Add-on的作業記錄層級。

  4. 建立Data Input。

    1. 單擊輸入,進入輸入頁面。

    2. 單擊Create New Input,建立新的Data Input。

      表 1. Data input參數說明

      參數

      必選項 & 格式

      描述

      取值舉例

      名字

      是,String

      全域唯一的Data Input名。

      無

      間隔

      是,Integer

      Splunk Data Input退出後的重啟時間,單位:s。

      預設值:10s

      索引

      是,String

      Splunk索引。

      無

      SLS AccessKey

      是,String

      阿里雲存取金鑰由AccessKey ID、AccessKey Secret組成。

      說明

      此處配置的使用者名稱、密碼分別對應Log Service的AccessKey ID、AccessKey Secret。

      全域帳號配置中配置的使用者名稱和密碼。

      SLS endpoint

      是,String

      阿里雲Log Service入口。更多資訊,請參見服務入口。

      • cn-huhehaote.log.aliyuncs.com

      • https://cn-huhehaote.log.aliyuncs.com

      SLS project

      是,String

      Log ServiceProject。更多資訊,請參見管理Project。

      無

      SLS LogStore

      是,String

      Log ServiceLogStore。更多資訊,請參見LogStore。

      無

      SLS consumer group

      是,String

      Log Service消費組。擴容時,多個Data Input需要配置相同的消費組名稱。更多資訊,請參見通過消費組消費日誌。

      無

      SLS cursor start time

      是,String

      消費起始時間。該參數只有消費組首次建立時有效。非首次建立日誌都是從上次的儲存點開始消費。

      說明

      這裡的時間是日誌到達時間。

      取值:begin、end、ISO格式的時間(例如2018-12-26 0:0:0+8:00)。

      SLS heartbeat interval

      是,Integer

      SLS消費者與Server間的心跳間隔。單位:s。

      預設值:60s

      SLS data fetch interval

      是,Integer

      日誌拉取間隔,如果日誌頻率較低,建議不要設得太小。單位:s。

      預設值:1s

      consume_processor

      否,String

      包含SPL的消費處理器(例如consume-processor-1),需要您提前在專案中建立,目前僅支援Linux x86_64平台。更多請參見管理消費處理器。

      無

      Topic filter

      否,String

      Topic過濾字串,以;間隔區分多個過濾的Topic。如果日誌的topic被命中,則忽略該日誌,從而不能投遞到Splunk。

      “TopicA;TopicB”意味著topic為TopicA、TopicB的日誌將被忽略。

      Unfolded fields

      否,JSON

      Json格式的topic到欄位列表的映射關係。{"topicA": ["field_nameA1", "field_nameA2", ...], "topicB": ["field_nameB1", "field_nameB2", ...], ...}

      {"actiontrail_audit_event": ["event"] } 表示topic為 actiontrail_audit_event的日誌,該日誌的event欄位將把字串展開為JSON格式。

      Event source

      否,String

      Splunk event資料來源。

      無

      Event source type

      否,String

      Splunk event資料來源類型。

      無

      Event retry times

      否,Integer

      0表示無限重傳。

      預設值:0次

      Event protocol

      是

      Splunk event發送協議。如果選擇私人協議,後續參數可以忽略。

      • HTTP for HEC

      • HTTPS for HEC

      • Private protocol

      HEC host

      是,只有Event protocol選擇HEC時有效,String。

      HEC host。更多資訊,請參見Set up and use HTTP Event Collector in Splunk Web。

      無

      HEC port

      是,只有Event protocol選擇HEC時有效,Integer。

      HEC連接埠。

      無

      HEC token

      是,只有Event protocol選擇HEC時有效,String。

      HEC token。更多資訊,請參見HEC token。

      無

      HEC timeout

      是,只有Event protocol選擇HEC時有效,Integer。

      HEC逾時時間,單位:s。

      預設:120s

當Splunk運行在阿里雲ECS上時,可為ECS執行個體綁定RAM角色,並以此RAM角色來訪問Log Service。具體操作如下:

重要

請確保Splunk運行在被授予RAM角色的阿里雲ECS執行個體上。

  1. 授予執行個體RAM角色。

    此操作包括建立執行個體RAM角色、為RAM角色授予許可權和為執行個體授予RAM角色。具體操作,請參見配置ECS執行個體RAM角色。

    其中,RAM角色的權限原則請參見準備工作中AccessKey的授權策略。

  2. 在Splunk Web UI頁面中,單擊Alibaba Cloud Log Service Add-on for Splunk。

  3. 配置全域帳號。

    選擇配置 > Account,在Account頁簽中,配置ECS執行個體的RAM角色資訊。即添加一個帳號,使用者名稱為ECS_RAM_ROLE,密碼為步驟1中所建立的RAM角色名稱。

  4. 建立Data Input。

    1. 單擊輸入,進入輸入頁面。

    2. 單擊Create New Input,建立新的Data Input。

      其中SLS AccessKey參數需配置為步驟3中所建立的全域帳號,其他參數說明請參見Data input參數說明。

開始工作

  • 查詢資料

    首先確保建立的Data Input是啟動狀態。然後您可以在Splunk web UI首頁單擊Search & Reporting,進入App: Search & Reporting頁面,查詢採集到的審計日誌。

    例如,在搜尋欄中輸入 * 萬用字元搜尋所有事件,時間範圍選擇 Last 24 hours。搜尋結果以 JSON 格式展示雲平台審計日誌事件,包含 eventName、eventSource、eventTime、sourceIp 等欄位。

  • 內部日誌

    • 使用index="_internal" | search "SLS info"查詢Log Service相關的資訊。

    • 使用index="_internal" | search "error"查詢運行時的錯誤資訊。

效能與安全

  • 效能規格

    Log ServiceSplunk Add-on效能及資料轉送的輸送量受到如下因素的影響:

    • 服務入口:可以使用公網、傳統網路、VPC網路或者Global Acceleration服務入口。一般情況下,建議採用傳統網路或VPC網路的服務入口。更多資訊,請參見服務入口。

    • 頻寬:包括Log Service與Splunk heavy forwarder間的頻寬、Splunk heavy forwarder與indexer之間的頻寬。

    • Splunk indexer處理能力:indexer的資料接收能力。

    • Shard數量:對於單個Log ServiceLogStore,配置的Shard數越多,資料轉送能力越強。您需要根據原始日誌的產生速率確認Shard數量。更多資訊,請參見管理Shard。

    • Splunk Data Input的配置數量:同一個LogStore,配置越多的Data Input(相同的消費組),輸送量越大。

      說明

      消費者的並發受到Log ServiceLogStore Shard數量的影響。

    • Splunk heavy forwarder佔用的CPU core數和記憶體:一般情況下一個Splunk Data Input需要消耗1~2GB記憶體,佔用1個CPU core。

    當上述條件滿足的情況下,一個Splunk Data Input可以提供1M/s~2M/s的日誌消費能力。實際使用時,您需要根據原始日誌的產生速率確認Shard數量。

    例如,一個LogStore有10M/s的日誌生產能力,需要至少拆分出10個split,並且在Add-on中配置10個Data Input。如果是單機部署,需要具備10個空閑CPU core及12G的記憶體。

  • 高可用性

    消費組將檢測點(check-point)儲存在伺服器端,當一個消費者停止,另外一個消費者將自動接管並從斷點繼續消費。可以在不同機器上建立Splunk Data Input,這樣在一台機器停止或者損壞的情況下,其他機器上的Splunk Data Input建立的消費者可以自動接管並從斷點進行消費。理論上,為了備用,也可以在不同機器上啟動大於Shard數量的Splunk Data Input。

  • 使用HTTPS

    • Log Service

      如果服務入口(endpoint)配置為https://首碼,例如https://cn-beijing.log.aliyuncs.com,程式與Log Service的串連將自動使用HTTPS加密。

      伺服器憑證*.aliyuncs.com是GlobalSign簽發,預設大多數Linux、Windows的機器會自動信任此認證。如果某些特殊情況,機器不信任此認證,請參見Install a trusted root CA or self-signed certificate。

    • Splunk

      為了使用HTTPS的HEC能力,需要在Splunk HEC全域配置介面上開啟SSL功能。更多資訊,請參見Configure HTTP Event Collector on Splunk Enterprise。

  • AccessKey儲存保護

    Log Service的AccessKey和Splunk的HEC token等關鍵資訊,都儲存在Splunk保密儲存中,不用擔心泄漏風險。

常見問題

  • 配置錯誤

    • 當建立或修改Data Input時,會有基本配置資訊檢查,配置參數說明請參見Data input參數說明。

    • Log Service配置錯誤,例如建立消費組失敗。

      • 命令:index="_internal" | search "error"

      • 異常日誌:

        aliyun.log.consumer.exceptions.ClientWorkerException: 
        error occour when create consumer group, 
        errorCode: LogStoreNotExist, 
        errorMessage: logstore xxxx does not exist
      • ConsumerGroupQuotaExceed錯誤

        在Log Service中,一個LogStore最多配置20個消費組。請在Log Service控制台查看消費組資訊,如果空閑數量不足,建議刪除不需要的消費組。如果超過20個消費組,系統會報ConsumerGroupQuotaExceed錯誤。

  • 許可權錯誤

    • 無許可權訪問阿里雲Log Service

      • 命令:index="_internal" | search "error"

      • 異常日誌:

        aliyun.log.consumer.exceptions.ClientWorkerException: 
        error occour when create consumer group, 
        errorCode: SignatureNotMatch, 
        errorMessage: signature J70VwxYH0+W/AciA4BdkuWxK6W8= not match
    • ECS RAM鑒權失敗

      • 命令:index="_internal" | search "error"

      • 異常日誌:

        ECS RAM Role detected in user config, but failed to get ECS RAM credentials. Please check if ECS instance and RAM role 'ECS-Role' are configured appropriately.

        其中,ECS-Role為您建立的RAM角色,將根據實際情況顯示。

      • 可能原因:

        • 確認Data Input中的SLS AccessKey參數是否已配置為具備RAM角色的全域帳號。

        • 確認全域帳號是否正確配置了RAM角色,帳號必須為ECS_RAM_ROLE,密碼為RAM角色名稱。

        • 確認ECS執行個體是否已綁定RAM角色。

        • 確認RAM角色的可信實體類型是否為阿里雲服務,受信服務是否為雲端服務器。

        • 確認綁定RAM角色的ECS執行個體是否為運行Splunk的機器。

    • 無許可權訪問HEC

      • 命令:index="_internal" | search "error"

      • 異常日誌:

        ERROR HttpInputDataHandler - Failed processing http input, token name=n/a, channel=n/a, source_IP=127.0.0.1, reply=4, events_processed=0, http_input_body_size=369
        
        WARNING pid=48412 tid=ThreadPoolExecutor-0_1 file=base_modinput.py:log_warning:302 | 
        SLS info: Failed to write [{"event": "{\"__topic__\": \"topic_test0\", \"__source__\": \"127.0.0.1\", \"__tag__:__client_ip__\": \"10.10.10.10\", \"__tag__:__receive_time__\": \"1584945639\", \"content\": \"goroutine id [0, 1584945637]\", \"content2\": \"num[9], time[2020-03-23 14:40:37|1584945637]\"}", "index": "main", "source": "sls log", "sourcetype": "http of hec", "time": "1584945637"}] remote Splunk server (http://127.0.0.1:8088/services/collector) using hec. 
        Exception: 403 Client Error: Forbidden for url: http://127.0.0.1:8088/services/collector, times: 3
      • 可能原因

        • HEC沒有配置或啟動。

        • Data Input中的HEC基本資料配置錯誤。例如:如果使用HTTPS,需要開啟SSL配置。

        • 檢查Event Collector token的indexer acknowledgment功能是否為關閉狀態。

  • 消費時延

    您可通過Log Service控制台查看消費組狀態。更多資訊,請參見步驟二:查看消費組狀態。

    建議參見效能規格,採用擴充Shard數或者建立具有相同消費組的Data Input的方式解決消費時延問題。

  • 網路抖動

    • 命令:index="_internal" | search "SLS info: Failed to write"

    • 異常日誌:

      WARNING pid=58837 tid=ThreadPoolExecutor-0_0 file=base_modinput.py:log_warning:302 |
      SLS info: Failed to write [{"event": "{\"__topic__\": \"topic_test0\", \"__source__\": \"127.0.0.1\", \"__tag__:__client_ip__\": \"10.10.10.10\", \"__tag__:__receive_time__\": \"1584951417\", \"content2\": \"num[999], time[2020-03-23 16:16:57|1584951417]\", \"content\": \"goroutine id [0, 1584951315]\"}", "index": "main", "source": "sls log", "sourcetype": "http of hec", "time": "1584951417"}] remote Splunk server (http://127.0.0.1:8088/services/collector) using hec. 
      Exception: ('Connection aborted.', ConnectionResetError(54, 'Connection reset by peer')), times: 3

    正常情況下,event會自動重傳。但是如果問題持續存在,請聯絡網路系統管理員排查網路狀況。

  • 修改消費起始時間

    說明

    Data Input的消費起始時間參數,只有消費組首次建立時有效。非首次建立日誌都是從上次的儲存點開始消費。

    1. 在Splunk Web UI的輸入頁面,禁用目標Data Input。

    2. 登入Log Service控制台,在所消費的目標LogStore下的數據消費欄中,刪除對應的消費組。

    3. 在Splunk Web UI的輸入頁面,單擊目標Data Input右側的操作 > 編輯,修改SLS cursor start time參數,並重新啟動Data Input。