ELK日志系统浅析与部署

栏目: 后端 · 发布时间: 5年前

内容简介:一、ELK应用场景在复杂的企业应用服务群中,记录日志方式多种多样,并且不易归档以及提供日志监控的机制。无论是开发人员还是运维人员都无法准确的定位服务、服务器上面出现的种种问题,也没有高效搜索日志内容从而快速定位问题的方式。因此需要一个集中式、独立的、搜集管理各个服务和服务器上的日志信息,集中管理,并提供良好的UI界面进行数据展示,处理分析。得此:ELK提供一套开源的解决方案,能高效、简便的满足以上场景。
编辑推荐:
本文来自于csdn,本文主要详细介绍了详细介绍elasticsearch,logstash,kibana,beats的详细使用,以及logback详细配置和自定义日志传输。

一、ELK应用场景

在复杂的企业应用服务群中,记录日志方式多种多样,并且不易归档以及提供日志监控的机制。无论是开发人员还是运维人员都无法准确的定位服务、服务器上面出现的种种问题,也没有高效搜索日志内容从而快速定位问题的方式。因此需要一个集中式、独立的、搜集管理各个服务和服务器上的日志信息,集中管理,并提供良好的UI界面进行数据展示,处理分析。

得此:ELK提供一套开源的解决方案,能高效、简便的满足以上场景。

二、ELK日志系统介绍

1、ELK分别是Elasticsearch、Logstash、Kibana三个开源框架缩写。

ELK日志系统浅析与部署

2、ELK经典应用如下

ELK日志系统浅析与部署

ELK经典架构

如图

1.Logstash部署至服务主机,对各个服务的日志进行采集、过滤、推送。

2.Elasticsearch存储Logstash传送的结构化数据,提供给Kibana。

3.Kibana提供用户UIweb页面进行,数据展示和分析形成图表等。

备注:logs 泛指,各种日志文件以及日志信息:windows,negix,tomcat,webserver等等。

3、ELK改进

由于Logstash消耗资源大,而服务器资源相当宝贵,所以引进另一个轻量级日志采集框架Beats,其中包含以下6种

ELK日志系统浅析与部署

ELK日志系统浅析与部署

改良ELK

4、进一步思考

传统web项目中,经常使用log4j以及logback(性能更高)等成熟日志插件进行日志的记录,是否提供更好的解决方案。

ELK日志系统浅析与部署

ELK升级1.0

日志采集新增Logback直接发送日志到Logstash的形式。如果采用此方式,web服务可减少部分生成log文件配置,提高实时性和日志推送效率

5、高并发场景

由于logstash消耗性能,所以高并发场景容易遇到流量上的瓶颈,及时使用logstash集群也是如此,所以可以添加中间件进行日志缓存处理。由于logstash数据源具有多种方式,所有中间件也可以很多选择,常见的有kafka,redis。

ELK日志系统浅析与部署

ELK升级2.0

host1、中间件、host2 均为高可用服务集群 为简单显示未画出

logback出现的业务数据可以通过写入 redis 或者kafka等中间件进行缓存,再通过合理限制流量阀值输送至logstash进行过滤

beats 如果是filebeat其日志若无实时性要求,可以通过控制log文件更新速度限制Beats传输日志流量

三 ELK搭建(非集群)

1、下载ELK(保持版本一致)!

ELK日志系统浅析与部署

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

ELK日志系统浅析与部署

ELK日志系统浅析与部署

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

ELK日志系统浅析与部署

验证elasticsearch启动

ELK日志系统浅析与部署

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

ELK日志系统浅析与部署

验证kibana启动

ELK日志系统浅析与部署

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文件规范。

ELK日志系统浅析与部署

备注:上图与配置部分一一对应

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 & ##后台线程形式

ELK日志系统浅析与部署

关闭logstash

ctrl+c #命令窗关闭

ps -ef | grep logstash #后台线程关闭

kill -9 4617 ##pid 4617 为查处线程的pid

ELK日志系统浅析与部署

7 使用logback 传输日志到logstash

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

ELK日志系统浅析与部署

pom文件依赖

net.logstash.logback

logstash-logback-encoder

4.11

logback.xml

192.168.253.6:9601

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项目

ELK日志系统浅析与部署

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

ELK日志系统浅析与部署

(4)kibana日志显示

添加elasticsearch日志数据

ELK日志系统浅析与部署

使用时间戳显示 单位时间线程记录日志数量

ELK日志系统浅析与部署

四 、思考拓展

1、本文未详细介绍logback详细配置,以及自定义日志传输,将后续写入kafka以及redis方案,log4j亦可以使用elk因性能问题不做深究。

2、本文未详细介绍elasticsearch,logstash,kibana,beats的详细使用,仅罗列架构以及初步elk使用。beats常用为filebeat,对已经生成文档的日志进行传输。

3、没有完美的架构,只有合适的用法,针对不同的业务环境需要对架构进行微调,整体思路不变。elk为单独高可用服务群,服务器群与beats或者logback亦是独立高可用。

4、根据业务需要,在logback打印的日志中可以进行结构化处理,亦或者在logstash的filter中对数据进行结构化处理。业务场景有待考究,初步考虑异常分析以及 sql 回滚等。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Zen of CSS Design

The Zen of CSS Design

Dave Shea、Molly E. Holzschlag / Peachpit Press / 2005-2-27 / USD 44.99

Proving once and for all that standards-compliant design does not equal dull design, this inspiring tome uses examples from the landmark CSS Zen Garden site as the foundation for discussions on how to......一起来看看 《The Zen of CSS Design》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器