如何从不同的服务器收集日志到中央服务器(弹性搜索和 kibana)
How to collect log from different servers to a central server(Elastic search and kibana)
我的任务是创建一个中央日志服务器。在我的例子中,分布着许多 Web 应用程序服务器。我的任务是从这些不同的服务器获取日志并在中央服务器中进行管理,那里会有 elastic-search
和 kibana
.
问题
- 是否可以从具有不同 public IP 的服务器获取日志?如果可以怎么办?
- 中央服务器需要多少资源(CPU、内存、存储)。
所见所闻
- 看到示例设置,其中所有日志和应用程序仅在同一台机器上。
正在寻找通过 public IP 将日志发送到 elastic-search 的方法。
是的,可以从具有不同 public IP 的服务器获取日志。您需要为每个产生日志的服务器设置一个像 filebeat(由 elastic 提供)这样的代理。
- 您需要在每台机器上设置 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。
- 资源取决于您产生的数据量、数据保留计划、TPS 和您的自定义要求。如果您能提供更多详细信息,我将能够提供有关资源需求的粗略想法。
我想与 Ishara 的回答有所不同。您可以将日志直接从 filebeat 发送到 elasticsearch 而无需使用 logstash,如果您的日志是通用类型(系统日志、nginx 日志、apache 日志),使用这种方法您不需要像 filebeat 那样承担额外的成本和维护 logstash提供内置解析处理器。
如果您的服务器上有基于 OS 的 debian,我准备了一个 shell 脚本来安装和配置 filebeat。您需要更改 elasticsearch 服务器 URL 并根据您要配置的模块修改倒数第二行。
关于您的第一个问题,是的,您可以在每台服务器上 运行 filebeat 代理并发送数据以集中 Elasticsearch。
对于你的第二个问题,这取决于 elasticsearch 服务器将要处理和存储的日志量。它还取决于托管 kibana 的位置。
sudo wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
sudo apt-get update && sudo apt-get install -y filebeat
sudo systemctl enable filebeat
sudo bash -c "cat >/etc/filebeat/filebeat.yml" <<FBEOL
filebeat.inputs:
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
setup.template.name: "filebeat-system"
setup.template.pattern: "filebeat-system-*"
setup.template.settings:
index.number_of_shards: 1
setup.ilm.enabled: false
setup.kibana:
output.elasticsearch:
hosts: ["10.32.66.55:9200", "10.32.67.152:9200", "10.32.66.243:9200"]
indices:
- index: "filebeat-system-%{+yyyy.MM.dd}"
when.equals:
event.module: system
processors:
- add_host_metadata: ~
- add_cloud_metadata: ~
- add_docker_metadata: ~
- add_kubernetes_metadata: ~
logging.level: warning
FBEOL
sudo filebeat modules enable system
sudo systemctl restart filebeat
我的任务是创建一个中央日志服务器。在我的例子中,分布着许多 Web 应用程序服务器。我的任务是从这些不同的服务器获取日志并在中央服务器中进行管理,那里会有 elastic-search
和 kibana
.
问题
- 是否可以从具有不同 public IP 的服务器获取日志?如果可以怎么办?
- 中央服务器需要多少资源(CPU、内存、存储)。
所见所闻
- 看到示例设置,其中所有日志和应用程序仅在同一台机器上。
正在寻找通过 public IP 将日志发送到 elastic-search 的方法。
是的,可以从具有不同 public IP 的服务器获取日志。您需要为每个产生日志的服务器设置一个像 filebeat(由 elastic 提供)这样的代理。
- 您需要在每台机器上设置 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。
- 资源取决于您产生的数据量、数据保留计划、TPS 和您的自定义要求。如果您能提供更多详细信息,我将能够提供有关资源需求的粗略想法。
我想与 Ishara 的回答有所不同。您可以将日志直接从 filebeat 发送到 elasticsearch 而无需使用 logstash,如果您的日志是通用类型(系统日志、nginx 日志、apache 日志),使用这种方法您不需要像 filebeat 那样承担额外的成本和维护 logstash提供内置解析处理器。
如果您的服务器上有基于 OS 的 debian,我准备了一个 shell 脚本来安装和配置 filebeat。您需要更改 elasticsearch 服务器 URL 并根据您要配置的模块修改倒数第二行。
关于您的第一个问题,是的,您可以在每台服务器上 运行 filebeat 代理并发送数据以集中 Elasticsearch。 对于你的第二个问题,这取决于 elasticsearch 服务器将要处理和存储的日志量。它还取决于托管 kibana 的位置。
sudo wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
sudo apt-get update && sudo apt-get install -y filebeat
sudo systemctl enable filebeat
sudo bash -c "cat >/etc/filebeat/filebeat.yml" <<FBEOL
filebeat.inputs:
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
setup.template.name: "filebeat-system"
setup.template.pattern: "filebeat-system-*"
setup.template.settings:
index.number_of_shards: 1
setup.ilm.enabled: false
setup.kibana:
output.elasticsearch:
hosts: ["10.32.66.55:9200", "10.32.67.152:9200", "10.32.66.243:9200"]
indices:
- index: "filebeat-system-%{+yyyy.MM.dd}"
when.equals:
event.module: system
processors:
- add_host_metadata: ~
- add_cloud_metadata: ~
- add_docker_metadata: ~
- add_kubernetes_metadata: ~
logging.level: warning
FBEOL
sudo filebeat modules enable system
sudo systemctl restart filebeat