在 Droplet 上配置 Logstash 以將 Nginx 日志转发到托管 OpenSearch

引言

追踪網頁伺服器記錄對於顺畅運行您的網站、解決問題以及了解用戶行為至關重要。如果您正在使用Nginx,它会产生充滿價值信息的訪問和錯誤記錄。為了管理和分析這些記錄,您可以使用Logstash來處理和轉發記錄,以及DigitalOcean的Managed OpenSearch來索引和可视化數據。

在這個教程中,我們將引导您在Droplet上安裝Logstash,設定它來收集您的Nginx記錄,並將它們傳送至DigitalOcean Managed OpenSearch

前提

使用案例

如果你想要進行以下操作,可能會需要這個設定:

  • 監控和解決問題:通過分析實時日志來追蹤web服務器的性能和錯誤。
  • 分析性能:獲得web流量模式和服務器指標的洞見。
  • 集中日志:將多個Nginx服務器的日志集中到一个OpenSearch實例中,以便於管理。

注意:設定時間應為約30分鐘。

步驟1 – 在Droplets上安装Logstash

Logstash 可以使用這裡提供的二進制文件或針對您的操作系統定制的套件庫進行安裝。為了更輕鬆地管理和更新,通常建議使用套件庫。您可以在基於 Debian 的系統(如 Ubuntu)上使用 APT 套件管理器,在基於 Red Hat 的系統(如 CentOS 或 RHEL)上使用yum。這兩種方法都可確保 Logstash 被正確整合到您系統的套件管理基礎設施中,簡化安裝和維護。

在本部分中,我們將指導您如何使用aptyum套件管理器安裝 Logstash,確保您可以在 Droplet 上配置 Logstash,無論您使用的 Linux 發行版是什麼。

要找到作業系統,運行以下命令:

cat /etc/os-release

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

1.下載並安裝公共簽名金鑰:

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

2.如果尚未安裝,請安裝 apt-transport-https:

sudo apt-get install apt-transport-https

3.將 Logstash 存儲庫定義添加並保存到您的apt源列表中:

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

注意:請確保您不要使用 add-apt-repository 命令,因為它可能會增加一個不受支持的 deb-src 項目。如果您遇到與 deb-src 項目相關的錯誤,請從 /etc/apt/sources.list 文件中刪除它。如果您已經添加了 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 項目,安裝應該像预期的那样工作进行。

4.更新包索引以包括新的仓库:

sudo apt-get update

5.使用 apt 包管理器安装 Logstash:

sudo apt-get install logstash

6.启动 Logstash 并使其在系统启动时自动启动:

sudo systemctl start logstash
sudo systemctl enable logstash

Logstash 现已安装并在您的系统上运行。

对于基于 YUM 的系统(CentOS/RHEL):

1.下载并安装 Logstash 仓库的公共签名密钥:

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

2.在 /etc/yum.repos.d/ 为 Logstash 创建一个仓库文件。例如,创建一个名为 logstash.repo 的文件。您可以复制并粘贴下面的内容来创建文件并更新内容:

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

仓库现已准备好使用。

3.使用 YUM 包管理器安装 Logstash:

sudo yum install logstash

4.启动 Logstash 并使其在系统启动时自动启动:

sudo systemctl start logstash
sudo systemctl enable logstash

Logstash 已經在您的系統上安裝並運行中。

步驟 2 – 安装 Open Search 输出插件

您可以運行以下命令來安裝 OpenSearch 输出插件:

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

您可以在這個 logstash-output-opensearch 插件存储库 找到更多关于插件的信息。

步驟 3 – 配置 Logstash 以將 Nginx 日志發送到 OpenSearch

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

  • 輸入:此階段從各種來源收集數據。Logstash 支持許多輸入插件來處理像日誌文件、數據庫、消息队列和雲服務這樣的數據來源。
  • 過濾:此階段處理和变换輸入階段收集的數據。過濾器可以修改、豐富和結構化數據,使其更具有用性且更容易进行分析。
  • 输出:此阶段將處理過的數據傳送至目標位置。目標可以包括數據庫、文件和如OpenSearch般的數據存儲。

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

1.在/etc/logstash/conf.d/nginx-to-opensearch.conf創建一個Logstash配置文件,並加入以下內容:

input {
  file {
    path => "/var/log/nginx/access.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
    tags => ["nginx_access"]
  }
  file {
    path => "/var/log/nginx/error.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
    tags => ["nginx_error"]
  }
}
filter {
  if "nginx_access" in [tags] {
    grok {
      match => { "message" => "%{IPORHOST:client_ip} - %{USER:ident} \[%{HTTPDATE:timestamp}\] \"%{WORD:method} %{URIPATHPARAM:request} HTTP/%{NUMBER:http_version}\" %{NUMBER:response} %{NUMBER:bytes} \"%{DATA:referrer}\" \"%{DATA:user_agent}\"" }
    }
    mutate {
      remove_field => ["message", "[log][file][path]", "[event][original]"]
    }
  } else if "nginx_error" in [tags] {
    grok {
      match => { "message" => "\[%{TIMESTAMP_ISO8601:timestamp}\] \[%{LOGLEVEL:level}\] \[%{DATA:pid}\] \[%{DATA:tid}\] %{GREEDYDATA:error_message}" }
    }
    mutate {
      remove_field => ["message", "[log][file][path]", "[event][original]"]
    }
  }
}
output {
  if "nginx_access" in [tags] {
    opensearch {
      hosts => ["https://<OpenSearch-Hostname>:25060"]
      user => "doadmin"
      password => "<your_password>"
      index => "nginx_access-%{+YYYY.MM.dd}"
      ssl => true
      ssl_certificate_verification => true
    }
  } else if "nginx_error" in [tags] {
    opensearch {
      hosts => ["https://<OpenSearch-Hostname>:25060"]
      user => "doadmin"
      password => "<your_password>"
      index => "nginx_error-%{+YYYY.MM.dd}"
      ssl => true
      ssl_certificate_verification => true
    }
  }
}

更換:

  • OpenSearch-Hostname為您的OpenSearch服務器的 hostsname。
  • <your_password>為您的OpenSearch密碼。

2.通過重新啟動Logstash應用新的配置:

sudo systemctl restart logstash

3.檢查Logstash 日志,確保它正確地處理和傳送數據:

sudo tail -f /var/log/logstash/logstash-plain.log

〈code>nginx-to-opensearch.conf配置 Breakdown

輸入

〈code>input 區段配置了兩個文件輸入以讀取日誌:

Nginx 日誌路徑/var/log/nginx/access.log(用於存取日誌)/var/log/nginx/error.log(用於錯誤日誌)開始位置beginning -從日誌文件的開始處讀取。SinceDB 路徑/dev/null – 禁用持續讀取的追蹤。標籤["nginx_access"]用於存取日誌["nginx_error"]用於錯誤日誌

注意:請確保Logstash服務能夠存取輸入路徑。

過濾

「過濾」區段根據它們的標籤處理日誌:

日誌處理訪問日誌:使用grok過濾器解析訪問日誌格式, extracting 字段如client_iptimestampmethodrequesthttp_versionresponsebytesreferreruser_agent

錯誤日誌:檢查nginx_error標籤並套用grok過濾器來extract 字段如timestamplevelpidtiderror_message

輸出

「輸出」區段根據它們的標籤將事件路由到OpenSearch:

路由至OpenSearch:對於訪問和錯誤日誌,它指定:Hosts:OpenSearch實例的URL。User:用doadmin進行認證。Password:您的OpenSearch密碼。Index:對於訪問日誌nginx_access-%{+YYYY.MM.dd}、對於錯誤日誌nginx_error-%{+YYYY.MM.dd}SSL設定:開啟SSL並進行憑證驗證。

步驟 4 – 設定 OpenSearch

1.開啟您的網頁瀏覽器,並前往 OpenSearch 控制面板的網址:

https://<OpenSearch-Hostname>

OpenSearch-Hostname 替換為您的 OpenSearch 服務器的主機名稱。

2.建立一個索引模式。
a.在左側的面板中,前往 管理 > 控制面板管理 > 索引模式
b.在頂部右側點擊 建立索引模式
c.輸入 nginx_access-*nginx_error-* 作為索引模式,以匹配 Logstash 建立的所有索引,然後點擊 下一步
d.點擊 建立索引模式

3.確保索引模式成功建立並可在索引模式清單中看到。

4.在左側的面板中,前往「探索」並選擇您建立的索引模式(nginx_access-*nginx_error-*)。核實日志条目可见且正確索引。

5.建立視覺化和控制面板。請參考 如何在 OpenSearch 中建立控制面板 以獲取更多詳細資料。

解決問題

檢查連通性

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

curl -u doadmin:your_password -X GET "https://<OpenSearch-Hostname>:25060/_cat/indices?v"

替換:

  • OpenSearch-Hostname 為您的OpenSearch服務器的 hostname。
  • <your_password> 為您的OpenSearch密碼。

數據吸入

您可以使用以下curl命令確保數據在OpenSearch中正確索引:

curl -u doadmin:your_password -X GET "http://<OpenSearch-Hostname>:25060/nginx-logs-*/_search?pretty"

替換:

  • OpenSearch-Hostname 為您的OpenSearch服務器的 hostname。
  • <your_password> 為您的OpenSearch密碼。

防火牆和網絡配置

確保防火牆規則和網絡設定允許Logstash和OpenSearch之間的25060端口交通。

結論

在這個指南中,您學習了如何設定Logstash以收集並將Nginx日誌傳送到OpenSearch。

您查看了如何根據您的Linux 分發版使用aptyum 包管理器來讓Logstash 在您的Droplet 上運行。您還創建並調整了Logstash 配置文件,以確保Nginx 日誌被正確解析並傳送到OpenSearch。然後您在OpenSearch Dashboards 中設定了一個索引模式,以檢查日誌是否被正確索引並且可供分析。完成這些步驟後,您應該現在有一個正在運行的設定,其中Logstash 收集Nginx 日誌並將它們傳送到OpenSearch。這個設定讓您能夠使用OpenSearch 強大的搜索和視覺化工具來分析您的服務器日誌。

如果您遇到任何問題,請查看我們提供的解決問題 技巧,並參照LogstashOpenSearch 文档 尋找更多幫助。定期監控將使您的日誌系統運行 smoothly 且有效地。

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