ELK日志系统浅析与部署_elk 部署

37 阅读4分钟

| Logstash | 官网logstash-6.3.0.tar | logstash官方文档 | | Filebeat | 官网filebeat-6.3.0 linux64位 | beats官方文档 |

备注:演示为centos7 即linux版本,请按实际需求更改

通过rz命令上传至centos7虚拟机

2、解压

tar -zxvf elasticsearch-6.3.0.tar.gz          
tar -zxvf kibana-6.3.0-linux-x86_64.tar.gz
tar -zxvf filebeat-6.3.0-linux-x86_64.tar.gz  
tar -zxvf logstash-6.3.0.tar.gz
备注:tar不支持指定解压目标目录 可以通过mv 命令进行迁移。本教程迁移至/home目录下

3、java环境搭建

推荐使用jdk1.8jdk环境配置

4、安装elasticsearch

修改配置文件

vi /home/elasticsearch-6.3.0/config/elasticsearch.yml
# ---------------------------------- Network -----------------------------------
#
# 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: 9200                 ##服务端口
#
# For more information, consult the network module documentation.
#

启动elasticsearch

/home/elasticsearch-6.3.0/bin/elasticsearch   #命令窗运行
/home/elasticsearch-6.3.0/bin/elasticsearch  -d  #后台线程运行

关闭elasticsearch

ctrl+c                                   #命令窗关闭
ps -ef | grep elastic                    #后台线程关闭
kill -9 4442                             ##pid 4442为查处线程的pid 

常见问题解决elasticsearch启动常见问题

验证elasticsearch启动

5、安装kibana

修改配置文件

vi /home/kibana-6.3.0-linux-x86_64/config/kibana.yml
server.port: 5601       ##服务端口
server.host: "0.0.0.0"  ##服务器ip  本机

elasticsearch.url: "http://localhost:9200" ##elasticsearch服务地址 与elasticsearch对应

启动kibana

/home/kibana-6.3.0-linux-x86_64/bin/kibana       #命令窗启动
nohup ./kibana-6.3.0-linux-x86_64/bin/kibana &   #后台线程启动

关闭kibana

ctrl+c                                   #命令窗关闭
ps -ef | grep kibana                    #后台线程关闭
kill -9 4525                             ##pid 4525 为查处线程的pid 

备注:常见问题多为 端口占用,以及目录未授权,需要同elasticsearch 使用目录运行执行的用户去执行 未配置则为root用户

验证kibana启动

6、安装logstash

新建配置文件

vi /home/logstash-6.3.0/config/logback-es.conf
input {
    tcp {  
        port => 9601  
        codec => json_lines         
    }
}
output {
        elasticsearch {
                hosts => "localhost:9200"
        }
        stdout { codec => rubydebug}
}

备注:上述文件复制时必须去除多余空格,保持yml文件规范。

备注:上图与配置部分一一对应
input {                                ##input 输入源配置
    tcp {                              ##使用tcp输入源      官网有详细文档
        port => 9601                   ##服务器监听端口9061 接受日志  默认ip localhost
        codec => json_lines            ##使用json解析日志    需要安装json解析插件
    }
} 
filter {                              ##数据处理
}                                
output {                               ##output 数据输出配置
        elasticsearch {                ##使用elasticsearch接收
            hosts => "localhost:9200"  ##集群地址  多个用,隔开
        }
        stdout { codec => rubydebug}   ##输出到命令窗口
}

logstash官方输入源支持以及下载

安装logstash json插件

/home/logstash-6.3.0/bin/logstash-plugin install logstash-codec-json_lines

启动logstash

 /home/logstash-6.3.0/bin/logstash -f /home/logstash-6.3.0/config/logback-es.conf         ##命令窗形式
nohup /home/logstash-6.3.0/bin/logstash -f /home/logstash-6.3.0/config/logback-es.conf &  ##后台线程形式

关闭logstash

ctrl+c                                   #命令窗关闭
ps -ef | grep logstash                    #后台线程关闭
kill -9 4617                              ##pid 4617 为查处线程的pid 

7 使用logback 传输日志到logstash

建立springboot项目(为了快速使用)

pom文件依赖

               <dependency>
			<groupId>net.logstash.logback</groupId>
			<artifactId>logstash-logback-encoder</artifactId>
			<version>4.11</version>
		</dependency>

logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration>
<configuration>
    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>192.168.253.6:9601</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>

</configuration>

SpringbootLogbackApplication.java 测试

package com.zyj;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringbootLogbackApplication {
	private final static Logger logger = LoggerFactory.getLogger(SpringbootLogbackApplication.class);

	public static void main(String[] args) {
		new Thread(()->{
			for (int i=0;i<100;i++){
				logger.info("---test---"+i);
			}
		}).start();

		SpringApplication.run(SpringbootLogbackApplication.class, args);
	}
}

9 验证ELK

为演示方便,我们简单展示一下,单位时间线程打印某日志的速度。主要通过kibana过滤出结构化数据,通过以数据的时间戳为x轴,以count统计函数为y轴进行图表展示。

(1)后台启动elasticsearch  kibana logstash 并验证启动成功

(2)启动springboot项目

(3)logstash输出控制台记录  此为默认无过滤器打印logback包装的全部信息

(4)kibana日志显示

添加elasticsearch日志数据