目前项目中,采用的是微服务框架,对于日志,采用的是logback的配置,每个微服务的日志,都是通过File的方式存储在部署的机器上,但是由于日志比较分散,想要检查各个微服务是否有报错信息,需要挨个服务去排查,比较麻烦。所以希望通过对日志进行聚合,然后通过监控,能够快速的找到各个微服务的报错信息,快速的排查。
对于ELK,主要是分为Elastic Search、Logstash和Kibana三部分:其中Logstash作为日志的汇聚,可以通过input、filter、output三部分,把日志收集、过滤、输出到Elastic Search中(也可以输出到文件或其他载体);Elastic Search作为开源的分布式引擎,提供了搜集、分析、存储数据的功能,采用的是restful接口的风格;Kibana则是作为Elastic Search分析数据的页面展示,可以进行对日志的分析、汇总、监控和搜索日志用。
本次使用ELK主要则是作为日志分析场景。
linux版本为CentOs 7,Elasticsearch,Logstash, Kibana的版本均为6.3.0
安装过程:
Elasticsearch 官网elasticsearch-6.3.0.tar
Kibana 官网kibana-6.3.0下载 linux64位
Logstash 官网logstash-6.3.0.tar
文件上传至centos7
tar -zxvf elasticsearch-6.3.0.tar.gz
tar -zxvf kibana-6.3.0-linux-x86_64.tar.gz
tar -zxvf logstash-6.3.0.tar.gz
推荐使用jdk1.8jdk环境配置
修改配置文件
vi /home/elasticsearch-6.3.0/config/elasticsearch.yml
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: 0.0.0.0 ##服务器ip 本机
#
# Set a custom port for HTTP:
#
http.port: 9200 ##服务端口
#
# For more information, consult the network module documentation.
#
Elastic Search启动:由于ES的启动不能用root账号直接启动,需要新创建用户,然后切换新用户去启动,执行命令如下:
-- 创建新用户及授权
# groupadd elsearch
# useradd elsearch -g elsearch -p elasticsearch
# cd /data/deploy/elk/
# chown -R elsearch:elsearch elasticsearch-6.3.0
-- 切换用户,启动
# su elsearch
# cd elasticsearch-6.3.0/bin
# sh elasticsearch &
/home/elasticsearch-6.3.0/bin/elasticsearch #命令窗运行
/home/elasticsearch-6.3.0/bin/elasticsearch -d #后台线程运行
ctrl+c #命令窗关闭
ps -ef | grep elastic #后台线程关闭
kill -9 4442 ##pid 4442为查处线程的pid
常见问题解决elasticsearch启动常见问题
验证elasticsearch启动,主机名是你的服务器的ip地址或域名
修改配置文件
vi /home/kibana-6.3.0-linux-x86_64/config/kibana.yml
server.port: 5601 ##服务端口
server.host: "0.0.0.0" ##服务器ip 本机
elasticsearch.url: "http://localhost:9200" ##elasticsearch服务地址 与elasticsearch对应
/home/kibana-6.3.0-linux-x86_64/bin/kibana #命令窗启动
nohup ./kibana-6.3.0-linux-x86_64/bin/kibana & #后台线程启动
ctrl+c #命令窗关闭
ps -ef | grep kibana #后台线程关闭
kill -9 4525 ##pid 4525 为查处线程的pid
备注:常见问题多为 端口占用,以及目录未授权,需要同elasticsearch 使用目录运行执行的用户去执行 未配置则为root用户
新建配置文件
# cd logstash-6.4.2/bin
# vim logstash.conf
input {
tcp {
port => 5044
codec => json_lines
}
}
output{
elasticsearch {
hosts => ["localhost:9200"]
# 为传入的日志索引命名
index => "hermit-log-%{+YYYY.MM.dd}"
}
}
logstash官方输入源支持以及下载
安装logstash json插件
/home/logstash-6.3.0/bin/logstash-plugin install logstash-codec-json_lines
启动logstash
/home/logstash-6.3.0/bin/logstash -f /home/logstash-6.3.0/config/logstash.conf ##命令窗形式
nohup /home/logstash-6.3.0/bin/logstash -f /home/logstash-6.3.0/config/logstash.conf & ##后台线程形式
ctrl+c #命令窗关闭
ps -ef | grep logstash #后台线程关闭
kill -9 4617 ##pid 4617 为查处线程的pid
通过以上的配置,基本上ELK和微服务之间,已经配置完成,接下来需要通过在Kibana中创建索引等进行日志的搜索和查看。
访问主机/服务器:5601即可进入kibana管理界面:
1、创建索引
可以新建一个全局的索引,【Index pattern】设置为【*】,点击下一步至完成为止。
2、日志搜索
如截图所示,可以通过Discover和新建的索引,对日志进行详细的查看,并且可以选择具体的字段进行查看。在右上角,可以通过选择不同的时间段,对日志进行查看和搜索。
3、创建查询
如2中截图所示,可以通过添加filter,对日志进行过滤查询。然后点击Save后,可以创建新的查询。
4、创建Visualize和Dashboard
创建完查询后,可以在Visualize中,创建一个新的图示,通过查询进行创建。创建Dashboard,依赖Visualize图示,进行展示。
即依赖关系:Dashboard -》 Visualize -》 Search
在本项目中,Search主要是通过增加了两个Filter:①service:“ff-watersource” ②severity:“ERROR”,查询的是微服务为ff-watersource的error级别的日志。然后根据本Search,依次创建Visualize和Dashboard,最终在Dashboard中,可以监控日志信息的页面为:
以上,日志聚合分析的实现,就算完成了。
至此,elk搭建完成。
os::commit_memory(0x00000000c5330000, 986513408, 0) failed; error='Cannot allocate memory' (errno=12)
-Xms1g
-Xmx1g
进入elasticsearch的conf目录下,修改vm.什么的配置。可以改1g为512m
安装排错 max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
解决方案:https://www.cnblogs.com/linus-tan/p/10276289.html 或者 https://blog.csdn.net/cookzrk/article/details/80179006
elasticsearch ERROR: bootstrap checks failed 异常处理 或者参考----https://blog.51cto.com/xpleaf/2327317
ERROR: bootstrap checks failed
max file descriptors [10240] for elasticsearch process likely too low, increase to at least [65536]
max number of threads [1024] for user [elsearch] likely too low, increase to at least [2048]
max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
切换到root用户
修改limits.conf
vi /etc/security/limits.conf
#添加如下内容:
* soft nofile 65536
* hard nofile 131072
* soft nproc 4096
* hard nproc 4096
修改XX-nproc.conf (不同机器XX不一样,可先到 cd /etc/security/limits.d/ 查看下)
vi /etc/security/limits.d/XX-nproc.conf
#修改为
* soft nproc 4096
修改/etc/sysctl.conf
#添加下面配置:
vm.max_map_count=655360
执行命令:
sysctl -p
注意:如果仍然提示异常
max file ******
max number ******
max virtual ******
可根据提示调整上述文件参数大小即可解决。
Elasticsaerch启动报错:Exception in thread "main" java.nio.file.AccessDeniedException:
Exception in thread "main" java.nio.file.AccessDeniedException: /root/home/searchengine/elasticsearch-6.2.4/config/jvm.options
at sun.nio.fs.UnixException.translateToIOException(UnixException.java:84)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
at sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:214)
at java.nio.file.Files.newByteChannel(Files.java:361)
at java.nio.file.Files.newByteChannel(Files.java:407)
at java.nio.file.spi.FileSystemProvider.newInputStream(FileSystemProvider.java:384)
at java.nio.file.Files.newInputStream(Files.java:152)
at org.elasticsearch.tools.launchers.JvmOptionsParser.main(JvmOptionsParser.java:58)
错误原因:使用非 root用户启动ES,而该用户的文件权限不足而被拒绝执行。
解决方法(在root用户下操作该命令): chown -R 用户名:用户名 文件(目录)名
例如: chown -R abc:abc searchengine
再启动ES就正常了
kinana界面报错:
Kibana log in is currently disabled. administrators should consult the kibana logs for more details
solution:https://discuss.elastic.co/t/kibana-log-in-is-currently-disabled-administrators-should-consult-the-kibana-logs-for-more-details/110234
Linux 系统下用户之间的切换 参考:https://blog.csdn.net/u013118258/article/details/79300450
经过以上步骤,你应该安装完可以使用了,可以收藏该文章,然后谢谢我了。
之后的不揍,通过nginx代理elk,为elk添加安全验证。也就是输入密码才能访问你的ELK(kinana)。
kibana安全——设置访问账号密码 https://blog.51cto.com/10950710/2334528?source=dra 或者 https://blog.51cto.com/tryingstuff/2049877?utm_source=oschina-app 再或者 https://www.cnblogs.com/zhaojingyu/p/9545253.html
6、搭建完成后,参考如下配置你的项目输送日志到ELK:
快速使用ELK构建SpringCloud微服务日志中心 https://blog.csdn.net/Loiterer_Y/article/details/90474390
参考文档: