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 ...
随机推荐
- cf786E ALT (最小割+倍增优化建图)
如果把“我全都要”看作是我全不要的话,就可以用最小割解决啦 源点S,汇点T 我们试图让每个市民作为一个等待被割断的路径 把狗狗给市民:建边(S,i,1),其中i是市民 把狗狗给守卫:建边(j,T,1) ...
- SqlServer存储过程详解
SqlServer存储过程详解 1.创建存储过程的基本语法模板: if (exists (select * from sys.objects where name = 'pro_name')) dro ...
- (转)Visual Studio控制台程序输出窗口一闪而过的解决方法
背景:熟悉visiual studio工具的使用 刚接触 Visual Studio的时候大多数人会写个Hello World的程序试一下,有的人会发现执行结束后输出窗口会一闪而过,并没有出现Pres ...
- 01-HTML5的介绍
本章知识点 HTML5介绍 什么是 HTML5 HTML的新特性 HTML新增的语义化标签 HTML5介绍 HTML5,在2014年10月由万维网联盟(W3C)完成标准制定. HTML5的设计目的是为 ...
- QQ企业邮箱+Spring+Javamail+ActiveMQ(发送企业邮件)
原来有个教程是关于Javamail的,但是那个是自己写Javamail的发送过程,这次不同的是:使用Spring的Mail功能,使用了消息队列. 先看一下设想的场景 不过本文重点不是消息队列,而是使用 ...
- TCP UDP 数据包过大导致分片情况
MTU大家都知道,是链路层中的网络对数据帧的一个限制,依然以以太网为例,MTU为1500个字节.一个IP数据报在以太网中 传输,如果它的长度大于该MTU值,就要进行分片传输,使得每片数据报的长度小于M ...
- CentOS 6.5 升级内核
Docker需要3.10以上内核支持,Centos6.5 默认内核为2.6.所以手动编译安装3.10内核. 查看当前系统内核版本 [root@gu ~]# uname -r2.6.32-431.el6 ...
- 通过Cloudera Manager部署CDH5.15.1的webUI界面详解
通过Cloudera Manager部署CDH5.15.1的webUI界面详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客CDH的部署完全通过Cloudera Mana ...
- Java中Dom解析XML
DOM将整个XML文件加载到内存中,并构建出节点树:应用程序可以通过遍历节点树的方式来解析XML文件中的各个节点.属性等信息:这种方式便于对XML节点的添加修改等,而且解析也很方便,然后它比较耗费内存 ...
- postgresql行转列
问:怎么分页&&按条件&&按顺序&&姓名不重复查出数据? 答:其实就是行转列,那么,postgresql怎么进行转列呢,百度了下,大概有三种写法 写法1 ...