如何收集日志到 Elasticsearch

How to gather logs to Elasticsearch

我在不同的服务器(很多机器)上有网络应用程序的日志。如何在安装了 Elastic search 和 Kibana 的系统中收集这些日志。当我搜索时,我只找到显示设置的教程,其中 logslogstashbeatselasticsearchkibana 都在一起。

您可以使用 Splunk 和 Splunk 转发器将所有日志收集在一起。 在您的 Web 服务器中使用 Splunk 转发器将所有日志转发到具有 Splunk 的中央服务器。

  • 您需要先安装 Filebeat,它会从所有 Web 服务器收集日志。
  • 之后需要从 Filebeat -> Logstash 传递日志。
  • 在 Logstash 中,您可以根据 Grok 模式格式化和删除不需要的日志。
  • 从 Logstash 转发日志 -> Elasticsearch 用于存储和索引。
  • 连接 Kibana 和 Elasticsearch 以添加索引并根据所选索引在 Matrix 中查看日志。

由于您有很多机器产生日志,您需要使用 Filebeat、Logstash、Elasticsearch 和 Kibana 设置 ELK 堆栈。

  • 您需要在每台机器上设置 filebeat 实例。

它将在每台机器上侦听您的日志文件并将它们转发到您在 filebeat.yml 配置文件中提到的 logstash 实例,如下所示:

#=========================== Filebeat inputs =============================

filebeat.inputs:

- type: log

  # Change to true to enable this input configuration.
  enabled: true

  # Paths that should be crawled and fetched. Glob based paths.
  paths:
    - /path_to_your_log_1/ELK/your_log1.log
    - /path_to_your_log_2/ELK/your_log2.log

#----------------------------- Logstash output --------------------------------
output.logstash:
  # The Logstash hosts
  hosts: ["private_ip_of_logstash_server:5044"]
  • Logstash 服务器侦听端口 5044 并通过 logstash 配置文件流式传输所有日志:

    input {
          beats { port => 5044 }      
    }
    filter {
        # your log filtering logic is here
    }
    output {
            elasticsearch {
                hosts => [ "elasticcsearch_server_private_ip:9200" ]
                index => "your_idex_name"
            }
    }
    
  • 在 logstash 中,您可以过滤日志并将其拆分为字段,并将它们发送到 elasticsearch。

  • Elasticsearch 将我们通过 logstash 发送的所有数据保存在索引中。
  • elasticsearch数据库中的所有数据都可以通过Kibana读取。我们可以使用 kibana 基于我们的数据创建包含多种类型图表的仪表板。

下面是带有filebeat的ELK的基本架构:

如其他答案中所述,您需要在所有实例上安装 Filebeat 以侦听日志文件并发送日志。 您的 Filebeat 配置将取决于您的日志格式(例如 log4j)和您希望将其发送到的位置(例如:Kafka、Logstash、Elasticsearch)。

配置示例:

filebeat.inputs:
- type: log
  paths:
    - /var/log/system.log
  multiline.pattern: '^\REGEX_TO_MATCH_YOUR_LOG_FORMAT'
  multiline.negate: true
  multiline.match: after

output.elasticsearch:
  hosts: ["https://localhost:9200"]
  username: "filebeat_internal"
  password: "YOUR_PASSWORD"

此外,如果您不想使用 Logstash 不是 强制性的,日志可以直接发送到 Elasticsearch,但您需要在 Elasticsearch 集群中设置摄取管道处理传入的日志,更多关于摄取管道here

还有一个更有用link:Working With Ingest Pipelines In ElasticSearch And Filebeat

为了获取所有 Web 应用程序日志,您需要设置 ELK 堆栈。现在你有弹性搜索设置,它只是一个保存所有日志数据的数据库。为了查看这些日志,您需要 UI Kibana,然后您需要 Logstash 和 Filebeat 来读取应用程序的这些日志并将其传输到 Logstash 或直接传输到 Elasticsearch。
如果您想要一个合适的集中式日志系统,那么我建议您也将 Logstash 与 Filebeat 一起使用。由于您的服务器与安装 Filebeat 的每台服务器上的服务器不同,在您安装 kibana 和 Elasticsearch 的主服务器上安装 Logstash 并将所有 Filebeats 指向该服务器。

FileBeats 是我们作为代理安装在服务器上的轻量级数据传送器,用于将特定类型的操作数据发送到 Logstash,然后 logstash 进行过滤并将该日志数据发送到 elasticsearch。

检查 How To Setup ELK 按照本网站上的说明进行操作。还有,看 FileBeat + ELK Setup

如果您不想在 Elasticsearch 和 Kibana 堆栈中添加其他工具,您可以直接将日志发送到 Elasticsearch,但在构建管道时要小心,以获得更稳定的系统。

要收集日志,您可以使用 python 或其他语言,但对于 python 我会使用这个库: https://elasticsearch-py.readthedocs.io/en/master/

python还有一个中等教程:

https://medium.com/naukri-engineering/elasticsearch-tutorial-for-beginners-using-python-b9cb48edcedc

如果您更喜欢其他语言将您的日志推送到 elasticsearch,当然您也可以使用它们。我只是建议 python 因为我更熟悉它,而且你可以用它来创建一个快速的原型,然后再把它变成产品。