logback+ELK+redis日志收集服务搭建
粗略画的架构图
+ELK的简单介绍
+ Elasticsearch是一个分布式搜索分析引擎,稳定、可水平扩展、易于管理是它的主要设计初衷
+ Logstash是一个灵活的数据收集、加工和传输的管道软件
+ Kibana是一个数据可视化平台,可以通过将数据转化为酷炫而强大的图像而实现与数据的交互将三者的收集加工,存储分析和可视转化整合在一起就形成了 ELK
#本教程简单介绍
1.此ELK版本是5.3
2.日志记录使用logback ,分布式链表日志使用log4j MDC标记
3.Logstash-Shipper获取日志信息发送到redis
4.Redis在此处的作用
是防止ElasticSearch服务异常,丢失日志
提供消息队列的作用
5.logstash是读取Redis中的日志信息发送给ElasticSearch
6.ElasticSearch提供日志存储和检索
7.Kibana是ElasticSearch可视化界面插件
#前置环境
jdk 1.8
redis
Centos 7.0 X86-64
注意:
ELK服务不要用root用户开启。非root账户要记住给目录权限.
每个服务建议用多个连接,这样可以看控制台
- 下载ELK相关服务压缩包
- 创建ELK用户和目录并赋予权限,方便统一管理。
[root@localhost /]# mkdir elk
[root@localhost /]# groupadd elk
[root@localhost /]# useradd -g elk elk
[root@localhost /]# chown -R elk:elk /elk
[root@localhost /]# su elk
[elk@localhost /]$ cd elk
- 下载,然你也可以去官网找最新版的
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.3.2.tar.gz
wget https://artifacts.elastic.co/downloads/logstash/logstash-5.3.2.tar.gz
wget https://artifacts.elastic.co/downloads/kibana/kibana-5.3.2-linux-x86_64.tar.gz
- 配置Elasticsearch
- Elasticsearch是可以搭建集群,所以这里解压的名字改成了Elasticsearch+端口号。
[elk@localhost elk]$ mkdir /elk/elastcicearch-9200 && tar -zxvf /elk/elasticsearch-5.3.2.tar.gz -C /elk/elastcicearch-9200
- Elasticsearch安装
打开配置文件
[elk@localhost /]$ vim /elk/elastcicearch-9200/elasticsearch-5.3.2/config/elasticsearch.yml
在最后一行增加.这里的host我电脑的ip 。port是ElasticSearch服务的端口
cluster.name: es_cluster
node.name: node-1
path.data: /elk/elastcicearch-9200/data
path.logs: /elk/elastcicearch-9200/logs
network.host: 192.168.3.33
http.port: 9200
启动肯定会出现ERROR,参考这个博文解决问题,
友情提示,设置完成后请重新登录账户
[elk@localhost /]$ /elk/elastcicearch-9200/elasticsearch-5.3.2/bin/elasticsearch &
使用集群的话还要装head插件,在后期的教程中再做演示
- 配置logstash
- 解压
tar -zxvf /elk/logstash-5.3.2 -C /elk
- 测试配置,只是测试服务是否启动。还有这个文件是没有的,启动时加上这个路径就是以这个配置启动
vim /elk/logstash-5.3.2/config/logstash.conf
输入
input {
stdin { }
}
output {
stdout {
codec => rubydebug {}
}
}
启动,控制台随便输入测
/elk/logstash-5.3.2/bin/logstash -f /elk/logstash-5.3.2/config/logstash.conf --debug
- 下面这个配置是TCP的,等会用logback演示.
只是测试数据连同的数据流
项目==>logstash==>elasticsearch.
input {
tcp {
host => "192.168.3.33"
port => 8882
mode => "server"
ssl_enable => false
codec => json {
charset => "UTF-8"
}
}
}
output {
elasticsearch {
hosts => "192.168.3.90:9200"
index => "logstash-test"
}
stdout { codec => rubydebug }
}
通过Redis 则需要将上述架构图中的logstash-Shipper(其实就是logstash)中的output改为Redis。logstash的input改为Redis.
4. 配置kibana
+ 解压
[elk@localhost root]$ tar -zxvf /elk/kibana-5.3.2-linux-x86_64.tar.gz -C /elk
- 打开配置
[elk@localhost root]$ vim /elk/kibana-5.3.2-linux-x86_64/config/kibana.yml
- 修改配置,最后最加
server.port: 8888
server.host: "192.168.3.90"
elasticsearch.url: "http://192.168.3.90:9200"
- 启动
[elk@localhost root]$ /elk/kibana-5.3.2-linux-x86_64/bin/kibana &
- 访问地址
192.168.3.90:8888
=======================
java测试
项目==>logstash==>elasticsearch.
+ 修改logstash配置
input {
tcp {
host => "192.168.3.90"
port => 8882
mode => "server"
ssl_enable => false
codec => json {
charset => "UTF-8"
}
}
}
output {
elasticsearch {
hosts => "192.168.3.90:9200"
index => "logstash-test"
}
stdout { codec => rubydebug }
}
- java 在System.out.println(“123”);打断点,不要跑完程序,不然TCP数据穿不过去
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;
import org.springframework.util.StringUtils;
public class Test extends Thread{
private final Logger logger= LoggerFactory.getLogger(this.getClass());
private String name;
public Test(String name) {
// TODO Auto-generated constructor stub
this.name = name;
}
public void run(){
if(!StringUtils.isEmpty(name)){
MDC.put("username", name);
}
for(int i =0 ; i<40 ; i++){
if (logger.isInfoEnabled()) {
logger.info("数字【"+i+"】");
}
}
}
public static void main(String[] args) {
test t1 = new test("我是标记11111");
test t2 = new test("我是标记22222");
test t3 = new test("");
t1.start();
t2.start();
t3.start();
System.out.println("123");
}
}
- maven架包支持。如果使用最新的ELK请使用最新的架包版本
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.12</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>4.9</version>
</dependency>
<!--实现slf4j接口并整合-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
依次启动 elasticsearch logstash kibana java程序
演示效果
对于Redis的,只需要解压两个logstash。只是修改配置的问题。这里就不做演示了