全部產品
Search
文件中心

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

更新時間:Aug 27, 2024

本文介紹如何通過阿里雲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功能。

安裝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

      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頁面,查詢採集到的審計日誌。Splunk-003

  • 內部日誌

    • 使用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。