前言
本篇为elasticseach系列片第一章,大家一起先把es的环境搭建起来,有需要elk整合方式的见文章最后部分(注:本篇整合elk为简单版本,没有对后续大规模日志输出带来性能压力的处理,适用于自学或开发测试阶段)
搭建es集群
1.准备好es的宿主机上的映射路径赋予最高权限
准备三台机器,本篇所涉及192.168.182.242,192.168.182.243,192.168.182.231为三台虚拟机,内存为16g,涉及es启动命令的内存设置可根据自身机器做调整
mkdir /opt/es
cd /opt/es
mkdir data config plugins #data:存放数据的目录 config:存放配置文件的目录 plugins:存放插件的目录
chmod 777 -R /opt/es #递归式赋权
2.编写elasticsearch.yml
cluster.name: nssa_elasticsearch
node.name: es243
network.bind_host: 0.0.0.0
network.publish_host: 192.168.182.243
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
discovery.seed_hosts: ["192.168.182.242:9300","192.168.182.243:9300","192.168.182.231:9300"]
cluster.initial_master_nodes: ["192.168.182.242:9300","192.168.182.243:9300","192.168.182.231:9300"]
参数 | 说明 |
---|---|
cluster.name | 集群名称,相同名称为一个集群 |
node.name | 节点名称,集群模式下每个节点名称唯一 |
node.master | 当前节点是否可以被选举为master节点,是:true、否:false |
node.data | 当前节点是否用于存储数据,是:true、否:false |
path.data | 索引数据存放的位置 |
path.logs | 日志文件存放的位置 |
bootstrap.memory_lock | 需求锁住物理内存,是:true、否:false |
bootstrap.system_call_filter | SecComp检测,是:true、否:false |
network.host | 监听地址,用于访问该es |
network.publish_host | 可设置成内网ip,用于集群内各机器间通信 |
http.port | es对外提供的http端口,默认 9200 |
discovery.seed_hosts | es7.x 之后新增的配置,写入候选主节点的设备地址,在开启服务后可以被选为主节点 |
cluster.initial_master_nodes | es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master |
http.cors.enabled | 是否支持跨域,是:true,在使用head插件时需要此配置 |
http.cors.allow-origin | “*” 表示支持所有域名 |
启动命令:
docker run -d --name es01 -p 9200:9200 -p 9300:9300 \
-e ES_JAVA_OPTS="-Xms4g -Xmx4g" \
-v /opt/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /opt/es/data:/usr/share/elasticsearch/data \
-v /opt/es/plugins:/usr/share/elasticsearch/plugins \
--restart=always elasticsearch:7.4.2
在每台机器上分别执行以上步骤: 注意配置yml文件时记得修改 publish_host 和 nodename
启动kibana
(如果有目录需要映射,那么启动命令记得加上映射路径)
docker run --name kibana -e ELASTICSEARCH_HOSTS=http://192.168.182.243:9200 -p 5601:5601 -d kibana:7.4.2
elk整合
配置文件 (新建文件 /xxx/logstash.conf )
input {
tcp {
mode => "server"
host => "0.0.0.0"
# 定义logstash的端口
port => 5000
codec => json_lines
}
}
output {
elasticsearch {
# 输出到es的地址
hosts => ["192.168.182.243:9200"]
action => "index"
# 索引名称
index => "dscnlog-%{+YYYY.MM.dd}"
}
stdout {
codec => rubydebug
}
}
启动命令
docker run --name logstash -p 5000:5000 \
-v /data/logstash/logstash.conf:/etc/logstash.conf \
--link es01:elasticsearch \
-d logstash:7.4.2 \
logstash -f /etc/logstash.conf
微服务
pom添加依赖
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>5.2</version>
</dependency>
创建logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="true" scanPeriod="1 seconds">
<springProperty scope="context" name="applicationName" source="spring.application.name" defaultValue=""/>
<include resource="org/springframework/boot/logging/logback/base.xml" />
<appender name="stash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<!-- logstash的host:port -->
<destination>192.168.182.243:5000</destination>
<!-- encoder-->
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" />
</appender>
<!-- 日志输出级别 -->
<root level="info">
<appender-ref ref="stash" />
</root>
</configuration>
在kibana中创建index patterns(索引模式)
创建索引模式成功(index Patterns)后,便可以在Discover中检索微服务的日志了