1、环境准备
服务器:Centos7
Jdk版本:1.8
Es版本:7.12.1
kibana版本:7.12.1
logstash版本:7.12.1
IP地址 | 安装软件 |
---|---|
192.168.50.211 | Es,Kibana,logstash |
2、安装docker
安装步骤参考:https://blog.csdn.net/weixin_38405770/article/details/87979242
3、安装es
shell
# 创建容器网络 elk-net
docker network create elk-net
# docker 安装 es
docker run -d \
--name es \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
-e "discovery.type=single-node" \
-v es-data:/usr/share/elasticsearch/data \
-v es-plugins:/usr/share/elasticsearch/plugins \
--privileged \
--network elk-net \
-p 9200:9200 \
-p 9300:9300 \
elasticsearch:7.12.1
# 开通端口
sudo iptables -A INPUT -p tcp --dport 9200 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 9300 -j ACCEPT
命令解释:
shell
-e "cluster.name=es-docker-cluster":设置集群名称
-e "http.host=0.0.0.0":监听的地址,可以外网访问
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m":内存大小
-e "discovery.type=single-node":非集群模式
-v es-data:/usr/share/elasticsearch/data:挂载逻辑卷,绑定es的数据目录
-v es-logs:/usr/share/elasticsearch/logs:挂载逻辑卷,绑定es的日志目录
-v es-plugins:/usr/share/elasticsearch/plugins:挂载逻辑卷,绑定es的插件目录
--privileged:授予逻辑卷访问权
--network elk-net :加入一个名为es-net的网络中
-p 9200:9200:端口映射配置
在浏览器中输入:http://192.168.50.211:9200 (按照自己的ip访问)即可看到elasticsearch的响应结果:
4、安装kibana
shell
# docker 安装 kibana
docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
-e "I18N_LOCALE=zh-CN" \
--network=elk-net \
-p 5601:5601 \
kibana:7.12.1
# 开通端口
sudo iptables -A INPUT -p tcp --dport 5601 -j ACCEPT
shell
--network elk-net :加入一个名为es-net的网络中,与elasticsearch在同一个网络中
-e ELASTICSEARCH_HOSTS=http://es:9200":设置elasticsearch的地址,因为kibana已经与elasticsearch在一个网络,因此可以用容器名直接访问elasticsearch
-p 5601:5601:端口映射配置
在浏览器中输入:http://192.168.50.211:5601 (按照自己的ip访问)即可看到安装成功的结果:
5、安装Logstash
5.1 安装Logstash
shell
# docker 安装 Logstash
docker run -d \
-p 5044:5044 -p 5045:5045 -p 9600:9600 \
--name logstash --network=elk-net logstash:7.12.1
# 开通端口
sudo iptables -A INPUT -p tcp --dport 5044 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 5045 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 9600 -j ACCEPT
shell
-p 5044:5044 -p 5045:5045 # 为演示多管道开通的两个端口
5.2 设置ES的地址
创建完容器之后,需要在容器修改一些配置
shell
#进入容器
docker exec -it logstash /bin/bash
找到config目录中的logstatsh.yml文件
修改里面的内容,设置es服务的地址,如下
yaml
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://192.168.50.211:9200" ] #设置跟es的服务地址
5.3 设置logstash收集日志的输入和输出
shell
#进入容器
docker exec -it logstash /bin/bash
在pipline目录中创建两个文件 logstash-demo.conf,logstash-test.conf
logstash-demo.conf 内容如下:
yaml
input {
tcp {
mode => "server"
host => "0.0.0.0" # 允许任意主机发送日志
port => 5044
codec => json_lines # 数据格式
}
}
output {
elasticsearch {
hosts => ["http://192.168.50.211:9200"] # ElasticSearch 的地址和端口
index => "demo" # 指定索引名,可以根据自己的需求指定命名
codec => "json"
}
stdout {
codec => rubydebug
}
}
logstash-test.conf 内容如下:
yaml
input {
tcp {
mode => "server"
host => "0.0.0.0" # 允许任意主机发送日志
port => 5045
codec => json_lines # 数据格式
}
}
output {
elasticsearch {
hosts => ["http://192.168.50.211:9200"] # ElasticSearch 的地址和端口
index => "test" # 指定索引名,可以根据自己的需求指定命名
codec => "json"
}
stdout {
codec => rubydebug
}
}
5.4 配置管道 pipline
shell
#进入容器
docker exec -it logstash /bin/bash
进入config目录下找到 pipline.yml 配置文件
修改为如下配置:
yaml
- pipeline.id: demo
path.config: "/usr/share/logstash/pipeline/logstash-demo.conf"
- pipeline.id: test
path.config: "/usr/share/logstash/pipeline/logstash-test.conf"
配置两个pipline只想不通的配置文件,我们记住 demo 端口为 5044; test 端口为 5045
6、应用系统对接logstash
创建两个springboot应用
加入如下依赖:
xml
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>6.6</version>
</dependency>
配置 logback-spring.xml 该配置应于 application.yml 同级
注意:这里需要注意下一下 logstash的服务地址和端口!!!
demo 应配置为:192.168.200.211:5044
test 应配置为:192.168.200.211:5045
shell
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml" />
<springProperty scope="context" name="springAppName" source="spring.application.name"/>
<springProperty scope="context" name="serverPort" source="server.port"/>
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<!--logstash的服务地址和端口,可以实际情况设置-->
<destination>192.168.200.211:5044</destination>
<!-- 日志输出编码 -->
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
<providers>
<timestamp>
<timeZone>UTC</timeZone>
</timestamp>
<pattern>
<pattern>
{
<!--应用名称 -->
"app": "${springAppName}_${serverPort}",
<!--打印时间 -->
"timestamp": "%d{yyyy-MM-dd HH:mm:ss.SSS}",
<!--线程名称 -->
"thread": "%thread",
<!--日志级别 -->
"level": "%level",
<!--日志名称 -->
"logger_name": "%logger",
<!--日志信息 -->
"message": "%msg",
<!--日志堆栈 -->
"stack_trace": "%exception"
}
</pattern>
</pattern>
</providers>
</encoder>
</appender>
<!--定义日志文件的存储地址,使用绝对路径-->
<property name="LOG_HOME" value="/home/logs"/>
<!-- 按照每天生成日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<fileNamePattern>${LOG_HOME}/${springAppName}-${serverPort}-%d{yyyy-MM-dd}.log</fileNamePattern>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="LOGSTASH" />
<appender-ref ref="FILE" />
<appender-ref ref="CONSOLE" />
</root>
</configuration>
在application.yml文件中设置logback配置的目录
yaml
logging:
config: classpath:logback-spring.xml
分别编写一个定时任务,产生日志数据
java
package com.example.demo.task;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
/**
* 测试定时任务
*/
@Slf4j
@Component
public class TestTask {
// 这个变量 如果在 demo 中 值为 demo ;如果在 test 中 值为 test 用来标记日志来源!
private static final String APP = "demo";
@Scheduled(cron = "0/5 * * * * ?")
public void runTask() {
log.info("{} 中定时任务 runTask 方法 执行了", APP);
}
}
在启动类中开启Scheduled
java
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
分别启动两个应用,记住启动端口要改一下,不然端口占用起不来!!!
7、ELK基本使用
7.1 查看索引文件
对接项目之后,可以启动项目,产生一些日志数据
然后打开kibana 地址为:http://192.168.50.211:5601/ 根据实际情况修改地址,找到索引管理
可以查看已创建的日志索引
7.2 添加索引模式
如果想用kibana方便的查看日志的数据,可以添加索引模式,如下图:
输入索引名称然后点击下一步
选择时间字段后点击创建索引模式即可
test 应用创建索引模式同上,动手练一下吧。
7.3 检索日志
打开Discover
在筛选这里选择demo应用
可以看到有日志输出
切换到test应用查看
可以看到日志都正常输出了。
至此,elk简单的多pipiline就搭建并应用完成了。