通过 Logstash 将 Apache 日志转发到 OpenSearch
介绍
有效的网络服务器日志管理对于维护网站性能、解决问题以及深入了解用户行为至关重要。 Apache 是最流行的 Web 服务器之一。它生成包含有价值信息的访问和错误日志。为了有效地管理和分析这些日志,您可以使用 Logstash 来处理它们并将其转发到 DigitalOcean 的 Managed OpenSearch 进行索引和可视化。
在本教程中,我们将指导您在 Droplet 上安装 Logstash,将其配置为收集 Apache 日志,并将其发送到 Managed OpenSearch 进行分析。
先决条件
- 安装了 Apache Web 服务器的 Droplet。
- 托管 OpenSearch 集群
第 1 步 - 安装 Logstash
Logstash 可以使用二进制文件或通过包存储库安装。为了更轻松地管理和更新,通常建议使用包存储库。
在本节中,我们将指导您使用 APT 和 YUM 包管理器在 Droplet 上安装 Logstash。
让我们识别操作系统:
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
将存储库定义保存到 /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 步 - 安装打开搜索输出插件
可以通过运行以下命令来安装 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 服务器的主机名,并将 替换为您的 OpenSearch 密码。
我们来分解一下上面的配置。
INPUT:这用于配置事件源。这里使用“文件”输入插件。
path => “/var/log/apache2/access.log ” :指定 Logstash 将从中读取的 Apache 访问日志文件的路径
请确保 Logstash 服务有权访问输入路径。
start_position => “beginning ”:定义 Logstash 应从何处开始读取日志文件。 “beginning”表示Logstash应该从头开始处理文件,而不是从末尾开始
sincedb_path =>“/dev/null”:指定sincedb文件的路径。 Logstash 使用sincedb 文件来跟踪日志文件中的当前位置,使其能够在重新启动或失败时从中断处恢复。
Tags =>“apache_access”:为从此输入读取的事件分配标签。标签对于识别和过滤 Logstash 中的事件非常有用,通常在配置的输出或过滤阶段的下游使用。我们为后者使用标签
FILTER:用于处理事件。
从条件句开始:
(if "apache_access" in [tags]):这会检查传入日志事件的 [tags] 字段中是否存在标签
apache_access。我们使用此条件为 Apache 访问和错误日志应用适当的 GROK 过滤器。Grok 过滤器(用于 Apache 访问日志):
grok { match => { "message" => "%{HTTPD_COMBINEDLOG}" } }grok 过滤器
%{HTTPD_COMBINEDLOG}是 Logstash 中的预定义模式,用于解析 Apache 组合访问日志格式。这会从传入事件的消息字段中提取 IP 地址、时间戳、HTTP 方法、URI、状态代码等字段。Mutate Filter
Remove(可选):解析 Apache 日志后,我们使用 mutate-remove 删除某些字段。mutate { remove_field => [ "message","[log][file][path]","[event][original]" ] }Else 条件:如果 [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。
输出:输出插件将事件发送到特定目的地。
输出块以 if 条件开始。我们在这里使用 if 条件
if "apache_access" in [tags] {}此 if 条件用于将 OpenSearch 日志路由到两个单独的索引:
apache_error和apache_access。让我们探索一下 OpenSearch 输出插件:
hosts => "https://XXX:25060" Your Open search Hostname user => "doadmin" Your Open search Username password => "XXXXX" OpenSearch Password index => "apache_error" Index name in OpenSearch ssl_certificate_verification => true Enabled SSL certificate verification
{ }
第 4 步 - 启动 Logstash
配置 Pipeline 后,启动 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 服务器的主机名,并将 <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 服务器的主机名,并将 <your_username>、<your_password> 替换为您的 OpenSearch 凭据。同样,<your-index-name> 与索引名称。
防火墙和网络配置
确保防火墙规则和网络设置允许端口 25060 上 Logstash 和 OpenSearch 之间的流量。
日志
Logstash 的日志可以在 /var/log/logstash/logstash-plain.log 中找到
有关详细信息,请参阅故障排除。
结论
在本指南中,我们逐步介绍了如何设置 Logstash 来收集 Apache 日志并将其转发到 OpenSearch。以下是我们所讨论内容的快速回顾:
安装 Logstash:我们介绍了如何使用 APT 或 YUM 包管理器(具体取决于您的 Linux 发行版)在 Droplet 上安装 Logstash。
配置Logstash:我们创建并调整了Logstash 配置文件,以确保正确解析Apache 日志并将其发送到OpenSearch。
在 OpenSearch 中验证:我们在 OpenSearch 仪表板中设置了索引模式,以确认您的日志已正确索引并且可供分析。
完成这些步骤后,您现在应该拥有一个功能设置,Logstash 可以在其中收集 Apache 日志并将其发送到 OpenSearch。
