docker安装elk整合springcloud

docker安装elk整合springcloud


使用docker安装elasticsearch、kibana、logstash来集合成elk整合进cloud,你也可以用docker安装elk整个的镜像,我这里是分别安装的三个,我还要用es做搜索索引

安装elasticsearch

去docker官网https://hub.docker.com/下载镜像,我是下的7.3.0版本,后面的kibana和logstash也都要版本一样防止冲突

docker pull elasticsearch:7.3.0

去服务器执行命令就行了,当然你的服务器要先安装docker,执行完可以用docker images来查看有没有按上,执行完之后在服务器上写个elasticsearch.yml文件(vim elasticsearch.yml),具体内容

http.host: 0.0.0.0

写完之后给它权限,chmod 777 elasticsearch.yml,然后运行命令

docker run -itd --restart always --name elasticsearch -p 9210:9200  -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms1g -Xmx1g" -v /home/docker/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /home/docker/elasticsearch/data:/usr/share/elasticsearch/data -v /home/docker/elasticsearch/plugins:/usr/share/elasticsearch/plugins elasticsearch:7.3.0

这条命令是
-itd:给它分配路由并后台执行
–restart always:永久执行,意思是就算你服务器关机再开机这个容器照样是运行的
–name:是给容器起名字
-p:是讲容器内的端口映射到服务器的端口
-e “discovery.type=single-node” 是单机启动,你也可以集群
-e ES_JAVA_OPTS=“-Xms1g -Xmx1g” 是分配内存,分配大了占内存,分配小了内存不够,es是很吃内存的
-v:是将服务器的文件映射到容器内
启动之后你可以用docker logs -f elasticsearch来查看日志,用9210端口访问成功在这里插入图片描述

安装kibana

去官网下载镜像

docker pull kibana:7.3.0

然后在服务器写个文件kibana.yml

server.host: 0.0.0.0
elasticsearch.hosts: http://xx.xx.xx.xx:9210

写完之后赋权限,然后启动容器

docker run -itd --restart always --name kibana -v /home/docker/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml -p 5601:5601 kibana:7.3.0

访问5601端口在这里插入图片描述

安装logstash

去官网下载镜像

docker pull logstash:7.3.0

然后写个文件logstash.conf

# 输入端
input {
  #输入logstash时控制台打印  
  file {
	path => "/usr/share/logstash/data/nfs/basedata_resources_area.csv"
                sincedb_path => "/dev/null"
                start_position => "beginning"
	codec => plain { charset => "UTF-8"}
  }
  stdin { } 
  #为logstash增加tcp输入口,方便springboot接入
  #5044端口预留给filebeat输入logstah,此处开放5043端口,程序直接输入logstash
  tcp {
      mode => "server"
      host => "0.0.0.0"
      #从5043端口取日志
      port => 5043
      #需要安装logstash-codec-json_lines插件
      codec => json_lines
  }
}

filter {
        csv {
                separator => ","
                columns => ["id","time","areaid","areaname","pid","areatype","remark"]
        }
        mutate{
        		split => {"time" => "."}
                add_field => ["datetime","%{time[0]}"]
                remove_field => ["message","path","host","time","remark"]
        }
        date {
			match => ["datetime","dd/MM/yyyy HH:mm:ss","ISO8601"]
			target => "datetime"
        } 
		ruby 
		{ 
			code => "event.set('time', event.get('time').time.localtime + 8*60*60)" 
		}
}

#输出端
output {
  stdout {
    codec => rubydebug
  }
  elasticsearch {
    #hosts中的地址应该写es地址
	hosts => ["http://xx.xx.xx.xx:9210"]
    # 输出至elasticsearch中的自定义index名称
    index => "flow-%{+YYYY.MM.dd}"
    #user => "elastic"
    #password => "changeme"
  }
}

写完赋权限再运行命令

docker run -itd --restart always --name logstash -v /home/docker/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf -p 5044:5044 -p 9600:9600 -p 5043:5043 --network elastic  logstash:7.3.0

运行完我们去访问5601端口的kibana控制台界面,打开Management ->Index Patterns -> create Index Pattern来创建匹配规则
在这里插入图片描述
我这里创建了一个flow*的匹配规则,现在我们在项目里引入即可
先引入依赖

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

引入依赖之后我们在resources目录下建一个logback.xml的文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
    <!--获取springboot的yml配置信息-->
    <springProperty scope="context" name="applicationName" source="spring.application.name" defaultValue="default"/>
    <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
    <property name="LOG_HOME" value="/home"/>
    <!--输出到控制台-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <withJansi>false</withJansi>
        <encoder>
            <!--<pattern>%d %p (%file:%line\)- %m%n</pattern>-->
            <!--格式化输出:%d:表示日期    %thread:表示线程名     %-5level:级别从左显示5个字符宽度  %msg:日志消息    %n:是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %highlight(%-5level) -- %boldMagenta([%thread]) %boldCyan(%logger) : %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!--  日志发送至logstash  -->
    <appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <!-- logstash的服务器地址和通信端口 -->
        <destination>xx.xx.xx.xx:5043</destination>
        <!-- encoder is required -->
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
            <!-- 在elasticsearch的index中追加applicationName字段  -->
            <customFields>{"applicationName":"${applicationName}"}</customFields>
        </encoder>
    </appender>

    <!-- 按照每天生成日志文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
        <!--日志文件最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
    </appender>

    <!-- 日志输出级别 -->
    <root level="INFO">
        <appender-ref ref="logstash"/>
        <appender-ref ref="console"/>
    </root>
</configuration>

然后我们再写个方法测试一下

logger.info("======测试初始化========");
long timeL =Long.parseLong("1675248327268");
Date currentTime = new Date(timeL);
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String dateString = formatter.format(currentTime);
System.out.println(dateString);

运行成功之后等个不到一分钟进kibana控制台第一个左侧导航栏Discover看在这里插入图片描述
这里就可以看出我们成功了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值