ELK搭建手册

参考:
https://my.oschina.net/itblog/blog/547250?p=2&temp=1503478503046#blog-comments-list

head插件安装参考:
https://wenku.baidu.com/view/1c61ece6162ded630b1c59eef8c75fbfc77d94e5.html

下载软件

elasticsearch-5.5.0.tar.gz
logstash-5.5.2.tar.gz
kibana-5.5.0-linux-x86_64.tar.gz

下载地址:https://www.elastic.co/downloads
下载速度较慢,可以使用香港网络下载。
软件下载的位置:/data/soft

安装

1、安装并配置JAVA环境变量

1、安装JDK

ES要求JDK版本至少1.8.
从oracle网站下载jdk-8u144-linux-x64.tar.gz。
下载完毕后,使用tar –zxvf jdk-8u144-linux-x64.tar.gz –C /usr/java,将JDK解压到/usr/java。
解压后得到:/usr/java/jdk1.8.0_144

2、配置环境变量

vi /etc/profile,在文件末尾添加:

export JAVA_HOME=/usr/java/jdk1.8.0_144
export CLASSPATH=${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
export PATH=${PATH}:${JAVA_HOME}/bin

然后:wq保存文件。

然后执行source /etc/profile使环境变量生效。
最后用java –version来验证一下。

安装ElasticSearch

在/data/soft目录,执行tar –zxvf elasticsearch-5.5.0.tar.gz解压缩es。
由于es不能使用root用户运行,所以这里创建用户组bd和用户bd,密码为test123456
步骤如下:

groupadd bd
useradd bd
passwd bd

然后输入密码test123456
然后将/data/soft/elasticsearch-5.5.0的拥有者改为bd。
进入/data/soft,执行sudo chown -R bd:bd ./elasticsearch-5.5.0

修改es的配置文件

cd $ES_HOME$/config,vi elasticsearch.yml打开配置文件。
cluster.name: es-cluster
path.data: /tmp/es/data
path.logs: /tmp/es/logs
# ----------------------------------- Memory -----------------------------------
#
# Lock the memory on startup:
#
bootstrap.memory_lock: false
bootstrap.system_call_filter: false

network.host: 0.0.0.0

http.cors.enabled: true
http.cors.allow-origin: "*"

启动es
./bin/elasticsearch &

在浏览器打开:http://192.168.74.125:9200/

如果可以看到上图则es安装成功。

安装head插件

Es5.0的head插件安装还是很麻烦的,具体可以参考:
https://wenku.baidu.com/view/1c61ece6162ded630b1c59eef8c75fbfc77d94e5.html

a. 安装git

yum –y install git

安装完毕后,就可以下载Head的源代码了。

git clone git://github.com/mobz/elasticsearch-head.git

注:这里我们仍然下载的/data/soft目录。

b. 安装node
由于head插件本质上还是一个nodejs工程,因此需要安装node,使用npm来安装依赖的包。
去官网下载nodejs,https://nodejs.org/en/download/

下载下来的jar包是xz格式的,一般的linux可能不识别,还需要安装xz.

yum -y install xz  

然后解压nodejs的安装包:

xz -d node*.tar.xz 
tar -xvf node*.tar  -C /user/node

解压完node的安装文件后,需要配置下环境变量,编辑/etc/profile,添加

export NODE_HOME=/usr/node/node-v6.11.2-linux-x64
export PATH=${PATH}:${NODE_HOME}/bin

别忘记立即执行以下

source /etc/profile

这个时候可以测试一下node是否生效:

注意:npm安装插件,经常受网络影响,无法下载
受网络影响建议安装cnpm(淘宝团队建立的中国镜像)

npm install cnpm -g --registry=https://registry.npm.taobao.org

c. 安装grunt
grunt是一个很方便的构建工具,可以进行打包压缩、测试、执行等等的工作,5.0里的head插件就是通过grunt启动的。因此需要安装一下grunt。
安装grunt-cli

npm install –g grunt-cli

安装完毕后,检查一下:

注意:如果安装报错,到/usr/node/ node-v6.11.2-linux-x64目录执行上述命令。

d. 修改head源码
修改服务器监听地址:
目录:elasticsearch-head/Gruntfile.js

connect:
 {     server:
    {     options:
      {     
        port:9100,
        hostname: '*', 
        base: '.',                                                       
        keepalive:true 
      } 
    }
}

增加hostname属性,设置为*

修改连接地址:
目录:elasticsearch-head/_site/app.js
修改head的连接地址:

this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://localhost:9200";  

把localhost修改成你es的服务器地址,如:

this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://10.10.10.10:9200";

e. 运行head插件
首先运行es。
然后在head目录中,执行

npm install 下载以来的包

最后,启动nodejs

grunt server

这个时候访问192.168.74.125:9100就可以访问Head插件了。

安装logstash

执行tar –zxvf logstash-5.5.2.tar.gz解压缩logstash。
进入config目录,新增log4j_to_es.conf文件。

cd /data/soft/logstash-5.5.2/config

文件内容:

# For detail structure of this file
# Set: https://www.elastic.co/guide/en/logstash/current/configuration-file-structure.html
input {
  # For detail config for log4j as input,
  # See: https://www.elastic.co/guide/en/logstash/current/plugins-inputs-log4j.html
  log4j {
    mode => "server"
    host => "0.0.0.0"
    port => 4567
  }
}
filter {
  #Only matched data are send to output.
}
output {
  # For detail config for elasticsearch as output,
  # See: https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html
  elasticsearch {
    action => "index"          #The operation on ES
    hosts  => "192.168.74.125:9200"   #ElasticSearch host, can be array.
    index  => "applog"         #The index to write data to.
  }
}

这里的配置说明可以参考:https://my.oschina.net/itblog/blog/547250?p=2&temp=1503478503046#blog-comments-list

最后使用./bin/logstash –f ./config/log4j_to_es.conf来启动logstash。

接下来创建一个示例工程,演示使用将log4j日志输出到logstash。
新建一个elk-demo的maven工程,

Maven依赖:

<dependency>
    <groupId>log4jgroupId>
    <artifactId>log4jartifactId>
    <version>1.2.17version>
dependency>

Log4j配置如下:

log4j.rootLogger=INFO,console

# for package com.tommy.elk, log would be sent to socket appender.
log4j.logger.com.tommy.elk=DEBUG, socket

# appender socket
log4j.appender.socket=org.apache.log4j.net.SocketAppender
log4j.appender.socket.Port=4567
log4j.appender.socket.RemoteHost=192.168.74.125
log4j.appender.socket.layout=org.apache.log4j.PatternLayout
log4j.appender.socket.layout.ConversionPattern=%d [%-5p] [%l] %m%n
log4j.appender.socket.ReconnectionDelay=10000

# appender console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d [%-5p] [%l] %m%n

可以看到log4j中指定了一个appder为socket,配置了远程的host和端口,这个就是上面在logstash中配置的。

测试代码:

/**
 * Hello world!
 *
 */
public class App 
{
    private static final Logger LOGGER = Logger.getLogger(App.class);
    public static void main( String[] args ) throws InterruptedException {
        LOGGER.info( "Hello World!" );
        for (int i = 0; i < 10; i++) {
            LOGGER.error("测试消息 [" + i + "].");
            Thread.sleep(500);
        }
    }
}

运行一下App.java,控制台输出了log4j日志。

我们刷新一下head插件,在索引TAB中可以看到

在数据浏览TAB中可以看到日志信息,点击某一个可以看到详情

安装Kibana

执行tar –zxvf kibana-5.5.0-linux-x86_64.tar.gz解压缩kibana。
然后进入config目录,编辑kibana配置文件

cd kibana-5.5.0-linux-x86_64
vi ./config/kibana.yml

修改下面几项:

server.port: 5601
server.host: “192.168.74.125”
elasticsearch.url: http://192.168.74.125:9200
kibana.index: “.kibana”

然后启动kinaba.

./bin/kibana

启动后用浏览器打开http://192.168.74.125:5601/

为了后续使用Kibana,需要配置至少一个Index名字或者Pattern,它用于在分析时确定ES中的Index。这里我输入之前配置的Index名字applog,Kibana会自动加载该Index下doc的field,并自动选择合适的field用于图标中的时间字段:


点击Create后,可以看到左侧增加了配置的Index名字:


可以在上面的输入框中输入内容搜索

常见问题

1.java.lang.RuntimeException: can not run elasticsearch as root
使用非root用户执行。
创建用户组bd
groupadd bd
创建用户bd,属组bd
useradd bd -g bd
给用户bd设置密码
passwd bd
(密码为test123456)

2.已经在/etc/profile中修改了环境变量,将java环境变量设置为了1.8,使用source /etc/profile后root用户下已生效。
但切换到非root用户下,仍然显示的之前的java版本。
解决:http://blog.csdn.net/newtelcom/article/details/49967919

3.启动es时,提示无权限
java.nio.file.AccessDeniedException: /data/soft/elasticsearch-5.5.0/config/elasticsearch.yml
解决:
改变elasticsearch文件夹所有者到当前用户
sudo chown -R 非root用户组:非root用户 elasticsearch
比如问题1中添加的用户组bd和用户bd.
sudo chown -R bd:bd elasticsearch

4.提示数据目录或日志目录无权限
java.nio.file.AccessDeniedException: /tmp/es/data/nodes
解决:参考3.将/tmp/es目录所有者设置为bd.
sudo chown -R bd:bd es

5.seccomp unavailable: requires kernel 3.5+ with CONFIG_SECCOMP and CONFIG_SECCOMP_FILTER compiled in
报了一大串错误,其实只是一个警告。
解决:使用心得linux版本,就不会出现此类问题了。

6.max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]
max number of threads [1024] for user [lishang] likely too low, increase to at least [2048]
解决:切换到root用户,编辑limits.conf 添加类似如下内容
vi /etc/security/limits.conf
添加如下内容:

* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096

7.max number of threads [1024] for user [lish] likely too low, increase to at least [2048]
解决:切换到root用户,进入limits.d目录下修改配置文件。
vi /etc/security/limits.d/90-nproc.conf
修改如下内容:
* soft nproc 1024
修改为
* soft nproc 2048

8.max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
解决:切换到root用户修改配置sysctl.conf
vi /etc/sysctl.conf
添加下面配置:
vm.max_map_count=655360
并执行命令:
sysctl -p
然后,重新启动elasticsearch,即可启动成功。

9.system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk
问题原因:因为Centos6不支持SecComp,而ES默认bootstrap.system_call_filter为true进行检测,所以导致检测失败,失败后直接导致ES不能启动。
详见 :https://github.com/elastic/elasticsearch/issues/22899
解决方法:在elasticsearch.yml中配置bootstrap.system_call_filter为false,注意要在Memory下面:

bootstrap.memory_lock: false
bootstrap.system_call_filter: false

10.安装head插件后,head插件访问es提示跨域问题。
解决:
$ES_HOME$/config/elasticsearch.yml中增加下面的配置:
//增加新的参数,这样head插件可以访问es

http.cors.enabled: true
http.cors.allow-origin: "*"

11.logstash5启动方式

./bin/logstash -f ./config/log4j_to_es.conf  

12.logstash错误:Cannot assign requested address
将配置文件中的host改成:0.0.0.0.
参考:https://stackoverflow.com/questions/30624467/connect-logstash-1-5-0-with-log4j-of-several-servers

你可能感兴趣的:(ELK搭建手册)