ELK是一个成熟的日志系统,主要功能有收集、分析、检索,详细见 elastic官网。
本文主要介绍如何在CentOS7下安装最新版本的ELK,当然现在docker已经有完全配置成功的elk容器,安装配置非常方便,但是如果你想自己从安装jdk开始,那这篇博客将能够帮助到你。
安装前了解一下
操作系统及各组件版本
- centos-7-x86_64
- java8
- elasticsearch-6.2.4
- kibana-6.2.4
- logstash-6.2.4
禁用SELinux
[root@localhost ~]# vim /etc/sysconfig/selinux
把 SELINUX=enforcing 改为 SELINUX=disabled。这一步具体原因我不清楚,但是在公司安装成功,但是晚上回去在自己电脑上再安装一遍发现最后在浏览器登录kibana始终都是报Nginx502Bad,确认所有步骤都没有问题,最后就是因为漏掉这项配置没有改,改完OK!
java
下载
[root@localhost ~]# wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http:%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u171-b11/512cd62ec5174c3487ac17c61aaa89e8/jdk-8u171-linux-x64.rpm"
下载链接在 oracle官网,当然如果你愿意使用java8并且这里的链接可以使用,那么就不需要到oracle官网找jdk的下载链接了。
安装
[root@localhost ~]# rpm -ivh jdk-8u171-linux-x64.rpm
查看java是否安装成功
[root@localhost ~]# java -version
java version "1.8.0_171"
第一次安装的时候,因为考虑到jdk是向下兼容的,所以尝试了java10,结果在安装logtash的时候失败了,折腾了会还是老老实实的装回了java8
elasticsearch
导入秘钥
[root@localhost ~]# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
下载
[root@localhost ~]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.4.rpm
elasticsearch,kibana,logstash的最新下载地址都在这里,当然如果你愿意使用elk6.2.4并且这个的链接可以使用,那么就不需要到官网找下载链接了
安装
[root@localhost ~]# rpm -ivh elasticsearch-6.2.4.rpm
配置
调整一下配置文件:
- [root@elk ~]$egrep -v "^#|^$" /etc/elasticsearch/elasticsearch.yml
- cluster.name: my-application
- node.name: node-1
- path.data: /logs/elasticsearch6
- path.logs: /logs/elasticsearch6/log
- network.host: 0.0.0.0
- http.port: 9200
- discovery.zen.ping.unicast.hosts: ["elk-node1"]
- discovery.zen.minimum_master_nodes: 1
- xpack.security.enabled: false
- cluster.name:自定义集群名,相同集群内的节点设置相同的集群名
- node.name:自定义节点名,建议统一采用节点hostname
- path.data:data存储路径,这里更改成自定义以应对日志的big。
- path.logs:log存储路径,是为es自己的日志。
- 注意创建上边两项定义的两个文件目录。否则会启动失败。
- mkdir -p /logs/elasticsearch6/log
- cd /logs
- chown -R elasticsearch.elasticsearch elasticsearch6/
- 注意要更改对应目录的权限,否则es启动会报如下错误。
- network.host:es监听地址,采用"0.0.0.0",表示允许所有设备访问。
- http.port:es监听端口,可不取消注释,默认即此端口。
- discovery.zen.ping.unicast.hosts:集群节点发现列表,也可采用ip的形式
- discovery.zen.minimum_master_nodes:如果暂时是单节点部署,可以设置成1
- xpack.security.enabled:添加这条,这条是配置kibana的安全机制,暂时关闭。
启动
启动服务。
- systemctl daemon-reload
- systemctl enable elasticsearch.service
- systemctl start elasticsearch.service
- systemctl status elasticsearch.service
- curl localhost:9200
nginx
代理服务器了解一下(老手跳过)
Nginx在这里作为一个代理服务器,熟悉asp.net开发者肯定知道iis,我们把asp.net项目部署iis上,假设配置一个8080端口,然客户端就可以通过IP地址加8080端口直接浏览asp.net应用程序了,这里Nginx是在客户端和asp.net应用程序之间的一个代理服务器,如果Nginx监听的端口是80,转发地址是localhost:8080,那么客户端就可以通过IP地址加80端口访问asp.net应用程序了。
安装
[root@localhost ~]# yum install epel-release -y
[root@localhost ~]# yum install nginx httpd-tools -y
安装Nginx之前要先安装epel源,可能以后在使用linux的时候你还会添加各种源,就和在nuget添加源的目的一样
配置
删除默认配置
[root@localhost ~]# vim /etc/nginx/nginx.conf
这里把位于36、59行之间的Server块删掉,更多的配置项在 /etc/nginx/conf.d/*.conf中
36 include /etc/nginx/conf.d/*.conf;
Server { }
59# Settings for a TLS enabled server.
给kibana添加代理
[root@localhost ~]# vim /etc/nginx/conf.d/kibana.conf
粘贴下面内容,注意粘贴之前先输入 i 进入insert模式,这里域名为 elk-stack.co,然后使用http协议的basic认证,密码稍后添加,然后看location块,当Nginx监听到域名为elk-stack.co,端口为80的请求时,就会转发给本地监听端口5601的进程,这个进程就是kibana,下一步安装它
server {
listen 80;
server_name elk-stack.co;
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/.kibana-user;
location / {
proxy_pass http://localhost:5601;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
} }
给elasticsearch添加代理
[root@localhost ~]# vim /etc/nginx/conf.d/elasticsearch.conf
server {
listen 81;
server_name elk-stack.co;
location / {
proxy_pass http://localhost:9200;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
} }
添加一个basic认证
[root@localhost ~]# htpasswd -c /etc/nginx/.kibana-user admin
然后输入你的密码,记住最后要通过这个来登录kibana的
测试Nginx配置并启动
[root@localhost ~]# nginx -t
如果出现 test failed,就回过头检查/etc/nginx/conf.d/kibana.conf和/etc/nginx/nginx.conf这两个文件,肯定是不小心弄错了。
如果输出 test is successful,那么就可以启动 nginx 了
[root@localhost ~]# systemctl enable nginx
[root@localhost ~]# systemctl start nginx
kibana
下载
[root@localhost ~]# wget https://artifacts.elastic.co/downloads/kibana/kibana-6.2.4-x86_64.rpm
安装
[root@localhost ~]# rpm -ivh kibana-6.2.4-x86_64.rpm
配置
[root@localhost ~]# vim /etc/kibana/kibana.yml
配置kibana。
- [root@elk ~]$egrep -v "^#|^$" /etc/kibana/kibana.yml
- server.port: 5601
- server.host: "0.0.0.0"
- elasticsearch.url: "http://10.100.120.82:9200"
- kibana.index: ".newkibana"
- xpack.security.enabled: false #添加这条,这条是配置kibana的安全机制,暂时关闭。
- kibana.index:原来默认是".kibana",但是新版本的kibana启动之后发现无法访问,访问之后抛出一个异常:kibana server is not ready yet,那么回来把配置更改成".newkibana",然后重启kibana,再次访问,即可成功。
启动
[root@localhost ~]# systemctl enable kibana
[root@localhost ~]# systemctl start kibana
[root@localhost ~]# systemctl status kibana
[root@localhost ~]# netstat -plntu
和elasticsearch一样,最后通过netstat -plntu查看kibana是否启动成功,如果有端口号为5601的输出那就代表kibana启动成功了
logstash
下载
[root@localhost ~]# wget https://artifacts.elastic.co/downloads/logstash/logstash-6.2.4.rpm
安装
[root@localhost ~]# rpm -ivh logstash-6.2.4.rpm
启动
[root@localhost ~]# systemctl enable logstash
[root@localhost ~]# systemctl start logstash
浏览器访问kibana
配置本地host
如果你的电脑是win10,并且安装目录在C盘,编辑文件C:\Windows\System32\drivers\etc\hosts添加这一行
192.168.93.133 elk-stack.co
打开端口
[root@localhost ~]# firewall-cmd --zone=public --add-port=80/tcp --add-port=81/tcp --permanent
[root@localhost ~]# firewall-cmd --reload
现在就可以本地通过浏览输入elk-stack.co,访问kibana了!
但是如果出现 lookup elk-stack.co on 127.0.0.1:53: no such host,可能是host文件的修改还没有生效,重启一下电脑就可以,如果重启还是不行参考这里,实在不行就通过虚拟机的ip地址直接访问就行了
查看es
如果出现这两张图那就安装成功啦!
ELK的功能非常强大,自己在逐步学习中,但是发现除了看官方文档似乎很难找的好的学习资料了,英文不好看起来虽然痛苦但是看懂还有有收获的,所以我把我的学习过程记录下来,希望可以帮助正在学习ELK的你。
参考资料
https://www.howtoforge.com/tutorial/how-to-install-elastic-stack-on-centos-7/
https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-elk-stack-on-centos-7
https://www.elastic.co/guide/index.html
安装时需要的东东
elasticsearch
在运行时确保 服务器已经添加了 elasticsearch 分组 为elasticsearch
添加 可以运行sudo 命令
xxx is not in the sudoers file.This incident will be reported.的解决方法
1.切换到root用户下,怎么切换就不用说了吧,不会的自己百度去.
2.添加sudo文件的写权限,命令是:
chmod u+w /etc/sudoers
3.编辑sudoers文件
vi /etc/sudoers
找到这行 root ALL=(ALL) ALL,在他下面添加xxx ALL=(ALL) ALL (这里的xxx是你的用户名)
ps:这里说下你可以sudoers添加下面四行中任意一条
youuser ALL=(ALL) ALL
%youuser ALL=(ALL) ALL
youuser ALL=(ALL) NOPASSWD: ALL
%youuser ALL=(ALL) NOPASSWD: ALL
第一行:允许用户youuser执行sudo命令(需要输入密码).
第二行:允许用户组youuser里面的用户执行sudo命令(需要输入密码).
第三行:允许用户youuser执行sudo命令,并且在执行的时候不输入密码.
第四行:允许用户组youuser里面的用户执行sudo命令,并且在执行的时候不输入密码.
4.撤销sudoers文件写权限,命令:
chmod u-w /etc/sudoers
这样普通用户就可以使用sudo了.
遇到的坑:
memory locking requested for elasticsearch process but memory is not locked
[ERROR][o.e.b.Bootstrap ] [node-1] node validation exception
[1] bootstrap checks failed
[1]: memory locking requested for elasticsearch process but memory is not locked
1) File /etc/default/elasticsearch
ES_JAVA_OPTS="-Xms4g -Xmx4g"
MAX_LOCKED_MEMORY=unlimited
2) File /etc/security/limits.conf
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited
3) File /usr/lib/systemd/system/elasticsearch.service changed as below and run systemctl daemon-reload
LimitMEMLOCK=infinity
4) File /etc/elasticsearch/elasticsearch.yml
bootstrap.memory_lock: true
5) File /etc/elasticsearch/jvm.options
-Xms4g
-Xmx4g
重启 elasticsearch 服务器
systemctl restart elasticsearch
查看状态
systemctl status elasticsearch
logstash 无法用systemctl启动
pm安装时,创建启动脚本的配置文件是/etc/logstash/startup.options
/usr/share/logstash/bin/system-install /etc/logstash/startup.options systemd
使用命令 把 logstash 添加道系统命令中。
/usr/share/logstash/vendor/jruby/bin/jruby:行401: /usr/bin/java: 没有那个文件或目录
再/ect/logstash/startup.options 中 JAVACMD 指向 java的运行文件 /data/jdk/bin/java
[root@root bin]# systemctl status logstash
● logstash.service - logstash
Loaded: loaded (/etc/systemd/system/logstash.service; disabled; vendor preset: disabled)
Active: failed (Result: start-limit) since Thu 2019-06-20 15:28:33 CST; 1s ago
Process: 25361 ExecStart=/usr/share/logstash/bin/logstash --path.settings /etc/logstash (code=exited, status=1/FAILURE)
Main PID: 25361 (code=exited, status=1/FAILURE)
Jun 20 15:28:32 root systemd[1]: Unit logstash.service entered failed state.
Jun 20 15:28:32 root systemd[1]: logstash.service failed.
Jun 20 15:28:33 root systemd[1]: logstash.service holdoff time over, scheduling restart.
Jun 20 15:28:33 root systemd[1]: start request repeated too quickly for logstash.service
Jun 20 15:28:33 root systemd[1]: Failed to start logstash.
Jun 20 15:28:33 root systemd[1]: Unit logstash.service entered failed state.
Jun 20 15:28:33 root systemd[1]: logstash.service failed.
找了半天都没有找到对应的解决方法,
就 只用 /usr/share/logstash/bin/logstash --path.settings /etc/logstash 启动了。
解决方法2:
vi /etc/logstash/startup.option
JAVACMD=/xx/xx/bin/java 设置成当前java的目录
执行
/usr/share/logstash/bin/system-install /etc/logstash/startup.options systemd 添加道系统服务中