介绍
高效的 Web 服务器日志管理对于维护网站性能、排查问题以及深入了解用户行为至关重要。Apache 是最流行的 Web 服务器之一,它会生成包含宝贵信息的访问日志和错误日志。为了有效地管理和分析这些日志,您可以使用 Logstash 来处理它们,并将其发送到 DigitalOcean 的托管 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
要添加 Logstash 软件仓库,请使用上面描述的 echo 方法。不要使用 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 文件中。您可以使用«t»命令更新和创建该文件。.
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 Output 插件
可以通过运行以下命令安装 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 密码。.
让我们来分析一下上面的配置。.
- 输入:用于配置事件源。此处使用文件输入插件。.
- 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 中的事件,通常用于下游的输出阶段或配置过滤。我们使用标签来实现后者。
- 过滤器:用于处理事件。.
从条件语句开始:
(if "apache_access" in [tags]):
此语句检查传入日志事件的 [tags] 部分中是否存在 apache_access 标签。我们使用此条件将相应的 GROK 过滤器应用于 Apache 访问日志和错误日志。.
- Grok过滤器(用于Apache访问日志):
grok {
match => { "message" => "%{HTTPD_COMBINEDLOG}" }
}grok 过滤器 %{HTTPD_COMBINEDLOG} 是 Logstash 中预定义的模式,用于解析 Apache 组合访问日志格式。它从接收到的事件的消息体中提取 IP 地址、时间戳、HTTP 方法、URI、状态码等字段。.
- 修改过滤器删除(可选):解析 Apache 日志后,我们使用 mutate-remove 删除一些字段。.
mutate {
remove_field => [ "message","[log][file][path]","[event][original]" ]
}- 另一个条件:如果 apache_access 标签不在 [tags] 中,则执行 else 代码块。此 else 代码块包含另一个用于 Apache 错误日志的 GROK 过滤器。.
grok {
match => { "message" => "%{HTTPD24_ERRORLOG}" }
}
此 %{HTTPD24_ERRORLOG} 过滤器解析符合 Apache 错误日志格式的消息。它提取与错误日志相关的字段,例如时间戳、日志级别、错误消息等。.
您可以在以下位置找到 GROK 模式: https://github.com/logstash-plugins/logstash-patterns-core/tree/main/patterns 寻找。.
- 输出:该插件会将输出事件发送到指定目标位置。.
输出块以 if 条件语句开头。这里我们使用了条件语句。
if "apache_access" in [tags] {}
如果使用条件将日志路由到 OpenSearch 到两个不同的配置文件 apache_error 和 apache_access。.
我们来看看 OpenSearch Output 插件:
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
配置好管道后,启动 Logstash 服务:
systemctl enable logstash.service
systemctl start logstash.service
systemctl status logstash.service第五步——故障排除
检查连接。
您可以通过测试连接来验证 Logstash 是否可以连接到 OpenSearch:
curl -u your_username:your_password -X GET "https://your-opensearch-server:25060/_cat/indices?v"
使用 OpenSearch 服务器的主机名和,请替换为您的 OpenSearch 凭据。.
数据摄取
确保数据已在 OpenSearch 中正确建立索引:
curl -u your_username:your_password -X GET "http://your-opensearch-server:25060/<your-index-name>/_search?pretty"
使用 OpenSearch 服务器的主机名和,请替换为您的 OpenSearch 凭据。同样地,名为 Index。.
防火墙和网络配置
请确保您的防火墙规则和网络设置允许 Logstash 和 OpenSearch 在端口 25060 上进行通信。.
日志
与 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。.









