我被分配了创建中央日志服务器的任务。就我而言,有许多 Web 应用程序服务器分布在其中。我的任务是从这些不同的服务器获取日志并在中央服务器中进行管理,其中将有elastic-search
和kibana
.
问题
- 是否可以从具有不同公共 IP 的服务器获取日志?如果可能怎么办?
- 中央服务器需要多少资源(CPU、内存、存储)。
看到的东西
- 看到所有日志和应用程序仅在同一台机器上的示例设置。
寻找通过公共 IP 将日志发送到弹性搜索的方法。
我被分配了创建中央日志服务器的任务。就我而言,有许多 Web 应用程序服务器分布在其中。我的任务是从这些不同的服务器获取日志并在中央服务器中进行管理,其中将有elastic-search
和kibana
.
问题
看到的东西
寻找通过公共 IP 将日志发送到弹性搜索的方法。
我想与伊沙拉的答案不同。您可以不使用logstash直接将日志从filebeat发送到elasticsearch,如果您的日志是通用类型(系统日志,nginx日志,apache日志),使用这种方法您不需要承担额外的成本和logstash作为filebeat的维护提供内置解析处理器。
如果您的服务器上有基于 debian 的操作系统,我准备了一个 shell 脚本来安装和配置 filebeat。您需要更改 elasticsearch 服务器 URL 并根据要配置的模块修改倒数第二行。
关于您的第一个问题,是的,您可以在每台服务器上运行 filebeat 代理并发送数据以集中 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
是的,可以从具有不同公共 IP 的服务器获取日志。您需要为每个生成日志的服务器设置一个代理,如filebeat(由 elastic 提供)。
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。