环境信息
Centos 7
docker 20.10.18
elasticsearch:7.17.4
kibana:7.17.4
logstash:7.17.4
elasticsearch安装
- 拉取镜像
docker pull elasticsearch:7.17.4
- 创建映射目录(方便将对应的文件映射)
mkdir -p /mydata/elasticsearch/config
mkdir -p /mydata/elasticsearch/data/
mkdir -p /mydata/elasticsearch/plugins
- 写入配置信息elasticsearch.yml
vim /mydata/elasticsearch/config/elasticsearch.yml
- 配置elasticsearch.yml
#写入配置信息
vim /mydata/elasticsearch/config/elasticsearch.yml
http.host: 0.0.0.0
http.cors.enabled: true
http.cors.allow-origin: "*"
#忽略安全认证
xpack.security.enabled: false
#给映射目录赋权限
chmod -R 777 /mydata/elasticsearch
- 启动docker 容器
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mydata/elasticsearch/data/:/usr/share/elasticsearch/data \
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.17.4
docker安装kibana
- 拉取镜像
docker pull docker.elastic.co/kibana/kibana:7.17.4
- 启动镜像
docker run -d --name kibana -p 5601:5601 -e "ELASTICSEARCH_HOSTS=http://192.168.1.122:9200" docker.elastic.co/kibana/kibana:7.17.4
注意:需要将ELASTICSEARCH_HOSTS对应的ip地址改成你自己的es的ip
docker安装head插件
如果有谷歌插件的就不需要安装了
docker pull mobz/elasticsearch-head:5
docker run --restart=always --name elasticsearch-head -di -p 9100:9100 docker.io/mobz/elasticsearch-head:5
docker安装 logstash
- 安装logstash时,需要先启动一下logstash,然后将对应的目录拷贝出来,拷贝出来后我们再将对应的容器删除后,再重新启动,并将对应的目录映射出来
#拉取镜像
docker pull logstash:7.17.4
#启动镜像
docker run -d --name=logstash logstash:7.17.4
#查看日志是否启动成功
docker logs -f logstash
#复制文件到本地
docker cp logstash:/usr/share/logstash /mydata/logstash/
#创建文件夹
mkdir /mydata/logstash/config/conf.d
#修改文件夹权限
chmod 777 -R /mydata/logstash
- vim /mydata/logstash/config/logstash.yml配置
http.host: "0.0.0.0"
#根据实际修改es的ip:port
xpack.monitoring.elasticsearch.hosts: [ "http://192.168.1.122:9200" ]
## 主管道的Logstash配置路径,如果指定目录或通配符,配置文件将按字母顺序从目录中读取
path.config: /usr/share/logstash/config/conf.d/*.conf
##Logstash将其日志写到的目录
path.logs: /usr/share/logstash/logs
- 配置输入输出vim /mydata/logstash/config/conf.d/test.conf
input {
tcp {
port => 5044
#输入json格式
codec => json_lines
}
}
output {
elasticsearch {
hosts => ["http://192.168.1.122:9200"]
index => "%{[server_name]}-log-%{+YYYY.MM.dd}"
#user => "elastic"
#password => "changeme"
}
}
- 删除容器后重新启动容器
#删除容器
docker rm -f logstash
#重新映射目录启动docker镜像
docker run -d --name=logstash -p 5044:5044 -v /mydata/logstash:/usr/share/logstash logstash:7.17.4
#有需要再 安装logstash插件 不是必须安装
logstash-plugin install logstash-filter-multiline
项目配置
- 新建spring boot项目引入logstash对应的依赖
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>4.9</version>
</dependency>
- logback-spring.xml 配置
<?xml version="1.0" encoding="UTF-8"?>
<!-- 从高到地低 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 TRACE 、 ALL -->
<!-- 日志输出规则 根据当前ROOT 级别,日志输出时,级别高于root默认的级别时 会输出 -->
<!-- 以下 每个配置的 filter 是过滤掉输出文件里面,会出现高级别文件,依然出现低级别的日志信息,通过filter 过滤只记录本级别的日志-->
<!-- 属性描述 scan:性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位, 默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration debug="false" scanPeriod="60 seconds" scan="true">
<!-- 定义日志文件 输入位置 -->
<property value="./test_log/" name="logPath"/>
<!-- 日志最大的历史 30天 -->
<property value="30" name="maxHistory"/>
<!-- 配置项, 通过此节点配置日志输出位置(控制台、文件、数据库)、输出格式等-->
<!-- ConsoleAppender代表输出到控制台 -->
<appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
<!-- layout代表输出格式 -->
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger -%msg%n</pattern>
</layout>
</appender>
<!-- 日志输出文件 -->
<appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger -%msg%n</pattern>
</encoder>
<!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 RollingFileAppender-->
<!-- 滚动策略,它根据时间来制定滚动策略.既负责滚动也负责触发滚动 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 输出路径 -->
<fileNamePattern>${logPath}/info/es-demo-%d.log</fileNamePattern>
<!-- 可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件假设设置每个月滚动,且<maxHistory>是6,则只保存最近6个月的文件,删除之前的旧文件。注意,删除旧文件是,那些为了归档而创建的目录也会被删除-->
<maxHistory>${maxHistory}</maxHistory>
</rollingPolicy>
<!-- 按照固定窗口模式生成日志文件,当文件大于20MB时,生成新的日志文件。窗口大小是1到3,当保存了3个归档文件后,将覆盖最早的日志。 <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"><fileNamePattern>${logPath}/%d{yyyy-MM-dd}/.log.zip</fileNamePattern><minIndex>1</minIndex><maxIndex>3</maxIndex></rollingPolicy> -->
<!-- 查看当前活动文件的大小,如果超过指定大小会告知RollingFileAppender 触发当前活动文件滚动 <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"><maxFileSize>5MB</maxFileSize></triggeringPolicy> -->
</appender>
<!-- 特殊记录Error日志 -->
<appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 只记录ERROR级别日志,添加范围过滤,可以将该类型的日志特殊记录到某个位置 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger -%msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${logPath}/error/%d.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
</appender>
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>192.168.1.122:5044</destination>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" >
<customFields>{"server_name":"es-demo"}</customFields>
</encoder>
</appender>
<!-- 根节点,表名基本的日志级别,里面可以由多个appender规则 -->
<!-- level="info"代表基础日志级别为info -->
<root level="info">
<!-- 引入控制台输出规则 -->
<appender-ref ref="consoleLog"/>
<appender-ref ref="fileInfoLog"/>
<appender-ref ref="fileErrorLog"/>
<appender-ref ref="LOGSTASH"/>
</root>
</configuration>
- 需要将图片中对应的ip,端口号改成自己logstash对应的ip端口号