在Linux服务器运维和应用程序调试过程中,日志是排查问题的核心依据。当日志量达到GB甚至TB级别时,使用grep、awk等传统工具搜索日志会非常缓慢,Elasticsearch作为分布式搜索和分析引擎,能够高效存储、检索和分析海量日志数据,是日志分析场景的常用解决方案。

环境准备与Elasticsearch安装
首先需要准备一台运行Linux系统的服务器,推荐配置至少2核4G内存,确保系统已安装Java环境,Elasticsearch依赖Java运行,建议安装Java 11及以上版本。可以通过以下命令检查Java是否安装:
# 检查Java版本 java -version
如果未安装Java,以CentOS系统为例,执行以下命令安装:
# 安装Java 11 yum install -y java-11-openjdk-devel
接下来下载Elasticsearch安装包,这里选择稳定版本,执行以下命令:
# 下载Elasticsearch安装包 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.10.2-linux-x86_64.tar.gz # 解压安装包 tar -zxvf elasticsearch-8.10.2-linux-x86_64.tar.gz # 移动到/usr/local目录 mv elasticsearch-8.10.2 /usr/local/elasticsearch
Elasticsearch基础配置与启动
进入Elasticsearch配置目录,修改elasticsearch.yml配置文件,调整基础参数:
# 进入配置目录 cd /usr/local/elasticsearch/config # 编辑配置文件 vim elasticsearch.yml
配置文件修改内容如下:
# 集群名称,自定义即可 cluster.name: my-log-cluster # 节点名称 node.name: node-1 # 数据存放路径 path.data: /usr/local/elasticsearch/data # 日志存放路径 path.logs: /usr/local/elasticsearch/logs # 监听地址,允许所有IP访问 network.host: 0.0.0.0 # 监听端口 http.port: 9200 # 初始化主节点 cluster.initial_master_nodes: ["node-1"]
Elasticsearch不允许使用root用户启动,需要创建专用用户:
# 创建用户 useradd esuser # 设置密码 passwd esuser # 授权目录权限 chown -R esuser:esuser /usr/local/elasticsearch # 切换用户 su esuser
启动Elasticsearch服务:
# 启动服务,后台运行加-d参数 /usr/local/elasticsearch/bin/elasticsearch -d
启动后可以通过curl命令检查服务是否正常运行:
# 检查服务状态 curl http://127.0.0.1:9200
如果返回类似以下JSON内容,说明服务启动成功:
{
"name" : "node-1",
"cluster_name" : "my-log-cluster",
"cluster_uuid" : "xxxx-xxxx-xxxx-xxxx",
"version" : {
"number" : "8.10.2",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "xxxx",
"build_date" : "2023-10-xx",
"build_snapshot" : false,
"lucene_version" : "9.7.0",
"minimum_wire_compatibility_version" : "7.17.0",
"minimum_index_compatibility_version" : "7.0.0"
},
"tagline" : "You Know, for Search"
}
日志采集配置
Elasticsearch本身不负责采集日志,通常需要配合Filebeat采集日志并发送到Elasticsearch。首先安装Filebeat:
# 下载Filebeat安装包 wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.10.2-linux-x86_64.tar.gz # 解压 tar -zxvf filebeat-8.10.2-linux-x86_64.tar.gz mv filebeat-8.10.2-linux-x86_64 /usr/local/filebeat
修改Filebeat配置文件filebeat.yml,配置日志采集路径和输出到Elasticsearch:
filebeat.inputs:
- type: log
enabled: true
# 采集的日志路径,根据实际需求修改
paths:
- /var/log/nginx/access.log
- /var/log/app/*.log
# 给日志添加自定义标签,方便后续分类
tags: ["nginx-log","app-log"]
setup.template.settings:
index.number_of_shards: 1
# 输出到Elasticsearch
output.elasticsearch:
hosts: ["127.0.0.1:9200"]
# 如果Elasticsearch开启了安全认证,需要配置用户名密码
# username: "elastic"
# password: "xxxx"
启动Filebeat服务:
# 进入Filebeat目录 cd /usr/local/filebeat # 启动Filebeat,后台运行 nohup ./filebeat -e -c filebeat.yml > filebeat.log 2>&1 &
日志搜索与分析操作
日志采集完成后,就可以使用Elasticsearch的REST API进行搜索和分析,以下是常用的操作示例。
基础全文搜索
搜索所有包含error关键词的日志:
curl -X GET "http://127.0.0.1:9200/_search?pretty" -H "Content-Type: application/json" -d'
{
"query": {
"match": {
"message": "error"
}
}
}
'
按时间范围搜索
搜索最近1小时内的日志,假设日志中有@timestamp字段记录时间:
curl -X GET "http://127.0.0.1:9200/_search?pretty" -H "Content-Type: application/json" -d'
{
"query": {
"range": {
"@timestamp": {
"gte": "now-1h",
"lte": "now"
}
}
}
}
'
组合条件搜索
搜索nginx日志中状态码为500且包含error的日志:
curl -X GET "http://127.0.0.1:9200/_search?pretty" -H "Content-Type: application/json" -d'
{
"query": {
"bool": {
"must": [
{"match": {"message": "error"}},
{"match": {"tags": "nginx-log"}},
{"match": {"status": 500}}
]
}
}
}
'
聚合分析日志
统计不同状态码的日志数量:
curl -X GET "http://127.0.0.1:9200/_search?pretty" -H "Content-Type: application/json" -d'
{
"size": 0,
"aggs": {
"status_count": {
"terms": {
"field": "status"
}
}
}
}
'
常用优化建议
- 根据日志量合理设置索引分片数,单个分片大小建议控制在10GB到50GB之间,避免分片过多导致集群压力增大
- 对不需要搜索的字段设置为
index: false,减少索引存储开销 - 定期删除过期日志索引,避免磁盘空间被占满,可以通过ILM(索引生命周期管理)自动管理索引
- 如果是生产环境,建议部署至少3个节点的Elasticsearch集群,保证高可用性
注意:Elasticsearch默认开启安全功能,首次启动会生成超级用户elastic的密码,如果需要远程访问或者开启认证,需要根据官方文档配置相关安全参数,避免服务暴露在公网无防护运行。
ElasticsearchLinux日志分析全文搜索修改时间:2026-07-04 20:27:31