您好,登录后才能下订单哦!
在现代的Web应用架构中,通常会有多个域名或子域名对应不同的服务或应用。为了有效地监控和分析这些服务的运行状态,我们需要收集这些域名下的网站日志,并将它们存储到不同的Elasticsearch(ES)索引库中。Filebeat是一个轻量级的日志数据收集器,能够高效地将日志数据发送到Elasticsearch、Logstash等目标。本文将详细介绍如何使用Filebeat收集多个域名网站日志,并将这些日志存储到不同的ES索引库中。
在开始之前,确保你已经具备以下环境:
假设你已经安装并配置好了Elasticsearch和Kibana,接下来我们将重点介绍如何配置Filebeat来收集多个域名的日志。
首先,你需要在服务器上安装Filebeat。以下是在Ubuntu系统上安装Filebeat的步骤:
# 下载并安装Filebeat
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.10.1-amd64.deb
sudo dpkg -i filebeat-7.10.1-amd64.deb
Filebeat的配置文件位于/etc/filebeat/filebeat.yml
。我们需要编辑这个文件来配置Filebeat收集多个域名的日志。
首先,我们需要配置Filebeat的输入部分,指定要收集的日志文件路径。假设我们有两个域名example.com
和api.example.com
,它们的日志文件分别位于/var/log/nginx/example.com.access.log
和/var/log/nginx/api.example.com.access.log
。
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/example.com.access.log
fields:
domain: example.com
fields_under_root: true
- type: log
enabled: true
paths:
- /var/log/nginx/api.example.com.access.log
fields:
domain: api.example.com
fields_under_root: true
在上面的配置中,我们为每个日志文件指定了一个domain
字段,这个字段将用于区分不同域名的日志。
接下来,我们需要配置Filebeat将日志数据发送到Elasticsearch。假设你的Elasticsearch运行在localhost:9200
。
output.elasticsearch:
hosts: ["localhost:9200"]
indices:
- index: "example-com-%{+yyyy.MM.dd}"
when.equals:
domain: "example.com"
- index: "api-example-com-%{+yyyy.MM.dd}"
when.equals:
domain: "api.example.com"
在上面的配置中,我们使用了indices
选项来根据domain
字段的值将日志数据存储到不同的索引中。example-com-%{+yyyy.MM.dd}
和api-example-com-%{+yyyy.MM.dd}
是索引名称的模板,%{+yyyy.MM.dd}
表示按天创建索引。
如果你使用Kibana来可视化日志数据,可以配置Filebeat将索引模式发送到Kibana。
setup.kibana:
host: "localhost:5601"
完成配置后,启动Filebeat服务:
sudo systemctl start filebeat
sudo systemctl enable filebeat
启动Filebeat后,你可以通过Elasticsearch的API来检查是否成功创建了索引。
curl -X GET "localhost:9200/_cat/indices?v"
你应该会看到类似以下的输出:
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open example-com-2023.10.01 abcdef1234567890abcdef 1 1 0 0 208b 208b
green open api-example-com-2023.10.01 xyz1234567890abcdef 1 1 0 0 208b 208b
如果你配置了Kibana,可以在Kibana的“索引模式”页面中查看是否成功创建了索引模式。
在某些情况下,你可能需要对日志数据进行预处理,例如解析日志格式、添加额外的字段等。你可以使用Logstash作为中间件来处理日志数据。
首先,安装并配置Logstash。假设Logstash的配置文件位于/etc/logstash/conf.d/filebeat.conf
。
input {
beats {
port => 5044
}
}
filter {
if [domain] == "example.com" {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
} else if [domain] == "api.example.com" {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "%{[domain]}-%{+yyyy.MM.dd}"
}
}
在上面的配置中,我们使用grok
插件来解析Apache格式的日志,并根据domain
字段将日志数据存储到不同的索引中。
修改Filebeat的配置文件,将输出指向Logstash。
output.logstash:
hosts: ["localhost:5044"]
Elasticsearch的Ingest Node功能允许你在数据索引之前对其进行预处理。你可以使用Ingest Node来替代Logstash进行简单的数据处理。
首先,创建一个Ingest Pipeline来处理日志数据。
curl -X PUT "localhost:9200/_ingest/pipeline/nginx-logs" -H 'Content-Type: application/json' -d'
{
"description": "Pipeline for processing nginx logs",
"processors": [
{
"grok": {
"field": "message",
"patterns": ["%{COMBINEDAPACHELOG}"]
}
}
]
}
'
修改Filebeat的配置文件,指定使用Ingest Pipeline。
output.elasticsearch:
hosts: ["localhost:9200"]
indices:
- index: "example-com-%{+yyyy.MM.dd}"
when.equals:
domain: "example.com"
pipeline: "nginx-logs"
- index: "api-example-com-%{+yyyy.MM.dd}"
when.equals:
domain: "api.example.com"
pipeline: "nginx-logs"
通过本文的介绍,你应该已经掌握了如何使用Filebeat收集多个域名网站日志,并将这些日志存储到不同的Elasticsearch索引库中。我们还介绍了如何使用Logstash和Elasticsearch的Ingest Node功能对日志数据进行预处理。这些技术可以帮助你更好地管理和分析多个域名的日志数据,从而提高系统的可观测性和运维效率。
在实际应用中,你可能还需要根据具体的业务需求对配置进行调整和优化。希望本文能为你提供一个良好的起点,帮助你构建一个高效的日志收集和分析系统。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。