1、环境准备
jdk | 1.8 |
docker | Docker version 20.10.9, build c2ea9bc |
elasticsearch | 7.12.1 |
kibana | 7.12.1 |
logstash | 7.12.1 |
部署模式:docker + 单机
2、下载镜像
docker pull elasticsearch:7.12.1
docker pull logstash:7.12.1
docker pull kibana:7.12.1
3、安装
3.1 安装es
# 创建一个docker 网络环境,名为elk
docker network create elk
# 运行es容器
docker run -d --name es --net elk -P -e "discovery.type=single-node" elasticsearch:7.12.1
# 宿主机创建es目录
mkdir es
chmod 666 es
# 进入es目录
cd es
# 查看当前目录
/root/work/es
# 将es容器中的配置文件复制到es目录中
docker cp es:/usr/share/elasticsearch/config/elasticsearch.yml /root/work/es/elasticsearch.yml
# 在es目录中创建data目录
mkdir data
# 准备工作已完成,删除临时创建的es容器
docker rm -f es
# 运行新的容器
docker run -d --name es \
--net elk \
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
--privileged=true \
-v $PWD/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v $PWD/data/:/usr/share/elasticsearch/data \
elasticsearch:7.12.1
验证安装是否成功
[root@localhost es]# curl 127.0.0.1:9200
{
"name" : "57df77848d46",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "mYN2JAk_RGqn58QcPho3Pw",
"version" : {
"number" : "7.12.1",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "3186837139b9c6b6d23c3200870651f10d3343b7",
"build_date" : "2021-04-20T20:56:39.040728659Z",
"build_snapshot" : false,
"lucene_version" : "8.8.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
3.2 安装kibana
# 启动 kibana 容器并连接同一网络
docker run -d --name kibana --net elk -P -e "ELASTICSEARCH_HOSTS=http://es:9200" -e "I18N_LOCALE=zh-CN" kibana:7.12.1
cd /root/work
mkdir kibana
docker cp kibana:/usr/share/kibana/config/kibana.yml kibana/
chmod 666 kibana/kibana.yml
修改配置文件
server.name: kibana
server.host: "0"
elasticsearch.hosts: [ "http://192.168.2.6:9200" ]
monitoring.ui.container.elasticsearch.enabled: true
# 开启 kibana 的汉化
i18n.locale: zh-CN
重新启动
docker rm -f kibana
docker run -d --name kibana \
-p 5601:5601 \
-v $PWD/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml \
--net elk \
kibana:7.12.1
访问kibana,通过ip:5601 可访问kibana,如图
3.3 安装logstash
docker run -d -P --name logstash --net elk logstash:7.12.1
mkdir logstash
# 拷贝数据
docker cp logstash:/usr/share/logstash/config logstash/
docker cp logstash:/usr/share/logstash/data logstash/
docker cp logstash:/usr/share/logstash/pipeline logstash/
#文件夹赋权
chmod -R 777 logstash/
修改logstash相关配置文件
- 修改 logstash/config 下的 logstash.yml 文件,主要修改 es 的地址
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://192.168.2.6:9200" ]
- 修改 logstash/pipeline 下的 logstash.conf 文件
input {
tcp {
mode => "server"
host => "0.0.0.0" # 允许任意主机发送日志
port => 5044
codec => json_lines # 数据格式
}
}
output {
elasticsearch {
hosts => ["http://192.168.2.6:9200"] # ElasticSearch 的地址和端口
index => "elk" # 指定索引名
codec => "json"
}
stdout {
codec => rubydebug
}
}
重新启动容器
#注意先删除之前的容器
docker rm -f logstash
# 启动容器并挂载
docker run -d --name logstash --net elk \
--privileged=true \
-p 5044:5044 -p 9600:9600 \
-v $PWD/logstash/data/:/usr/share/logstash/data \
-v $PWD/logstash/config/:/usr/share/logstash/config \
-v $PWD/logstash/pipeline/:/usr/share/logstash/pipeline \
logstash:7.12.1
4、springboot验证
logback配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds">
<springProperty scope="context" name="LOGBACK_SERVERS" source="spring.kafka.bootstrap-servers"/>
<!-- 日志存放路径 -->
<property name="log.path" value="/data/awhlogs" />
<!-- 日志输出格式 -->
<property name="log.pattern" value="%d{yyyy-MM-dd:HH:mm:ss.SSS,GMT+08} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>192.168.3.155:5044</destination>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
</appender>
<!-- 系统日志输出 -->
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/info.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>7</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>INFO</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/error.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>7</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>ERROR</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 系统模块日志级别控制 -->
<logger name="com.chinatower" level="info" />
<logger name="druid.sql.ResultSet" level="info" />
<!-- Spring日志级别控制 -->
<logger name="org.springframework" level="info" />
<root level="debug">
<appender-ref ref="console" />
<appender-ref ref="LOGSTASH"/>
</root>
<!--系统操作日志-->
<root level="debug">
<appender-ref ref="file_info" />
<appender-ref ref="file_error" />
<appender-ref ref="LOGSTASH"/>
</root>
</configuration>
pom
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>6.6</version>
</dependency>
kibana配置索引
kibana查看数据
docker run -d --name kafka-server \
--network app-tier \
-p 9092:9092 \
-e ALLOW_PLAINTEXT_LISTENER=yes \
-e KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper-server:2181 \
-e KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://192.168.3.155:9092 \
bitnami/kafka:latest