隨著技術的不斷迭代和企業架構的不斷演進,系統的複雜度越來越高。日誌作為分析和觀測的“原材料”,能支援和相容不同的分析引擎會為使用者在選型和後期運維過程中降低很大成本。基於日誌的分析和觀測作為保障系統穩定的基石,它的角色非常重要。
Apache APISIX 作為一個高效能的 API 閘道器不僅在效能上有著良好的表現,並且在資料和日誌的運維上通過和社群使用者的交流共建也已經支援了大部分主流的開源及商業日誌解決方案,包括:HTTP Logger 、TCP Logger、Kafka Logger、UDP Logger、RocketMQ Logger、SkyWalking Logger、Aliyun Cloud Logging(SLS)、Google Cloud Logging 等。
最近通過社群的共建支援,Apache APISIX 的 Logger 全家桶中又多了一位新成員:Splunk HEC Logging。本文將為大家介紹如何在 Apache APISIX 中配置和使用 Splunk HEC 服務。
關於 Splunk HTTP Event Collector
Splunk 是一個機器資料的全文搜尋引擎,可應用於採集、索引、搜尋和分析各種應用資料,根據 DB Engines 的檢索引擎排名,目前 Splunk 位列第二,是一款應用廣泛的全文檢索軟體。Splunk 和 ElasticSearch 一樣,是準實時可以提供不間斷搜尋結果的資料流。
Splunk HTTP Event Collector (HEC) 是 Splunk 提供的 HTTP 事件收集器,主要提供以 HTTP(S) 協議將資料和應用程式事件傳送到 Splunk 的能力。
關於 Splunk HEC Logging 外掛
splunk-hec-logging 外掛用於將 Apache APISIX 的請求日誌轉發到 Splunk 中進行分析和儲存。啟用該外掛後,Apache APISIX 將在 Log 階段獲取請求上下文資訊,並將其序列化為 Splunk Event Data 格式 後提交到批處理佇列中。當觸發批處理佇列每批次最大處理容量,或重新整理緩衝區的最大時間時,會將佇列中的資料提交到 Splunk HEC 中。
如何使用 Splunk HEC Logging 外掛
Splunk 配置步驟
部署 Splunk Enterprise
請參考 Splunk 的 官方安裝指南 進行部署,本文將通過 Docker 進行部署演示。
Docker 命令引數如下:
docker run -p 18088:8088 -p 18000:8000 \ # 8088為HEC埠,8000為管理後臺埠
-e "SPLUNK_PASSWORD=your-password" \ # 管理後臺登入密碼
-e "SPLUNK_START_ARGS=--accept-license" \ # 接受許可證條款(Splunk預設將提供一張Enterprise Trial License)
-e "SPLUNK_HEC_TOKEN=your-hec-token" \ # 設定預設HEC令牌,配置此項後將建立一個預設的HEC
-itd --rm --name splunk-example splunk/splunk:latest
命令引數具體釋義可參考:Docker Splunk 文件。
配置 Splunk HEC
Docker 中已經配置並建立了預設的 HEC,在這裡不再過多贅述建立 HEC 的流程。具體手動建立的流程可參考文件:Set up and use HTTP Event Collector in Splunk Web。
登入 Splunk Enterprise 並檢查 HEC
通過瀏覽器訪問 Docker 的對映埠。因為需要把管理後臺的 8000
埠對映到宿主機的 18000
埠,所以在操作時可以在宿主機上通過「迴環地址加埠」的方式在瀏覽器訪問即可。例如:http://127.0.0.1:18000,登入的預設使用者名稱是 admin,密碼是在上例的環境變數中設定的 SPLUNK_PASSWORD
的值。
如下圖所示,表示登入成功。
單擊介面右上方 “Settings > Data Inputs” 檢查預設 HEC 是否設定成功:
在 HTTP Event Collector 的 Inputs 列中我們已經可以看到 HEC 的數量,表示設定成功。
此時可以點選 HTTP Event Collector 進入 HEC 詳情列表檢視 HECs 的 Token 資訊。
Token Values 即在上文中 Docker 環境變數中配置的 SPLUNK_HEC_TOKEN
的值。
Apache APISIX 配置步驟
啟用外掛
執行以下命令,啟用 splunk-hec-logging
外掛。
curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"plugins":{
"splunk-hec-logging":{
"endpoint":{
// HEC 端點地址
"uri":"http://127.0.0.1:18088/services/collector",
// HEC Token
"token":"BD274822-96AA-4DA6-90EC-18940FB2414C"
},
// // 重新整理批處理佇列緩衝區的最大時間(以秒為單位)
"inactive_timeout":2,
// 每個批處理佇列最大容納日誌條目數
"batch_max_size":10
}
},
"upstream":{
"type":"roundrobin",
"nodes":{
"127.0.0.1:1980":1
}
},
"uri":"/splunk.do"
}'
外掛引數說明如下表所示。
名稱是否必需預設值描述endpoint是Splunk HEC 端點配置資訊endpoint.uri是Splunk HEC 事件收集APIendpoint.token是Splunk HEC 身份令牌endpoint.channel否Splunk HEC 傳送渠道標識,參考:About HTTP Event Collector Indexer Acknowledgmentendpoint.timeout否10Splunk HEC 資料提交超時時間(以秒為單位)ssl_verify否TRUE啟用 SSL 驗證, 參考:OpenResty文件max_retry_count否0從處理管道中移除之前的最大重試次數retry_delay否1如果執行失敗,流程執行應延遲的秒數buffer_duration否60必須先處理批次中最舊條目的最大期限(以秒為單位)inactive_timeout否5重新整理緩衝區的最大時間(以秒為單位)batch_max_size否1000每個批處理佇列可容納的最大條目數
傳送請求
執行以下命令,向 Splunk 傳送請求。
$ curl -i http://127.0.0.1:9080/splink.do
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Date: Fri, 10 Dec 2021 09:57:52 GMT
Server: APISIX/2.11.0
Hello, Splunk HEC Logging
驗證日誌
登入 Splunk 控制檯,點選 “Search & Reporting”。
在搜尋輸入框中輸入:source="apache-apisix-splunk-hec-logging"
,即可查詢到傳送的請求日誌。
停用外掛
移除 splunk-hec-logging
相關配置即可。
curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"uri":"/logging.do",
"upstream":{
"type":"roundrobin",
"nodes":{
"127.0.0.1:1980":1
}
},
"plugins":{
}
}'
總結
目前,Apache APISIX 也在開發其他外掛以支援整合更多服務,如果您對此感興趣,歡迎隨時在 GitHub Discussion 中發起討論,也可通過郵件列表進行交流。