ELK 安装 与遇到的坑

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

配置

调整一下配置文件:

  1. [root@elk ~]$egrep -v "^#|^$" /etc/elasticsearch/elasticsearch.yml
  2. cluster.name: my-application
  3. node.name: node-1
  4. path.data: /logs/elasticsearch6
  5. path.logs: /logs/elasticsearch6/log
  6. network.host: 0.0.0.0
  7. http.port: 9200
  8. discovery.zen.ping.unicast.hosts: ["elk-node1"]
  9. discovery.zen.minimum_master_nodes: 1
  10. xpack.security.enabled: false
  • cluster.name:自定义集群名,相同集群内的节点设置相同的集群名
  • node.name:自定义节点名,建议统一采用节点hostname
  • path.datadata存储路径,这里更改成自定义以应对日志的big
  • path.logslog存储路径,是为es自己的日志。
  • 注意创建上边两项定义的两个文件目录。否则会启动失败。
  1. mkdir -p /logs/elasticsearch6/log
  2. cd /logs
  3. chown -R elasticsearch.elasticsearch elasticsearch6/
  • 注意要更改对应目录的权限,否则es启动会报如下错误。
  • network.hostes监听地址,采用"0.0.0.0",表示允许所有设备访问。
  • http.portes监听端口,可不取消注释,默认即此端口。
  • discovery.zen.ping.unicast.hosts:集群节点发现列表,也可采用ip的形式
  • discovery.zen.minimum_master_nodes:如果暂时是单节点部署,可以设置成1
  • xpack.security.enabled:添加这条,这条是配置kibana的安全机制,暂时关闭。

启动

启动服务。

  1. systemctl daemon-reload
  2. systemctl enable elasticsearch.service
  3. systemctl start elasticsearch.service
  4. systemctl status elasticsearch.service
  5.  
  6. 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

  1. [root@elk ~]$egrep -v "^#|^$" /etc/kibana/kibana.yml
  2. server.port: 5601
  3. server.host: "0.0.0.0"
  4. elasticsearch.url: "http://10.100.120.82:9200"
  5. kibana.index: ".newkibana"
  6. 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地址直接访问就行了

 https://i-blog.csdnimg.cn/blog_migrate/2e48f71a034f66f42d49ddefbcba4ae5.png

查看es

https://i-blog.csdnimg.cn/blog_migrate/f94bd497df0c081014797ed17a9b7369.png

如果出现这两张图那就安装成功啦!

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 添加道系统服务中

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值