docker compose部署ELK日志管理系统

ELK是Elasticsearch、Logstash、Kibana的简称,这三者是核心套件,但并非全部。

Elasticsearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。

Logstash是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。

Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据

此处先下载docker,下载安装的方法此处略。

window系统:输入powershell,进入到命令窗口。

1.下载相关镜像

docker pull elasticsearch:7.6.0
docker pull kibana:7.6.0
docker pull logstash:7.6.0

2.启动docker-compose

2.1 配置docker-compose.yml

​
​
version: '3'
services:
  elasticsearch:
    image: elasticsearch:7.6.2
    container_name: elasticsearch
    user: root
    environment:
      - "cluster.name=elasticsearch" #设置集群名称为elasticsearch
      - "discovery.type=single-node" #以单一节点模式启动
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m" #设置使用jvm内存大小
    volumes:
      - E://docker/images/mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins #插件文件挂载
      - E://docker/images/mydata/elasticsearch/data:/usr/share/elasticsearch/data #数据文件挂载
    ports:
      - 9200:9200
      - 9300:9300
  logstash:
    image: logstash:7.6.2
    container_name: logstash
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - E://docker/images/mydata/logstash/logstash-springboot.conf:/usr/share/logstash/pipeline/logstash.conf #挂载logstash的配置文件
      - E://docker/images/mydata/logstash/mysql-connector-java-8.0.18.jar:/usr/share/logstash/mysql-connector-java-8.0.18.jar #如果通过mysql数据库进行日志传输的话,需要挂载一个mysql驱动(根据自己实际情况进行挂载)
    depends_on:
      - elasticsearch #kibana在elasticsearch启动之后再启动
    links:
      - elasticsearch:es #可以用es这个域名访问elasticsearch服务
    ports:
        #此处我通过UDP和TCP的方式传输日志,因此映射了2个端口号
      - 4560:4560
      - 4561:4561/udp
  kibana:
    image: kibana:7.6.2
    container_name: kibana
    links:
      - elasticsearch:es #可以用es这个域名访问elasticsearch服务
    depends_on:
      - elasticsearch #kibana在elasticsearch启动之后再启动
    environment:
      - "elasticsearch.hosts=http://es:9200" #设置访问elasticsearch的地址
    ports:
      - 5601:5601

​

​

2.2 配置logstash-springboot.yml

input {
    #TCP的方式传输日志
	tcp {
		host => "0.0.0.0"
		port => 4560
		type => "tcp"
		mode => "server"
		codec => json_lines
	}
    #UDP的方式传输日志
	udp {
		host => "0.0.0.0"
		port => 4561
		type => "udp"
		codec => json_lines
	}
    #Mysql的方式传输日志
	jdbc {
		#数据库配置
		jdbc_driver_library => "/usr/share/logstash/mysql-connector-java-8.0.18.jar"
		jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
		jdbc_connection_string => "jdbc:mysql://cdb-ksj76j8k.cd.tencentcdb.com:10051/logs?autoReconnect=true&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&characterEncoding=utf8&useSSL=false&serverTimezone=UTC"
		jdbc_user => "root"
		jdbc_password => "qwe123!@#"
		jdbc_default_timezone => "Asia/Shanghai"
		#多久同步一次,默认10秒
		schedule => "* * * * *"
		statement => "SELECT * FROM logging_event WHERE event_id > :sql_last_value order by timestmp asc"
		#是否需要追踪字段
		record_last_run => true
		use_column_value => true
		tracking_column => "event_id"
		#这里可以手动设置:sql_last_value的值,默认时间是1970-01-01,默认数字是0
		last_run_metadata_path => "/usr/share/logstash/mall-tiny-info"
		#是否清除last_run_metadata_path的记录,如果是真那么每次都相当于从头开始查询所有数据库记录
		clean_run => false
		type => "jdbc"
		#是否分页
		jdbc_paging_enabled => "true"
		jdbc_page_size => "10000"
	}
}
output {
	stdout {
		codec => json_lines
	}
	if [type] == "jdbc" {
		elasticsearch {
			hosts => "es:9200"
			index => "mall-tiny-jdbc-%{+YYYY.MM.dd}"
		}
	}
	if [type] == "udp" {
		elasticsearch {
			hosts => "es:9200"
			index => "mall-tiny-udp-%{+YYYY.MM.dd}"
		}
	}
	if [type] == "tcp" {
		elasticsearch {
			hosts => "es:9200"
			index => "mall-tiny-tcp-%{+YYYY.MM.dd}"
		}
	}
}

将相关路径和配置信息填写好之后,打开powershell命令窗口,进入到docker-compose.yml所在的路径下,运行

docker-compose up -d

 

2.3 项目中配置logback-spring.xml

需要在项目中引用以下jar包,此处提供了三种方式传输日志,包含Mysql,Tcp,Udp

<dependency>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
    <version>6.4</version>
</dependency>

2.3.1 Mysql方式

<appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
    <!-- 日志异步到数据库 -->
    <connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">
        <driverClass>com.mysql.jdbc.Driver</driverClass>
        <url>数据库URL地址</url>
        <user>数据库USER</user>
        <password>数据库密码</password>
    </connectionSource>
    <!-- 这里设置日志级别为error -->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>error</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>
</appender>
<root level="INFO">
    <appender-ref ref="CONSOLE"/>
    <appender-ref ref="DB"/>
</root>

2.3.2 Tcp方式

​
<appender name="TCP" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
    <!--可以访问的logstash日志收集端口-->
    <destination>localhost:4560</destination>
    <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
        <providers>
            <timestamp>
                <timeZone>UTC</timeZone>
            </timestamp>
            <pattern>
                <pattern>
                    {
                        "severity": "%level",
                        "service": "${springAppName:-}",
                        "trace": "%X{X-B3-TraceId:-}",
                        "span": "%X{X-B3-SpanId:-}",
                        "exportable": "%X{X-Span-Export:-}",
                        "pid": "${PID:-}",
                        "thread": "%thread",
                        "class": "%logger{40}",
                        "rest": "%message"
                    }
                </pattern>
            </pattern>
        </providers>
    </encoder>
</appender>
<root level="INFO">
    <appender-ref ref="CONSOLE"/>
    <appender-ref ref="TCP"/>
</root>

​

​

2.3.3 UDP方式

​
<appender name="UDP" class="net.logstash.logback.appender.LogstashUdpSocketAppender">
        <!--可以访问的logstash日志收集端口-->
        <host>localhost</host>
        <port>4561</port>
        <layout class="net.logstash.logback.layout.LogstashLayout" />
</appender>

​<root level="INFO">
    <appender-ref ref="CONSOLE" />
    <appender-ref ref="UDP" />
</root>

2.4 使用kibana

进入到你已启动的kibana系统,首先添加你的index pattern。

2.5 总结

以上便是使用docker-compose部署使用ELK的大致流程,省去了部分相对简单的部分,如有疑问可留言或私信

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值