ELK就是ElasticSearch + LogStash + Kibana,公司一直在使用ELK进行日志收集可视化,感觉ELK是一套十分有用的工具,为了了解ELK的原理,熟悉ELK操作,准备自己在测试服务器上部署一套ELK系统
1. LogStash
- 它可以流放到各自的服务器上收集Log日志,通过内置的ElasticSearch插件解析后输出到ES中。
2.ElasticSearch
- 这是一个基于Lucene的分布式全文搜索框架,可以对logs进行分布式存储,有点像hdfs
3. Kibana
- 所有的log日志都到ElasticSearch之后,我们需要给他展示出来,对吧? 这个时候Kibana就出手了,它可以多维度的展示es中的数据。这也解决了用mysql存储带来了难以可视化的问题。
一、ELK软件下载
- 1 进入官方网站https://www.elastic.co/cn/products/,下载linux版本的安装包
- 2 使用tar -txvf进行解压,解压后的文件如下:
二、ElasticSearch安装
这个其实也是ELK中的核心,启动的时候一定要注意,因为es不可以进行root账户启动,所以你还需要开启一个elsearch账户
- 1 首先使用mv将elasticsearch文件夹移出root目录
- 2 创建一个elsearch账户
groupadd elsearch #新建elsearch组
useradd elsearch -g elsearch -p 密码 #新建一个elsearch用户
chown -R elsearch:elsearch ./elasticsearch(此处为你的目录) #指定elasticsearch所属elsearch组
报错1:org.elasticsearch.bootstrap.StartupException: java.lang.IllegalStateException: failed to obtain node locks, tried [[/opt/elasticsearch-6.6.2/data]] with lock id [0]; maybe these locations are not writable or multiple nodes were started without increasing [node.max_local_storage_nodes] (was [1])?
错误说明:节点绑定失败
错误原因:可能是因为之前运行的es还没有正常关闭
解决方法:
- 第一步:通过命令:ps aux | grep elasticsearch 进行查看
- 第二步:通过命令: kill -9 进程号 关闭此进程。
- 第三步:重新启动es。./bin/elasticsearch
报错2:max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
错误说明:
报错原因:当前配置软硬限制较小
解决方法:
- vim /etc/security/limits.conf 追加下面代码,并重新登陆elsearch用户,无需重启:
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
三、logstash安装
- 1 进入logstash文件夹,进入config文件夹
- 2 使用vim logstash.conf建立配置文件并编辑,包含input、fillter、output三个模块
input {
file {
path => ["/data/log/flask_api/nginx.log"]
codec => json
type => "nginx"
}
file {
path => [
"/data/log/flask_api/*/internal.log"
]
type => "internal_log"
}
}
filter {
if [type] == "nginx" {
grok {
match => {
"resp_body" => "\"score\"\s?:\s?%{INT:score:int}"
}
}
}
if [type] == "internal_log" {
grok {
match => {
"message" => "%{TIMESTAMP_ISO8601:dt} - %{NOTSPACE:api_name} -[ ]{1,3}%{LOGLEVEL:level} - %{GREEDYDATA:msg} - %{GREEDYDATA:locate}"
}
}
mutate {
remove_field => ["message"]
}
}
}
output {
stdout { codec => rubydebug }
if [type] == "nginx" {
elasticsearch {
hosts => ["host1:9200", "host2:9200"]
index => "flask_api_nginx"
}
}
if [type] == "internal_log" {
elasticsearch {
hosts => ["host1:9200", "host2:9200"]
index => "flask_api_internal"
}
}
}
- 3 进入bin文件夹下,使用下列代码运行logstack,config.reload.automatic可以在修改配置后无需重启
./logstash -f ../config/logstash.conf --config.reload.automatic
- 4 ps aux | grep logstash
看到当前用户下的Main进程,那就是logstash进程,kill掉即可,如果有多个,仔细检查下,安全kill即可
四、kibana的安装
- 1 进入config文件夹,vim kibana.yml可修改配置,默认参数为elasticsearch.hosts: [“http://localhost:9200”] ,可自行修改
- 2 进入bin文件夹中,./kibana启动
- 3 关掉kibana,可使用如下代码
netstat -apn|grep 5601
kill -9 ...
报错1 启动成功但无法访问网站
修改kibana.yml文件,修改host,将localhost改为本机真实ip,修改配置后需重启
当监听的日志产生变化的时候,ELK开始运行,否则不会有数据流入