搭建基于Rabbitmq + ELK分布式日志收集平台

分布式系统中的日志散落在各个服务器中,对于问题的定位和分析有诸多不变;ELK日志收集与分析平台是当下使用最为广泛的分布式日志平台。它的基本流程是:各服务将日志通过logstash进行过滤和格式化,存储至es中,kibana作为可视化界面提供日志的检索与分析功能。此处为了提高服务器的性能,减少服务直接将日志输出至es带来的性能损耗,引入了Rabbitmq作为es与服务之间的解耦工具,所以完整的流程就是:系统将日志输出到rabbitmq中;logstash对接mq并从中获取日志信息进行过滤与格式化处理;并将处理后的日志数据存储至es中;开发人员根据kibana提供的界面对日志进行分析。以下仅为在学习过程中搭建环境过程中的记录,具体应用到生产环境中还需要考虑各个服务组件的高可用以及性能调优等问题。Rabbitmq的安装网上教程已经很多了,下载解压包以及docker安装都可以,在这里不作展示;仅展示服务结合Logback输出日志到rabbitmq以及elk搭建的过程

1、应用程序引入logback日志,并配置输出日志到rabbitmq:
(1)引入logback依赖:

		
        
            org.slf4j
            slf4j-api
        
        
            ch.qos.logback
            logback-classic
        
        
            ch.qos.logback
            logback-core
        
        
            org.slf4j
            log4j-over-slf4j
        

(2)创建logback.xml文件,配置appender输出日志到rabbitmq:




    
    
	
    
        
            
            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level    %logger{10}-%msg%n
        
    
	
    
        
            
                {
                "time": "%date{ISO8601}",
                "thread": "%thread",
                "level":
                "%level",
                "class": "%logger{60}",
                "message": "%msg"
                }
            
        
        localhost
        5672
        guest
        guest
        spring-cloud-system
        logstash
        true
        direct
        ex_logstash
        true
        UTF-8
        true
        PERSISTENT
    

    
    
        
        
    

2、ElasticSearch的安装:
(1)下载安装包并解压:es下载链接;
(2)创建数据与日志的存储目录,并修改config/elasticsearch.yml文件指定:

cluster.name: my-application

# ------------------------------------ Node ------------------------------------
# 节点名称
node.name: es-node-1

# ----------------------------------- Paths ------------------------------------
# 数据存储目录(自行替换)
path.data: /opt/elk-stack/data/es/data
# 日志文件存储目录
path.logs: /opt/elk-stack/data/es/log

# ----------------------------------- Memory -----------------------------------
# 启动时是否锁定内存
bootstrap.memory_lock: false

# ---------------------------------- Network -----------------------------------
# 主机ip
network.host: 127.0.0.1
# 端口
http.port: 9200

(3)执行bin目录下的启动脚本并访问http://localhost:9200验证是否启动成功,成功则会出现以下提示:

{
  "name" : "es-node-1",
  "cluster_name" : "my-application",
  "cluster_uuid" : "wRRNwIGTQeC3pgCnB3NBEA",
  "version" : {
    "number" : "7.3.1",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "4749ba6",
    "build_date" : "2019-08-19T20:19:25.651794Z",
    "build_snapshot" : false,
    "lucene_version" : "8.1.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

3、logstash的安装与配置:
(1)下载安装包并解压:下载链接。
(2)创建数据与日志信息的存储目录,并修改config/logstash.yml文件进行指定:

	path.data: /opt/elk-stack/data/logstash/data
	path.logs: /opt/elk-stack/data/logstash/log

(3)logstash启动时需要指定输入与输出的方式,此处要实现的效果是从Rabbitmq中获取数据输出至es中存储,因此创建rabbitmq.conf文件:

	input{
	   rabbitmq{
		host=>"localhost"                             # 这里填写Rabbitmq的地址,确保可以ping通
		port=> 5672                            # 这里填写Rabbitmq的端口
		user=>"guest"                          # 这里填写Rabbitmq的用户名
		password=>"guest"                      # 这里填写Rabbitmq的密码
		queue=>"q_logstash"                     # 这里填写Rabbitmq的队列的名称
		durable=> true                         # 这里填写Rabbitmq的队列的durable属性
		codec=>json                            # 这里填写Rabbitmq的队列的内容是什么格式
		type=> "result"                        # 这里选填
	  }
	}
	filter{		
	}
	output {
		elasticsearch {
			hosts => ["localhost:9200"]          # ElasticSearch的地址加端口
		 	index => "position-%{+YYYYMMdd}"        # ElasticSearch的保存文档的index名称,
			document_type=>"%{messageType}"         # ElasticSearch的保存文档的type
			document_id=>"%{mark_uuid}"             # ElasticSearch的保存文档的id
	   }
	}

(4)指定配置文件并启动:./bin/logstash -f rabbitmq.conf,访问http://localhost:9600出现一些关于logstash的配置信息即表示安装成功。

4、kibana的安装:
(1)下载安装包并解压:下载链接。
(2)修改配置文件config/kibana.yml,配置es监控信息(可配置集群):

	server.port: 5601
	server.host: "localhost"
	elasticsearch.hosts: ["http://localhost:9200"]

(3)执行启动脚本,访问http://localhost:5601进入kibana界面即可查看日志信息。

你可能感兴趣的:(搭建基于Rabbitmq + ELK分布式日志收集平台)