ES系列十七、logback+ELK日志搭建
一、ELK应用场景
在复杂的企业应用服务群中,记录日志方式多种多样,并且不易归档以及提供日志监控的机制。无论是开发人员还是运维人员都无法准确的定位服务、服务器上面出现的种种问题,也没有高效搜索日志内容从而快速定位问题的方式。因此需要一个集中式、独立的、搜集管理各个服务和服务器上的日志信息,集中管理,并提供良好的UI界面进行数据展示,处理分析。
得此:ELK提供一套开源的解决方案,能高效、简便的满足以上场景。
二、ELK日志系统介绍
1、ELK分别是Elasticsearch、Logstash、Kibana三个开源框架缩写。
| 框架 | 简介 | 作用 |
| Elasticsearch | 开源分布式搜索引擎,提供存储、分析、搜索功能。特点:分布式、基于reasful风格、支持海量高并发的准实时搜索场景、稳定、可靠、快速、使用方便等。 | 接收搜集的海量结构化日志数据,并提供给kibana查询分析 |
| Logstash | 开源日志搜集、分析、过滤框架,支持多种数据输入输出方式。 | 用于收集日志,对日志进行过滤形成结构化数据,并转发到elasticsearch中 |
| Kibana | 开源日志报表系统,对elasticsearch以及logstash有良好的web页面支持。 | 对elasticsearch提供的数据进行分析展示 |
2、与Logstash的直接集成有两种方式:
2.1、Logstash与微服务应用安装在一起,监听日志文件

2.2、Logstash独立部署,微服务节点通过网络向Logstash发送日志信息。

3、间接集成(两种方式)
1、每个应用节点部署一个轻量级日志采集框架Beats,再由Beats对接统一的Logstash
由于Logstash消耗资源大,而服务器资源相当宝贵,所以引进另一个轻量级日志采集框架Beats,其中包含以下6种
| Packetbeat | 用于搜集网络流量数据 |
|
Heartbeat |
用于运行时间监控 |
| Filebeat | 用于搜集文件数据 |
| Winlogbeat | 用于搜集winodws事件数据 |
| Metricbeat | 用于指标 |
| Auditbeat | 用于审计数据 |

2、微服务将日志发送给Redis或者MQ,再由他们去对接Logstash(高并发场景)
由于logstash消耗性能,所以高并发场景容易遇到流量上的瓶颈,及时使用logstash集群也是如此,所以可以添加中间件进行日志缓存处理。由于logstash数据源具有多种方式,所有中间件也可以很多选择,常见的有kafka,redis。

三、ELK搭建(非集群)
1、下载ELK(保持版本一致)
| Elasticsearch | 官网elasticsearch-6.3.1.tar | elasticsearch官方文档 |
| Kibana | 官网kibana-6.3.1下载 linux64位 | kibana官方文档 |
| Logstash | 官网logstash-6.3.1.tar | logstash官方文档 |
| Filebeat | 官网filebeat-6.3.0 linux64位 | beats官方文档 |
下面只介绍,方案2:Logstash独立部署,微服务节点通过网络向Logstash发送日志信息。
2、环境准备
1、jdk1.8
2、Elasticsearch安装参考:ES系列一、CentOS7安装ES 6.3.1
3、启动 Elasticsearch
3、安装Kibana
1、解压到安装目录即可
/home/kibana-6.3.-linux-x86_64
2、修改配置文件
vi /home/kibana-6.3.-linux-x86_64/config/kibana.yml
server.port: ##服务端口
server.host: "0.0.0.0" ##服务器ip 本机
elasticsearch.url: "http://localhost:9200" ##elasticsearch服务地址 与elasticsearch对应
3、启动kibana
/home/kibana-6.3.-linux-x86_64/bin/kibana #命令窗启动
4、关闭kibana
ps -ef | grep kibana #后台线程关闭
kill - ##pid 为查处线程的pid
5、验证kibana启动

4、安装logstash
1、下载
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.3.1.tar.gz
tar -zxvf logstash-6.3.1.tar.gz
2、创建配置文件logstash-es.conf
vim /home/logstash-6.3.1/conf.d/logstash-es.conf
复制一下内容:
input {
tcp {
port =>
codec => "json"
}
}
output {
elasticsearch {
action => "index"
hosts => ["localhost:9200"]
index => "%{[appname]}"
}
}
10514:接受日志端口
hosts => ["localhost:9200"] :es的ip和端口
"%{[appname]}" :取值日志中appname值为索引
3、检测配置文件是否有错:
/home/logstash-6.3.1/bin/logstash --path.settings /home/logstash-6.3.1/config/ -f /home/logstash-6.3.1/config/conf.d/logstash-es.conf--config.test_and_exit
Sending Logstash's logs to /var/log/logstash which is now configured via log4j2.properties
Configuration OK # 为ok则代表配置文件没有问题
[root@data-node1 /usr/share/logstash/bin]#
命令说明:
- --path.settings 用于指定logstash的配置文件所在的目录
- -f 指定需要被检测的配置文件的路径
- --config.test_and_exit 指定检测完之后就退出,不然就会直接启动了
4、指定配置文件,启动logstash:
/home/logstash-6.3.1/bin/logstash --path.settings /home/logstash-6.3.1/config/ -f /home/logstash-6.3.1/config/conf.d/logstash-es.confSending Logstash's logs to /var/log/logstash which is now configured via log4j2.properties
# 这时终端会停留在这里,因为我们在配置文件中定义的是将信息输出到当前终端
5、验证
打开新终端检查一下10514端口是否已被监听:
[root@data-node1 ~]# netstat -lntp |grep
tcp6 ::: :::* LISTEN /java
[root@data-node1 ~]#
5、配置lockback
1、maven
<!--logback日志-->
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>4.8</version>
</dependency>
2、logback.xml添加logstash配置
<appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<param name="Encoding" value="UTF-8"/>
<remoteHost>192.168.1.102</remoteHost>
<port>10514</port>
<!-- <filter class="com.program.interceptor.ELKFilter"/>-->//引入过滤类
<!-- encoder is required -->
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" >
<customFields>{"appname":"${appName}"}</customFields> // 索引名
</encoder>
</appender>
logback.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true">
<contextName>MovieBooking</contextName>
<timestamp key="TIMESTAMP" datePattern="yyyy-MM-dd" />
<property name="LOGPATH" value="log" />
<springProperty scope="context" name="appName" source="server.Name" defaultValue="localhost.log"/>
<!-- 输出到控制台 -->
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{} - %msg%n
</pattern>
</layout>
</appender> <!-- 输出到文件 -->
<appender name="fileLog"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOGPATH}${file.separator}${TIMESTAMP}.log</file>
<append>true</append>
<encoder>
<pattern>
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{} - %msg%n
</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOGPATH}${file.separator}all${file.separator}%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory></maxHistory>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender> <appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<param name="Encoding" value="UTF-8"/>
<remoteHost>192.168.1.102</remoteHost>
<port></port>
<!-- <filter class="com.program.interceptor.ELKFilter"/>-->//引入过滤类
<!-- encoder is required -->
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" >
<customFields>{"appname":"${appName}"}</customFields>
</encoder>
</appender> <root level="INFO">
<appender-ref ref="fileLog" />
<appender-ref ref="stdout" />
<appender-ref ref="logstash" />
</root>
</configuration>
3、测试
添加单元测试类:
package com.example.demo; import com.example.service.StudentService;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.context.web.WebAppConfiguration; @RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
@WebAppConfiguration
public class DemoApplicationTests {
@Autowired
private StudentService studentService; @Test
public void Test() {
log.info("测试日志{}","台风山竹,威力很大!");
log.info(studentService.findAllStudent().get().toString());
}
}
执行:

4、验证

ES系列十七、logback+ELK日志搭建的更多相关文章
- Logback+ELK+SpringMVC搭建日志收集服务器
(转) 1.ELK是什么? ELK是由Elasticsearch.Logstash.Kibana这3个软件的缩写. Elasticsearch是一个分布式搜索分析引擎,稳定.可水平扩展.易于管理是它的 ...
- ES系列目录
ES系列一.CentOS7安装ES 6.3.1 ES系列二.CentOS7安装ES head6.3.1 ES系列三.基本知识准备 ES系列四.ES6.3常用api之文档类api ES系列五.ES6.3 ...
- 【ELK】5.spring boot日志集成ELK,搭建日志系统
阅读前必看: ELK在docker下搭建步骤 spring boot集成es,CRUD操作完整版 ============================================== 本章集成 ...
- 【7.1.1】ELK日志系统单体搭建
ELK是什么? 一般来说,为了提高服务可用性,服务器需要部署多个实例,每个实例都是负载均衡转发的后的,如果还用老办法登录服务器去tail -f xxx.log,有很大可能错误日志未出现在当前服务器中, ...
- 02篇ELK日志系统——升级版集群之kibana和logstash的搭建整合
[ 前言:01篇LK日志系统已经把es集群搭建好了,接下来02篇搭建kibana和logstash,并整合完成整个ELK日志系统的初步搭建. ] 1.安装kibana 3台服务器: 192.168.2 ...
- SpringBoot+ELK日志系统搭建
一.ELK是什么 "ELK"是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch.Logstash 和 Kibana.Elasticsearch 是一个搜索和分 ...
- 使用elk+redis搭建nginx日志分析平台
elk+redis 搭建nginx日志分析平台 logstash,elasticsearch,kibana 怎么进行nginx的日志分析呢?首先,架构方面,nginx是有日志文件的,它的每个请求的状态 ...
- ELK日志分析系统搭建(转)
摘要: 前段时间研究的Log4j+Kafka中,有人建议把Kafka收集到的日志存放于ES(ElasticSearch,一款基于Apache Lucene的开源分布式搜索引擎)中便于查找和分析,在研究 ...
- 小白都会超详细--ELK日志管理平台搭建教程
目录 一.介绍 二.安装JDK 三.安装Elasticsearch 四.安装Logstash 五.安装Kibana 六.Kibana简单使用 系统环境:CentOS Linux release 7.4 ...
随机推荐
- 【BZOJ5019】[SNOI2017]遗失的答案(FWT,动态规划)
[BZOJ5019][SNOI2017]遗失的答案(FWT,动态规划) 题面 BZOJ 题解 发现\(10^8\)最多分解为不超过\(8\)个本质不同质数的乘积. 而\(gcd\)和\(lcm\)分别 ...
- How to Add Trust Sites into IE before IE10 through Group Policy
Due to IE10 published, I'll conclude the methods that how to add trust sites in to IE of the version ...
- Surrounded Regions - LeetCode
目录 题目链接 注意点 解法 小结 题目链接 https://leetcode.com/problems/surrounded-regions/ 注意点 边缘不算包围'O' 解法 解法一:dfs.找处 ...
- Python中的join()函数的用法及列表推导式
[红色为转载后新增部分] 函数:string.join() Python中有join()和os.path.join()两个函数,具体作用如下: join():连接字符串数组.将字符串.元组.列表中的元 ...
- A1075. PAT Judge
The ranklist of PAT is generated from the status list, which shows the scores of the submittions. Th ...
- 11:SSM框架下各个层的解释说明
具体见网址:http://blog.csdn.net/lutianfeiml/article/details/51864160
- Faster RCNN代码理解(Python)
转自http://www.infocool.net/kb/Python/201611/209696.html#原文地址 第一步,准备 从train_faster_rcnn_alt_opt.py入: 初 ...
- vue.js2.0开发中的几个技巧
最近用Vue.js开发了几个项目,Vue的双向数据绑定和组件化让我耳目一新,减少了很多底层重复的工作,和基于jQuey的前端开发不起来,基于Vue的开发给我一种酣畅淋漓的感觉. 下面给出我基于Vue. ...
- Js中this机制全解
JavaScript中有很多令人困惑的地方,或者叫做机制. 但是,就是这些东西让JavaScript显得那么美好而与众不同. 比方说函数也是对 象.闭包.原型链继承等等,而这其中就包括颇让人费解的th ...
- ISO七层模型详解
ISO七层模型详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在我刚刚接触运维这个行业的时候,去面试时总是会做一些面试题,笔试题就是看一个运维工程师的专业技能的掌握情况,这个很 ...