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

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

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

		<!-- 日志工具类 -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>log4j-over-slf4j</artifactId>
        </dependency>

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

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="10 seconds">

    <!-- 读取application.yml中的属性 -->
    <springProperty scope="context" name="springAppName" source="spring.application.name" />
	<!-- 输出到控制台 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level    %logger{10}-%msg%n</pattern>
        </encoder>
    </appender>
	<!-- 输出到mq -->
    <appender name="AMQP" class="org.springframework.amqp.rabbit.logback.AmqpAppender">
        <layout>
            <pattern>
                {
                "time": "%date{ISO8601}",
                "thread": "%thread",
                "level":
                "%level",
                "class": "%logger{60}",
                "message": "%msg"
                }
            </pattern>
        </layout>
        <host>localhost</host>
        <port>5672</port>
        <username>guest</username>
        <password>guest</password>
        <applicationId>spring-cloud-system</applicationId>
        <routingKeyPattern>logstash</routingKeyPattern>
        <declareExchange>true</declareExchange>
        <exchangeType>direct</exchangeType>
        <exchangeName>ex_logstash</exchangeName>
        <generateId>true</generateId>
        <charset>UTF-8</charset>
        <durable>true</durable>
        <deliveryMode>PERSISTENT</deliveryMode>
    </appender>

    <!-- 日志输出级别 这样设置不打印日志 -->
    <root level="INFO">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="AMQP" />
    </root>
</configuration>

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界面即可查看日志信息。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值