通常,日志被分散在储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。当务之急我们使用集中化的日志管理;
ELK功能:Kibana用来展现数据、Elasticsearch用来存储数据、Logstash用来收集数据通过三者的结合来实现日志集中化管理;
Java环境必须在JDK1.8以上 :Elasticsearch、Logstash依赖于java环境 JDK下载路径如下:
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
Kibana是用来展现数据
https://artifacts.elastic.co ELK二进制jar包下载路径
云盘:(包含此架构需要的所有二进制压缩包)
链接:https://pan.baidu.com/s/1r4KsX9nKxuRbXWmdacAChg
提取码:cxcx
安装步骤:
(1)下载二进制jar包解压即可
(2)解压完成:修改Kibana配置 config/kibana.yml
server.port: 5601
server.host: "0.0.0.0"
启动问题:
关闭问题:因为kibana是用node写的 运行在node上 直接用ps -ef | grep kibana找不到进程
这里通过netstat -nap | grep 5601 通过端口查询到进程 kill调即可
安全说明:默认无密码,也是谁都能够访问 可以借用ngnix实现用户名密码登陆
首先前提是在Java8环境下
安装步骤:
(1)下载二进制包 解压
(2)修改配置文件/config/elasticsearch.yml
path.data: /home/elk/elasticsearch/elasticsearch-6.6.0/data 是es的全路径
path.logs: /home/elk/elasticsearch/elasticsearch-6.6.0/logs 是es的全路径
network.host: 127.0.0.1 这个地址是kibana指向的地址
http.port: 9200 这个端口是kibana指向的端口
注意:.yml文件 冒号后边有数据的话 中间必须有空格
(3)JVM内存限制修改 默认为1g 我这里改为128
更改配置文件jvm.options (配置文件修改 vi 与 vim的区别 前者普通文本 后者带格式)
-Xms128M
-Xmx128M
(4)Elasticsearch的启动,得用普通用户启动
如果是在root账户下安装的elasticsearch 在root使用以下语句
chown linux用户名 elasticsearch安装目录 -R 例如:
chown wangjikui /home/elk/elasticsearch/elasticsearch-6.6.0 -R
然后再切换到 wangjikui su wangjikui 执行 ./elasticsearch命令即可启动
前台启动: bin目录下./elasticsearch
后台启动: bin目录下./elasticsearch -d 不打印启动日志 需到logs里看 类似于tomcat启动
关闭:Java程序 直接可以通过ps查找进程 也可通过端口查询进程
Elasticsearch如果启动在127.0.0.1的话,可以启动成功
Elasticsearch如果要跨机器通讯,需要监听在真实网卡上
监听在真实网卡需要调整系统参数才能正常启动
以上两种监听都需要调整系统参数
如果是以上两种在没有调整系统参数的情况下会报以下三个错误:
ES启动三个报错的处理
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
[2]: max number of threads [3829] for user [elk] is too low, increase to at least [4096]
[3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解决方法:
针对第一个错误 调整系统参数的方法:在/etc/security/limits.conf文件中加入 配置
* - nofile 65536
针对第二种错误 调整参数的方法:在/etc/security/limits.d/20-nproc.conf 文件中加入 配置
* - nproc 10240 (这个数值可根据报错提示最少线程数 而定)
针对第三个错误 调整系统参数 在etc/sysctl.conf中加入配置
vm.max_map_count = 262144
并执行写入命令:sysctl -p 后方可
注意:以上系统级别的操作都应该在root账号下完成
-Xms200M
-Xmx200M
Logstash支持
input {
file {
path => "/usr/local/nginx/logs/access.log" (监听的日志文件全路径 监听的是启动之时及以后产生的日志)
}
}
output {
elasticsearch {
hosts => ["http://192.168.118.133:9200"] (此是输出日志到elastisearch的请求路径)
}
}
当直接用bin目录下的./logstash 命令启动时 会报错(原因尚且不明 待调研)
用如下命令启动有效(属于前台启动 当关闭窗口时服务也会关闭)
/home/elk/logstash/logstash-6.6.0/bin/logstash -f /home/elk/logstash/logstash-6.6.0/config/logstash-sample.conf
后台启动命令:
nohup /usr/local/logstash-6.6.0/bin/logstash -f /usr/local/logstash-6.6.0/config/logstash.conf >/tmp/logstash.log 2>/tmp/logstash.log &
完成以上的步骤:对于elk环境的搭建雏形已经完成 接下来需要对其不断的优化
优化原因:由于Logstash 本身属于重量级架构 占资源较多 不适合在每一台客户机上都安装一次 所以 在这里集成Filebeat 收集日志后发给Logstash 做一些日志处理,如果只是单纯的收集日志 这里则不需要使用logstash 直接使用filebeat收集后发给Elasticsearch 再由Kibana进行数据展示即可。
本架构是通过filebeat收集日志发送给Logstash进行日志处理之后再发送给发给Elasticsearch 再由Kibana进行数据展示。
实现步骤:
将原先配置文件中的内容直接删除 加入如下配置即可:
filebeat.inputs:
- type: log
tail_files: true
backoff: "1s"
paths:
- /usr/local/nginx/logs/access.log (注意:横杠与数据之间要留有一个空格 被坑过)
output:
logstash:
hosts: ["192.168.118.132:5044"]
配置解释:paths 是服务器上日志文件的全路径
Hosts 是logstash被监控的ip与端口
对conf/logstash-sample.conf(也可能是logstash.conf)进行如下修改:
input中改成如下配置 供filebeat输入数据:
input {
beats {
host => '0.0.0.0' 允许外网访问
port => 5044 监控的端口
}
}