首先得有虚拟机,内存cpu不要太小,不然会崩,我在这上面直接崩了,害的我搞了老半天
安装docker,博客里边有docker教程
Linux 下 yum 安装 docker_aloneTK的博客-CSDN博客
1.安装ElasticSearch
# 此处使用的elasticsearch版本为7.6.0,后续的kibana和logstash也会使用该版本
docker pull elasticsearch:7.6.0
2.为elasticsearch创建网络
# 如果已经创建了网络,则省略该步骤
docker network create elastic
3.启动镜像
docker run -d \
--name elasticsearch \
--network elastic \
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
elasticsearch:7.6.0
4.验证启动状态,若出现如下的返回信息,则说明elasticsearch已经部署ok
curl 127.0.0.1:9200
出现这个证明安装成功
5.接下来安装kibana
# 该命令可执行也可不执行,docker run的时候若没有镜像会自动pull镜像
docker pull kibana:7.6.0
启动容器
# 仅使用命令行启动
docker run -d \
--name kibana \
--network elastic \
-e ELASTICSEARCH_URL=http://elasticsearch:9200 \
-e I18N_LOCALE=zh-CN \
-p 5601:5601 \
kibana:7.6.0
参数说明:
# 指定容器的网络,与elasticsearch使用同一网络即可使用容器名称进行互通
--network elastic
# 指定elasticsearch的服务器地址,elasticsearch:9200表示容器名称:端口号
# 只有同一网络下容器才能使用此种方式互通
-e ELASTICSEARCH_URL=http://elasticsearch:9200
# 容器国际化设配置为简体中文
-e I18N_LOCALE=zh-CN
6.访问kibana界面: http://服务器地址:5601
证明启动成功
6.安装Logstash(在这里遇见超级多的坑)
# 该命令可执行也可不执行,docker run的时候若没有镜像会自动pull镜像
docker pull logstash:7.6.0
7.启动容器
下面会给出两种启动的方式,看个人喜好去选择,都由我亲自实践,完全莫得bug!
# 1.直接启动容器,不映射配置文件
docker run -d -p 5043:5043 -p 5044:5044 --name logstash --network elastic logstash:7.6.0
# 2.待容器启动完成,进入容器中
docker exec -it logstah /bin/bash
# 3.为logstash安装json_lines插件
/usr/share/logstash/bin/logstash-plugin install logstash-codec-json_lines
# 4. 添加springboot.yml配置文件
========================================================================
vi /usr/share/logstash/pipeline/springboot.yml
# 输入端
input {
#输入logstash时控制台打印
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
}
}
#输出端
output {
stdout {
codec => rubydebug
}
elasticsearch {
#hosts中的地址应该写同一network下的容器名称
hosts => ["http://elasticsearch:9200"]
# 输出至elasticsearch中的自定义index名称
index => "flow-%{+YYYY.MM.dd}"
#user => "elastic"
#password => "changeme"
}
}
========================================================================
# 5. 保存编辑好的yml配置文件,退出容器
exit
# 6.重启容器
docker restart logstash
以映射配置文件的方式启动
# 1.创建存放配置文件的文件夹
sudo mkdir -p /docker/logstash/config/
# 2.创建配置文件(复制以下全部内容至命令行中)
sudo tee /docker/logstash/config/logstash.yml <<-'EOF'
# 输入端
input {
#输入logstash时控制台打印
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
}
}
#输出端
output {
stdout {
codec => rubydebug
}
elasticsearch {
#hosts中的地址应该写同一network下的容器名称
hosts => ["http://elasticsearch:9200"]
# 输出至elasticsearch中的自定义index名称
index => "flow-%{+YYYY.MM.dd}"
#user => "elastic"
#password => "changeme"
}
}
EOF
# 3.启动容器
docker run -d --name logstash \
-p 5043:5043 -p 5044:5044 \
--network elastic \
--privileged=true \
-v /docker/logstash/config/:/usr/share/logstash/pipeline/ \
logstash:7.6.0
# 4.待容器启动完成,进入容器中
docker exec -it logstash /bin/bash
# 5.为logstash安装json_lines插件
/usr/share/logstash/bin/logstash-plugin install logstash-codec-json_lines
# 6. 成功安装插件之后,退出容器
exit
# 7.重启容器
docker restart logstash
docker ps -a查看到并未启动成功,没有端口号
启动后的logstash日志
docker logs -f logstash
可能会报错
docker安装并启动logstash时内存不足
别惊慌别害怕
解决方法
修改jvm.options文件配置
首先查找jvm.options文件位置(每个服务器的位置可能不同)
find / -name jvm.options
修改内存
找到-Xms Xmx属性,修改成512m(我的默认为1g)
es的也改了
我的做法是把es的都是512m logstash是1024m
因为我logstash改成512后安装logstash-codec-json_lines插件给我报内存不足
然后重启容器,我这是所有都重启了
docker start $(docker ps -a -q)
启动参数说明
# logstash 默认会给beats留下一下5044的端口,用作beats的日志收集
# 再开放一个5043端口,用作tcp的日志收集端口
-p 5043:5043 -p 5044:5044
# 获取宿主机文件操作权限,有此权限才能进行文件映射
--privileged=true
# /usr/share/logstash/pipeline/ 此路径是容器的配置文件路径,将其管道的配置
# 文件目录映射出来,方便自己添加自己的日志输入输出配置
-v /docker/logstash/config/:/usr/share/logstash/pipeline/
# 将启动后的容器加入elastic网段中,在同一网段中,容器互通只需要通过容器名称即可
--network elastic
然后就是springboot配置
pom.xml
<!-- logback -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>5.2</version>
</dependency>
在resourse目录下新建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>49.235.205.253:5043</destination>
<!-- encoder is required -->
<encoder 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>
写一个controller
/**
* @author
*/
@Api(tags = "用户模块")
@RestController
public class UserController {
private final static Logger logger= LoggerFactory.getLogger(UserServiceImpl.class);
@Resource
private UserService userService;
@ApiOperation("登录接口")
@PostMapping("login")
private ResultModel list(@RequestBody UserReqVo request){
logger.info("登录校验开始 "+System.currentTimeMillis()+" ,params:{}",request);
UserResVo userResVo = userService.selectUserOne(request);
logger.info("登录校验结束 "+System.currentTimeMillis());
return ResultModel.success(userResVo);
}
}
启动调用
调用
结束
感谢一位老哥,跟着他一路下来解决了很多问题
老哥博客