docker安装elk整合springcloud
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)