Centos7部署ELK简述以及错误解决

准备: Elasticsearch和logstash都依赖java环境

图例: (因为不会作图,从网上找了一张我喜欢的,但是你要先忽略Beats,就当它不存在吧)
因为不会作图,从网上找了一张我喜欢的,但是你要先忽略Beats,就当它不存在吧

名称/版本(版本务必一致)地址
Elasticsearch6.3链接
Logstash6.3链接
Kibana6.3链接
下载后解压以上文件到/home/elk 目录下
tar -zxvf elasticsearch-6.3.0.tar.gz          
tar -zxvf logstash-6.3.0.tar.gz
tar -zxvf kibana-6.3.0-linux-x86_64.tar.gz

配置 / 启动

- Elasticsearch

1.配置文件路径 : /home/elk/elasticsearch-6.3.0/config/elasticsearch.yml

2.简单配置如下:
# 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: 8012                 ##服务端口

3.启动 : /home/elk/elasticsearch-6.3.0/bin/elasticsearch -d
##本服务器加了硬盘(/data) 在/data/es 路径下有nohup.out文件, 此路径下执行 nohup /home/elk/elasticsearch-6.3.0/bin/elasticsearch  > nohup.out 2>&1 &  ##

4.验证启动成功:
请求http://47.99.76.xxx:8012/ 会响应一个json
	{
		name: "31EHmzp",
		cluster_name: "elasticsearch",
		cluster_uuid: "51wlJRHeRhiy8BDjlrx6Zg",
		version: {
				number: "6.3.0",
				build_flavor: "default",
				build_type: "tar",
				build_hash: "424e937",
				build_date: "2018-06-11T23:38:03.357887Z",
				build_snapshot: false,
				lucene_version: "7.3.1",
				minimum_wire_compatibility_version: "5.6.0",
				minimum_index_compatibility_version: "5.0.0"
		},
		tagline: "You Know, for Search"
	}

**
启动常见错误:

1. …for elasticsearch process is too low, increase to at least [65536]

原因: 方案中说是Linux对文件创建数量限制为:65535. 这与ES对文件创建数量相悖,所以需要配置.

配置文件: /etc/security/limits.conf  配置后需要系统重启(经验证,不需要重启)
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
2. max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

问题翻译过来就是:elasticsearch用户拥有的内存权限太小,至少需要262144;
解决:

执行命令:
sysctl -w vm.max_map_count=262144
查看结果:
sysctl -a|grep vm.max_map_count
显示:
vm.max_map_count = 262144
上述方法修改之后,如果重启虚拟机将失效,所以:
解决办法:
在   /etc/sysctl.conf文件最后添加一行
vm.max_map_count=262144
3. Native controller process has stopped - no new native processes can be started
看上去就像是内存不够, 现象就是每隔一段时间就挂了 . 所以: 没8g内存, 就不要吧ELK搞在一台服务器上
不过,我配置最大内存最小内存都是256m也可以启动
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190709144050203.png)
发现:

腾讯云会出现第二个问题,阿里云会出现第一个问题

- Logstash

**

1.配置文件路径 /home/elk/logstash-6.3.0/config/logback-es.conf

2.简单配置:
input {                                ##input 输入源配置
    tcp {                              ##使用tcp输入源      官网有详细文档
        port => 8013                   ##服务器监听端口8013接受日志  默认ip localhost
        codec => json_lines            ##使用json解析日志    需要安装json解析插件
    }
} 
filter {                              ##数据处理
}                                
output {                               ##output 数据输出配置
        elasticsearch {                ##使用elasticsearch接收
            hosts => "localhost:8012"  ##集群地址  多个用,隔开
        }
        stdout { codec => rubydebug}   ##输出到命令窗口
}

3.启动前,还需安装logstash的json插件:
/home/elk/logstash-6.3.0/bin/logstash-plugin install logstash-codec-json_lines

4.启动 : nohup /home/elk/logstash-6.3.0/bin/logstash -f /home/logstash-6.3.0/config/logback-es.conf &  ##后台线程形式
            问题: 这样启动,会在bin目录下生成nohup.out文件,时间久了这个文件会非常大
(注:当前elk服务器挂了1t的硬盘,路径为/data ,所以进入 /data/logstash下,执行 
## nohup /home/elk/logstash-6.3.0/bin/logstash -f /home/elk/logstash-6.3.0/config/logback-es.conf > nohup.out 2>&1 &  ##
将日志文件输出到 /data/logstash下的nohup.out文件中.)
(注2: 如果服务器显示磁盘满了,但是文件显然没用那么多,此时需要关闭logstash或是es,再启动就ok.原因待查,可能与logstash运行时使用inode有关)

            ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190723160508131.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzMxNjY4Mw==,size_16,color_FFFFFF,t_70)

- Kibana

1.配置文件路径 /home/elk/kibana-6.3.0-linux-x86_64/config/kibana.yml

2.配置:
server.port: 8011                            ##服务端口
server.host: "0.0.0.0"                       ##服务器ip  本机
elasticsearch.url: "http://localhost:8012"   ##elasticsearch服务地址

3.启动 : nohup ./kibana-6.3.0-linux-x86_64/bin/kibana &   #后台线程启动

4.验证启动成功 :请求地址  http://47.99.76.xxx:8011

在这里插入图片描述

以上,ELK的服务都已经就绪,下面开始测试

  1. 在项目中依赖logstash
       <dependency>
			<groupId>net.logstash.logback</groupId>
			<artifactId>logstash-logback-encoder</artifactId>
			<version>4.11</version>
	   </dependency>

2.创建logback.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration>
<configuration>
    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>47.99.76.xxx:8013</destination>     <!--指定logstash ip:监听端口 tcpAppender  可自己实现如kafka传输等-->
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
    </appender>
    <include resource="org/springframework/boot/logging/logback/base.xml"/>      <!--引用springboot默认配置-->
    <root level="INFO">
        <appender-ref ref="LOGSTASH"/>                                           <!--使用上述订阅logstash数据tcp传输 -->
        <appender-ref ref="CONSOLE"/>                                            <!--使用springboot默认配置 调试窗口输出-->
    </root>
    <root level="DEBUG">
        <appender-ref ref="LOGSTASH"/>                                           <!--使用上述订阅logstash数据tcp传输 -->
        <appender-ref ref="CONSOLE"/>
    </root>
</configuration>

3.模拟日志

@Slf4j
@SpringBootApplication
public class ElkdemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(ElkdemoApplication.class, args);
        for (int i = 100000000; ; i++) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
            }
            if (i % 2 == 0) log.debug("elk log debug i={}", i);
            if (i % 3 == 0) log.error("elk log error i={}", i);
            log.info("elk log info i={}", i);
            new LogErrorTest().syout(i);
        }
    }
}

@Slf4j
public class LogErrorTest {
    public void syout(int i){
        Runnable r = () -> log.info("LogErrorTest log in a new Thread i={}",i*10);
        r.run();
        log.info("LogErrorTest log i={}",i*10);
    }
}

与logstash安装目录同级会创建nohup.out文件,启动测试项目后就会有日志输出,样例如下:

{
           "host" => "125.121.37.56",
       "@version" => 1,
    "logger_name" => "mf.elkdemo.ElkdemoApplication",
          "level" => "INFO",
        "message" => "elk log info i=100000472",
    "thread_name" => "main",
    "level_value" => 20000,
           "port" => 51357,
     "@timestamp" => 2019-04-25T02:59:25.866Z
}
..........

此时Kibana也可以查看到日志
先选择要查看的index(Elasticsearch中index相当于关系型数据库的table)
在这里插入图片描述
点击上图2后,通过设置正则来配置需要筛选的index:
在这里插入图片描述
在这里插入图片描述
日志的筛选:
在这里插入图片描述
箭头1设置内容过滤
在这里插入图片描述
箭头2可实现centos中grep的功能
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值