通過 Logstash 將 Apache 日誌轉發到 OpenSearch

引言

有效的网路伺服器日誌管理對於維護您的網站性能、解決問題及了解用戶行為至關重要。Apache 是其中最受欢迎的网路伺服器之一。它生成的存取和錯誤日誌包含了宝贵的資訊。為了有效地管理與分析這些日誌,您可以使用 Logstash 來處理並將它們傳送至 DigitalOcean 管理型 OpenSearch 以便索引和視覺化。

在這個教程中,我們將引导您在 Droplet 上安裝 Logstash、配置它來搜集您的 Apache 日誌,並將它們傳送至管理型 OpenSearch 進行分析。

前提

  1. 已安裝 Apache 伺服器的 Droplet/s。
  2. 管理型 OpenSearch 叢簇

步驟 1 – 安装 Logstash

Logstash 可以通过二進制文件或是透過套件庫來安裝。為了更輕鬆的管理和更新,建議使用套件庫。

在這個節段,我們將引导您透過 APT 和 YUM 套件管理器來在您的 Droplet 上安裝 Logstash。

讓我們來識別 OS:

cat /etc/os-release

對於 APT 基礎系統(Ubuntu/Debian)

下載並安裝公開簽名金鑰:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elastic-keyring.gpg

您可能需要在 Debian 上安裝 apt-transport-https 套件才能繼續進行:

sudo apt-get install apt-transport-https

將repo定義保存至 /etc/apt/sources.list.d/elastic-8.x.list

echo "deb [signed-by=/usr/share/keyrings/elastic-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-8.x.list

使用上面描述的 echo 方法來新增 Logstash 庫。不要使用 add-apt-repository,因為它會新增一個 deb-src 條目,但我們並未提供源套件。如果您已經新增了 deb-src 條目,您會看到如下錯誤:

Unable to find expected entry 'main/source/Sources' in Release file (Wrong sources.list entry or malformed file)

只需從 /etc/apt/sources.list 文件中刪除 deb-src 条目,安裝應該如预期般工作进行。

運行 sudo apt-get update,庫已經準備好使用。您可以使用以下命令來安裝:

sudo apt-get update && sudo apt-get install logstash

為YUM基礎系統(CentOS/RHEL)

下載並安裝公用签名的金鑰:

sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

在您的/etc/yum.repos.d/logstash.repo文件中新增以下內容。您可以使用「tee」來更新和創建文件。

sudo tee /etc/yum.repos.d/logstash.repo > /dev/null <<EOF
[logstash-8.x]
name=Elastic repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF

您的倉庫已經準備好使用。您可以使用以下命令來安裝:

sudo yum install logstash

欲取得更多相關資訊,請參考安裝Logstash手冊。

步驟2 – 設定Logstash將日志傳送到OpenSearch

Logstash管線由三個主要階段組成:輸入、過濾和輸出。Logstash管線使用插件。您可以使用社群插件或創建您自己的力量插件。

  • 輸入:此階段從各種來源收集數據。Logstash支持許多輸入插件來處理如日志文件、數據庫、消息佇列和雲服務等數據來源。

  • 過濾:這個階段處理和變換輸入階段收集的數據。過濾器可以修改、豐富和結構化數據,使其更具用途且更易于分析。

  • 輸出:這個階段將處理完的數據傳送到目的地。目的地可以包括數據庫、文件和如 OpenSearch 的數據存儲。

步驟 3 – 安裝 Open Search 輸出插件

OpenSearch 輸出插件可以通過運行以下命令來安裝:

/usr/share/logstash/bin/logstash-plugin install logstash-output-opensearch

有關詳細信息,請查看此 logstash-output-opensearch-plugin 倉庫。

現在讓我們創建一個 管線:

在路徑 /etc/logstash/conf.d/ 創建一個名為 apache_pipeline.conf 的新文件,並複製以下內容。

input {
  file {
    path => "/var/log/apache2/access.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
    tags => "apache_access"
  }

  file {
    path => "/var/log/apache2/error.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
    tags => "apache_error"
  }
}

filter {
  if "apache_access" in [tags] {
    grok {
        match => { "message" => "%{HTTPD_COMBINEDLOG}" }
    }
    mutate {
        remove_field => [ "message","[log][file][path]","[event][original]" ]
      }
   } else {
   grok {
        match => { "message" => "%{HTTPD24_ERRORLOG}" }
    }
   }
}

output {
  if "apache_access" in [tags] {
  opensearch {
    hosts       => "https://<OpenSearch-Hostname>:25060"
    user        => "doadmin"
    password    => "<your_password>"
    index       => "apache_access"
    ssl_certificate_verification => true
  }

  } else {
  opensearch {
    hosts       => "https://<OpenSearch-Hostname>:25060"
    user        => "doadmin"
    password    => "<your_password>"
    index       => "apache_error"
    ssl_certificate_verification => true
  }
  }
}

<OpenSearch_Host> 替換為您的 OpenSearch 服務器的Hostname,將 <OpenSearch_Password> 替換為您的 OpenSearch 密碼。

讓我們分解以上的配置。

  • 輸入: 此處用於配置事件的源。這裡使用了 ‘文件’ 輸入插件。

  • 路徑 => “/var/log/apache2/access.log” : 指定 Logstash 將從哪裡讀取 Apache 訪問日志文件。

    請確保 Logstash 服務有权限訪問輸入路徑。

  • 開始位置 => “beginning”: 定義 Logstash 應該從哪裡開始讀取日志文件。“beginning” 表示 Logstash 應該從文件的開始處而不是結束處開始處理文件。

  • sincedb_path => “/dev/null”: 指定 sincedb 檔案的路徑。Sincedb 檔案用於 Logstash 來追蹤 log 檔案中的目前位置,使它能夠在重新啟動或失敗的情況下繼續之前的工作。

  • tags => “apache_access”: 將標籤分配給從此輸入讀取的事件。標籤在 Logstash 內用於識別和過濾事件,通常在配置的輸出或過濾階段下游使用。我們用於後者

  • FILTER: 用以處理事件。

    開始條件:

    (if "apache_access" in [tags]):
    

    這會檢查是否有標籤 apache_access 存在於傳入的事件日誌的 [tags] 欄位中。我們使用這個條件來套用適當的 GROK 過濾器,用於 Apache 存取和錯誤日誌。

  • Grok 過濾器(用於 Apache 訪問日誌):

    grok {
        match => { "message" => "%{HTTPD_COMBINEDLOG}" }
    }
    

    Grok 過濾器 %{HTTPD_COMBINEDLOG} 是 Logstash 中用來解析 Apache 合併式訪問日誌格式的預定義模式。此過濾器從入站的事件的訊息字段中提取 IP 位址、時間戳、HTTP 方法、URI、狀態碼等字段。

  • 變異過濾器 移除(選項):在Apache日志被解析後,我們使用變異移除來移除某些字段。

    mutate {
        remove_field => [ "message", "[log][file][path]", "[event][original]" ]
    }
    
  • 其他條件:如果 [tags] 中不存在 apache_access 標籤,則執行 else 區塊。此 else 區塊包含另一個用於解析 Apache 錯誤日誌的 GROK 過濾器。

    grok {
        match => { "message" => "%{HTTPD24_ERRORLOG}" }
    }
    

    此 GROK 過濾器 %{HTTPD24_ERRORLOG} 用於解析符合 Apache 錯誤日誌格式的消息。它會提取與錯誤日誌相關的字段,如時間戳記、日誌等級、錯誤訊息等。

    GROK 模式可以在以下位置找到:https://github.com/logstash-plugins/logstash-patterns-core/tree/main/patterns

  • Output: 输出插件将事件发送到特定目的地。

    输出块以 if 条件开始。我们在这里使用 if 条件。

    if "apache_access" in [tags] {}
    

    这个 if 条件用于将日志路由到 OpenSearch 的两个单独索引,分别是 apache_errorapache_access

    让我们探索 OpenSearch 输出插件:

    hosts            => "https://XXX:25060"  您的 Open search 主机名
    user             => "doadmin"            您的 Open search 用户名
    password         => "XXXXX"              OpenSearch 密码
    index            => "apache_error"       OpenSearch 中的索引名称
    ssl_certificate_verification => true    启用 SSL 证书验证

步驟 4 – 開始 Logstash

配置完管道後,開始Logstash服務:

systemctl enable logstash.service
systemctl start logstash.service
systemctl status logstash.service

步驟 5 – 除錯

檢查連接性

您可以通過測試連接性來驗證Logstash是否能連接到OpenSearch:

curl -u your_username:your_password -X GET "https://your-opensearch-server:25060/_cat/indices?v"

將 <your-opensearch-server> 替換為您的OpenSearch服務器的 hostname,並將 <your_username>、<your_password> 替換為您的OpenSearch憑據。

數據吸入

確保數據已正確地在OpenSearch中索引:

curl -u your_username:your_password -X GET "http://your-opensearch-server:25060/<your-index-name>/_search?pretty"

將 <your-opensearch-server> 替換為您的OpenSearch服務器的 hostname,並將 <your_username>、<your_password> 替換為您的OpenSearch憑据。同樣地,將 <your-index-name> 替換為索引名稱。

防火牆及網絡配置

確保防火牆規則及網絡設定容許Logstash與OpenSearch在端口25060之間進行通信。

日志

Logstash的日志可在/var/log/logstash/logstash-plain.log找到。

有關詳細資料,請參閱問題解決

結論

在本文指南中,我們通過設定Logstash來收集並將Apache日誌转发到OpenSearch。以下是我們討論的內容摘要:

安装Logstash:我們介绍如何根據您的Linux分发版使用APT或YUM包管理器來在Droplet上安装Logstash。

配置Logstash:我們創建並調整了Logstash配置文件,以確保Apache日誌被正確解析並發送到OpenSearch。

在OpenSearch中核實:我們在OpenSearch控制台上設定索引模式以確認您的日誌已被正確索引並可供分析使用。

完成這些步驟後,您應該 now have a functional setup where Logstash collects Apache logs and sends them to OpenSearch。

Source:
https://www.digitalocean.com/community/tutorials/forward-apache-logs-to-opensearch-via-logstash