如何收集日志到 Elasticsearch
How to gather logs to Elasticsearch
我在不同的服务器(很多机器)上有网络应用程序的日志。如何在安装了 Elastic search 和 Kibana 的系统中收集这些日志。当我搜索时,我只找到显示设置的教程,其中 logs
、logstash
、beats
、elasticsearch
和 kibana
都在一起。
您可以使用 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 因为我更熟悉它,而且你可以用它来创建一个快速的原型,然后再把它变成产品。
我在不同的服务器(很多机器)上有网络应用程序的日志。如何在安装了 Elastic search 和 Kibana 的系统中收集这些日志。当我搜索时,我只找到显示设置的教程,其中 logs
、logstash
、beats
、elasticsearch
和 kibana
都在一起。
您可以使用 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 因为我更熟悉它,而且你可以用它来创建一个快速的原型,然后再把它变成产品。