网站搜索

通过 Logstash 将 Apache 日志转发到 OpenSearch


介绍

有效的网络服务器日志管理对于维护网站性能、解决问题以及深入了解用户行为至关重要。 Apache 是最流行的 Web 服务器之一。它生成包含有价值信息的访问和错误日志。为了有效地管理和分析这些日志,您可以使用 Logstash 来处理它们并将其转发到 DigitalOcean 的 Managed OpenSearch 进行索引和可视化。

在本教程中,我们将指导您在 Droplet 上安装 Logstash,将其配置为收集 Apache 日志,并将其发送到 Managed OpenSearch 进行分析。

先决条件

  1. 安装了 Apache Web 服务器的 Droplet。
  2. 托管 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。

相关文章: