在 Droplet 上配置 Logstash 以将 Nginx 日志转发到托管 OpenSearch
介绍
跟踪 Web 服务器日志对于顺利运行网站、解决问题和了解用户行为至关重要。如果您使用 Nginx,它会生成充满有价值信息的访问和错误日志。要管理和分析这些日志,您可以使用 Logstash 来处理和转发它们,并使用 DigitalOcean 的 Managed OpenSearch 来索引和可视化数据。
在本教程中,我们将引导您在 Droplet 上安装 Logstash,将其设置为收集您的 Nginx 日志,并将其发送到 DigitalOcean Managed OpenSearch。
先决条件
已启动并运行的 DigitalOcean 云帐户和 Ubuntu Droplet。
应该设置 Nginx,并且应该在 Droplet 上生成日志。要在 Droplet 上安装 nginx,请参阅如何在 Ubuntu 上安装 Ngnix 的教程。
-
OpenSearch 集群应该正在运行,并且您应该有权访问它。有关更多详细信息,请访问如何创建 OpenSearch 集群。
熟悉 Nginx、Logstash 和 OpenSearch 是有益的。
使用案例
如果您想要执行以下操作,则可能需要此设置:
- 监控和故障排除:通过分析实时日志来跟踪网络服务器性能和错误。
- 分析性能:深入了解网络流量模式和服务器指标。
- 集中日志记录:将来自多个 Nginx 服务器的日志聚合到单个 OpenSearch 实例中,以便于管理。
注意:设置时间应在 30 分钟左右。
第 1 步 - 在 Droplet 上安装 Logstash
Logstash 可以使用此处提供的二进制文件或为您的操作系统定制的软件包存储库进行安装。为了更轻松地管理和更新,通常建议使用包存储库。您可以在基于 Debian 的系统(例如 Ubuntu)上使用 APT 软件包管理器,而在基于 Red Hat 的系统(例如 CentOS 或 RHEL)上,您可以使用 yum。这两种方法都能确保 Logstash 正确集成到系统的包管理基础设施中,从而简化安装和维护。
在本节中,我们将引导您使用 apt 和 yum 包管理器安装 Logstash,确保无论您使用哪种 Linux 发行版,都可以在 Droplet 上配置 Logstash。
要查找操作系统,请运行以下命令:
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 步 - 安装打开搜索输出插件
您可以通过运行以下命令来安装 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 服务器的主机名。与您的 OpenSearch 密码。
2.通过重新启动 Logstash 应用新配置:
sudo systemctl restart logstash
3.检查Logstash日志以确保其正确处理和转发数据:
sudo tail -f /var/log/logstash/logstash-plain.log
nginx-to-opensearch.conf 配置详解
输入
input 块配置两个文件输入来读取日志:
Nginx 日志: 路径: /var/log/nginx/access.log(用于访问日志) /var/log/nginx/error.log (用于错误日志) 开始位置:开始 – 从日志文件的开头读取。 Sincedb 路径:/dev/null – 禁用连续读取的跟踪。 标签: ["nginx_access"] 用于访问日志 ["nginx_error"] 用于错误日志
注意:确保 Logstash 服务有权访问输入路径。
筛选
filter 块根据标签处理日志:
日志处理: 访问日志: 使用 grok 过滤器解析访问日志格式,提取 client_ip、timestamp、method、 等字段>请求、http_version、响应、字节、引用者和user_agent. 删除原始消息和某些元数据字段。
错误日志: 检查 nginx_error 标记并应用 grok 过滤器来提取 timestamp、level、 等字段pid、tid 和 error_message。 还删除消息和元数据字段。
输出
output 块根据事件标签将事件路由到 OpenSearch:
路由至 OpenSearch: 对于访问日志和错误日志,它指定: 主机:OpenSearch 实例的 URL。 用户:doadmin 用于身份验证。 密码:您的 OpenSearch 密码。 索引: nginx_access-%{+YYYY.MM.dd} 用于访问日志 nginx_error-%{+YYYY.MM.dd} 用于错误日志 SSL 设置:启用 SSL 和证书验证。
第 4 步 - 配置 OpenSearch
1.打开 Web 浏览器并转到 OpenSearch 仪表板 URL:
https://<OpenSearch-Hostname>
将 OpenSearch-Hostname 替换为 OpenSearch 服务器的主机名。
2.创建索引模式。 一个。在左侧边栏上,导航至管理 > 仪表板管理 > 索引模式。 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 服务器的主机名。与您的 OpenSearch 密码。
数据摄取
您可以使用以下curl命令确保数据在OpenSearch中正确索引:
curl -u doadmin:your_password -X GET "http://<OpenSearch-Hostname>:25060/nginx-logs-*/_search?pretty"
代替 :
OpenSearch-Hostname替换为您的 OpenSearch 服务器的主机名。以及您的 OpenSearch 密码
防火墙和网络配置
确保防火墙规则和网络设置允许端口 25060 上 Logstash 和 OpenSearch 之间的流量。
结论
在本指南中,您学习了如何设置 Logstash 来收集 Nginx 日志并将其转发到 OpenSearch。
您回顾了如何使用 apt 或 yum 包管理器(具体取决于您的 Linux 发行版)在您的 Droplet 上启动并运行 Logstash。您还创建并调整了 Logstash 配置文件,以确保正确解析 Nginx 日志并将其发送到 OpenSearch。然后,您在 OpenSearch 仪表板中设置索引模式,以检查日志是否已正确索引并可供分析。完成这些步骤后,您现在应该有一个工作设置,Logstash 可以在其中收集 Nginx 日志并将其发送到 OpenSearch。此设置允许您使用 OpenSearch 强大的搜索和可视化工具来分析服务器日志。
如果您遇到任何问题,请查看我们提供的故障排除提示,并参阅 Logstash 和 OpenSearch 文档以获取更多帮助。定期监控将使您的日志系统保持平稳有效的运行。
