Elasticsearch是一个强大的分布式搜索和分析引擎,特别适合处理日志数据。以下是完整的配置和使用流程:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo apt-get install apt-transport-https
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 elasticsearch
sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
sudo vi /etc/yum.repos.d/elasticsearch.repo
添加以下内容:
[elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
然后安装:
sudo yum install elasticsearch
编辑配置文件 /etc/elasticsearch/elasticsearch.yml
:
cluster.name: my-elastic-cluster
node.name: ${HOSTNAME}
network.host: 0.0.0.0
discovery.seed_hosts: ["127.0.0.1"]
cluster.initial_master_nodes: ["node1"]
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
启动服务:
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch
验证安装:
curl -X GET "localhost:9200/"
# Ubuntu/Debian
sudo apt-get install kibana
# CentOS/RHEL
sudo yum install kibana
配置Kibana (/etc/kibana/kibana.yml
):
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://localhost:9200"]
启动Kibana:
sudo systemctl enable kibana
sudo systemctl start kibana
访问Kibana:http://your-server-ip:5601
# Ubuntu/Debian
sudo apt-get install logstash
# CentOS/RHEL
sudo yum install logstash
# Ubuntu/Debian
sudo apt-get install filebeat
# CentOS/RHEL
sudo yum install filebeat
/etc/filebeat/filebeat.yml
):filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/*.log
output.elasticsearch:
hosts: ["localhost:9200"]
sudo systemctl enable filebeat
sudo systemctl start filebeat
output.logstash:
hosts: ["localhost:5044"]
/etc/logstash/conf.d/logstash.conf
):input {
beats {
port => 5044
}
}
filter {
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:loglevel} %{GREEDYDATA:message}" }
}
date {
match => [ "timestamp", "ISO8601" ]
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "logs-%{+YYYY.MM.dd}"
}
}
sudo systemctl enable logstash
sudo systemctl start logstash
message: "error"
message: "error" AND host: "web-server-1"
message: "timeout*"
@timestamp: [now-1d TO now]
message: /timeout \d+ms/
/etc/elasticsearch/jvm.options
):-Xms4g
-Xmx4g
PUT _ilm/policy/logs_policy
{
"policy": {
"phases": {
"hot": {
"actions": {
"rollover": {
"max_size": "50GB",
"max_age": "30d"
}
}
},
"delete": {
"min_age": "90d",
"actions": {
"delete": {}
}
}
}
}
}
问题1: Elasticsearch启动失败,内存不足 解决: 增加系统swap空间或调整JVM堆大小
问题2: 索引变为只读状态 解决: 执行以下命令:
PUT _settings
{
"index": {
"blocks": {
"read_only_allow_delete": "false"
}
}
}
问题3: 搜索性能慢 解决: 考虑添加更多索引分片或优化查询语句
通过以上步骤,你可以在Linux系统上建立一个完整的Elasticsearch日志分析和搜索解决方案。根据你的具体需求,可以进一步定制和扩展这个系统。