草履虫也能看懂的ELK搭建流程
环境需要
- Elasticsearch需要JAVA环境,至少是JDK1.8
- elasticsearch 不允许root用户使用,需要新增个elk用户
- 如果觉得官网下载太慢,可以使用这个
https://pan.baidu.com/s/1LndFYnnZQwFx2-MlDZXdaQ
提取码:7qnk
Elasticsearch
下载及安装
- 如果网络状况好,可以考虑在线安装,比较省事
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.2-linux-x86_64.tar.gz
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.2-linux-x86_64.tar.gz.sha512
shasum -a 512 -c elasticsearch-7.6.2-linux-x86_64.tar.gz.sha512 #校验
#校验的正常输出为 elasticsearch-{version}-linux-x86_64.tar.gz: OK
tar -xzf elasticsearch-7.6.2-linux-x86_64.tar.gz
cd elasticsearch-7.6.2/
-
或者下载离线包,然后手动上传到服务器去解压。Elasticsearch官网下载地址
找到 Install Elasticsearch from archive on Linux or MacOS ,点进去就自动下载了。 -
或者参考这篇文章的安装方式 快速搭建ELK日志分析系统
注意!我这里使用的版本是7.6.2,ELK三个软件的版本需要保持一致才可以。
配置文件
cluster.name: demo
node.name: node-1
path.data: /data/es-data
path.logs: /var/log/elasticsearch/
bootstrap.memory_lock: true
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["127.0.0.1", "[::1]"]
cluster.initial_master_nodes: ["node-1"]
注意!配置文件中的path.logs和path.data这俩文件夹都要把权限赋给elk用户!不然运行时就会报错。
chown -R elk.elk 文件夹路径
运行测试
在elasticsearch的根目录
#运行elasticsearch:
bin/elasticsearch &
#检查端口
netstat -antp |grep 9200
#测试接口访问
curl http://127.0.0.1:9200/
#返回结果如下则表示运行成功:
{
"name" : "node-1",
"cluster_name" : "demo",
"cluster_uuid" : "PLIR2GguShK5RtDlE7xFeQ",
"version" : {
"number" : "7.6.2",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
"build_date" : "2020-03-26T06:34:37.794943Z",
"build_snapshot" : false,
"lucene_version" : "8.4.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
ElasticsearchAPI
Elasticsearch提供了API来方便用户使用,具体可以参考这篇 Elasticsearch 快速开始
下面是两个常用的API,用来查看logstash是否成功将消息传入了Elasticsearch
1. 查看全部索引
curl -X GET "localhost:9200/_cat/indices?v"
2. 查看某个索引中的所有文档
curl -X GET "http://localhost:9200/索引名称/_search?q=*&pretty"
插件(可选项)
安装elasticsearch-head插件
- 使用docker安装,省时省力
docker run -p 9100:9100 mobz/elasticsearch-head:5
- 或使用git安装
yum install -y npm
git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install
npm run start
- 测试访问
netstat -antp |grep 9100 #查看端口运行情况
在浏览器上访问 http://IP:9100/ 查看是否成功启动
Logstash
下载
官方网站中提供了tar.gz安装包和在线下载,自行选择。 官方下载地址
往下翻还有安装配置指引,讲真还是蛮细心的。
测试
bin/logstash -e 'input { stdin { } } output { stdout {} }'
成功运行的话,应当是你输入什么,他就给你返回什么,而且是带有time和host的格式化输出
配置
新建个配置文件,比如elk.conf,如下输入并保存
input { stdin { } }
output {
elasticsearch { hosts => ["elasticsearch服务的IP:9200"] }
stdout { codec => rubydebug }
}
运行
通过刚才新建的配置文件来启动logstash
logstash -f ./elk.conf
这时,你输入进去的信息,就会被发往两个地方,一个是发给elasticsearch,另一个是由标准输出显示出去。
最好也是用elk这个用户来运行,报错的话注意看是否是没有写权限。我用elk用户运行Elasticsearch之后,再用root用户运行Logstash时,发现无法查询到输入的信息。
Kibana
下载
配置
解压之后,开始配置Logstash
编辑kibana的配置文件
vim kibana/config/kibana.yml
修改配置文件如下,开启以下的配置
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.url: "http://192.168.1.202:9200"
kibana.index: ".kibana"
#设置为中文
i18n.locale: "zh-CN"
运行
#这里仍是使用elk用户运行
bin/kibana
运行成功后,kibana会自动去按照配置中的路径去连接Elasticsearch,如果没连接上,他会有提示并且一直重复尝试连接。
测试与使用
在浏览器中输入地址:http://IP:5601就可以啦!不过第一次进入可能会很慢。
然后就是去连接Elasticsearch中的Logstash索引。
下面会列出来Elasticsearch 中可用的索引,选择logstash,下一步,配置时间索引,点击完成就OK啦。
然后左侧菜单栏的第二个按钮,进入Discover页面,选择logstash索引,此时可能会发现,哎?怎么没数据,那就请注意你的右上角时间筛选是否默认为最近十五分钟了,更改时间筛选条件后再次查询,就可以顺利查到你刚才在logstash里面传进去的消息啦!
至此,基础的搭建工作告一段落。当我看到我在logstash命令行中传入的那些数据真的可以在Kibana的页面中显示出来的时候,真的是满满的成就感,就像搭积木一样的把这三个工具拼接到了一起,很开心。
但是之后才是真正学习的开始,下一步是让logstash从日志文件中实时读取信息传入Elasticsearch 中,还要去学习如何更好的使用这三个软件,任重道远。
报错解决
max virtual memory areas vm.max_map_count is too low
参考此处 max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
elasticsearch进程莫名其妙关闭了?
内存占用过大,系统会oom kill掉占用最大内存的进程(没办法,测试用的云服务器是最低的配置)。
关掉oom kill(不推荐在生产环境使用):
vm.panic_on_oom = 1 //1表示关闭,默认为0表示开启OOM
sysctl -p
最后
参考文章:
- 【主要参考】快速搭建ELK日志分析系统
- 【官方文档】Install Elasticsearch from archive on Linux or MacOS
- 【官方文档】Configuring Logstash
- ELK 快速指南
- ELK快速搭建教程
- 【这一篇极其详细,推荐阅读】ELK实时日志分析平台环境部署--完整记录
- 【Elasticsearch的API参考】 Elasticsearch 快速开始