ELK是Elasticsearch+Logstash+Kibana简称
Elasticsearch 是一个分布式的搜索和分析引擎,可以用于全文检索、结构化检索和分析,并能将这三者结合起来。Elasticsearch 基于 Lucene 开发,现在是使用最广的开源搜索引擎之一。
Logstash 简单来说就是一根具备实时数据传输能力的管道,负责将数据信息从管道的输入端传输到管道的输出端,与此同时这根管道还可以让你根据自己的需求在中间加上滤网,Logstash提供了很多功能强大的滤网以满足你的各种应用场景。
Kibana 是一个开源的分析与可视化平台,设计出来用于和Elasticsearch一起使用的。你可以用kibana搜索、查看、交互存放在Elasticsearch索引里的数据,使用各种不同的图标、表格、地图等,kibana能够很轻易的展示高级数据分析与可视化。
编写docker-compose.yml; 安装、运行、汉化ELK
mkdir -p /usr/local/elk/{elasticsearch/data,logstash} #新建目录
1 编写/data/elk/docker-compose.yml
version: '3'
services:
elasticsearch:
image: elasticsearch:7.7.0 #镜像
container_name: elasticsearch #定义容器名称
restart: always #开机启动,失败也会一直重启
environment:
- "cluster.name=elasticsearch" #设置集群名称为elasticsearch
- "discovery.type=single-node" #以单一节点模式启动
- "ES_JAVA_OPTS=-Xms512m -Xmx1024m" #设置使用jvm内存大小
volumes:
- /usr/local/elk/elasticsearch/plugins:/usr/share/elasticsearch/plugins #插件文件挂载
- /usr/local/elk/elasticsearch/data:/usr/share/elasticsearch/data #数据文件挂载
ports:
- 9200:9200
kibana:
image: kibana:7.7.0
container_name: kibana
restart: always
depends_on:
- elasticsearch #kibana在elasticsearch启动之后再启动
environment:
- ELASTICSEARCH_URL=http://elasticsearch:9200 #设置访问elasticsearch的地址
ports:
- 5601:5601
logstash:
image: logstash:7.7.0
container_name: logstash
restart: always
volumes:
- /usr/local/elk/logstash/logstash-springboot.conf:/usr/share/logstash/pipeline/logstash.conf #挂载logstash的配置文件
depends_on:
- elasticsearch #kibana在elasticsearch启动之后再启动
links:
- elasticsearch:es #可以用es这个域名访问elasticsearch服务
ports:
- 4560:4560
2、新建文件;安装、运行ELK
#授权目录
cd /usr/local/elk
chmod 777 elasticsearch/data
#新建logstash/logstash-springboot.conf文件,新增以下内容
input {
tcp {
mode => "server"
#允许所有ip访问4560端口
host => "0.0.0.0"
#映射在4560端口
port => 4560
codec => json_lines
}
}
output {
elasticsearch {
#elasticsearch所在的ip及监听的地址
hosts => "es:9200"
#日志名称配置
index => "springboot-logstash-%{+YYYY.MM.dd}"
}
}
#安装,运行ELK
docker-compose up -d
# 查看是否部署成功
docker ps
另外附上集群项目如何配置
2、如何隔离各输入输出?
利用type,对输入输出进行筛选,配置参考:
log1.conf
input {
file {
type => "log1"
path => "/**/log1.log"
discover_interval => 10 # 监听间隔
start_position => "beginning" #从头开始
}
}
#输出到elasticsearch
output {
if [type] == "log1"{
elasticsearch {
index => "log1-%{+YYYY.MM.dd}"
hosts => "192.168.2.32:9200" #输出到elasticsearch 对应服务器
}
}
}
log2.conf
input {
file {
type => "log2"
path => "/**/log2.log"
discover_interval => 10 # 监听间隔
start_position => "beginning" #从头开始
}
}
#输出到elasticsearch
output {
if [type] == "log2"{
elasticsearch {
index => "log2-%{+YYYY.MM.dd}"
hosts => "192.168.2.32:9200" #输出到elasticsearch 对应服务器
}
}
}
启动成功后logstash中安装json_lines插件
docker exec -it logstash /bin/bash -c "cd /bin && logstash-plugin install logstash-codec-json_lines"
docker restart logstash
汉化kibana
docker exec -it kibana /bin/bash
cd /config
vi kibana.yml
#添加以下命令
i18n.locale: "zh-CN"
SpringBoot集成Logstash
1、在pom.xml中添加logstash-logback-encoder依赖
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>4.11</version>
</dependency>
2、在 resources下 logback.xml文件添加配置,让logback的日志输出到logstash
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>192.168.1.105:4560</destination>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" />
</appender>
<root level="${levelService}">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
<appender-ref ref="LOGSTASH"/>
</root>
3、启动springboot应用,访问http://localhost:5601,创建索引 springboot-logstash-* 这个是根据上面的文件配置创建匹配的
Kibana设置登录密码
kibana默认没有访问的权限控制,如果需要设置访问的账号密码,可以使用nginx配置代理来发布kibana。
在 nginx 下,提供了 ngx_http_auth_basic_module 模块实现让用户只有输入正确的用户名密码才允许访问web内容。默认情况下,nginx 已经安装了该模块。所以整体的一个过程就是先用第三方工具设置用户名、密码(其中密码已经加过密),然后保存到文件中,接着在 nginx 配置文件中根据之前事先保存的文件开启访问验证。
1、安装htpasswd工具
yum -y install httpd-tools
2、设置用户名和密码,并把用户名、密码保存到指定文件中:
htpasswd -c /data/nginx/htpasswd cfw #交互输入密码
3、修改nginx配置文件,并且重启nginx服务
user root; #修改配置文件用户为root
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://192.168.1.105:5601;
auth_basic "Please input password"; #这里是验证时的提示信息
auth_basic_user_file /data/nginx/htpasswd; #生成的密码存放路径
}
}
systemctl restart nginx.service
4、访问需要输入登录账号、密码
5、(补充)htpasswd 其他参数
命令格式:
htpasswd [-cmdpsD] [passwdfile] [username]
htpasswd -b[cmdpsD] [passwdfile] [username] [password]
htpasswd -n[mdps] username
htpasswd -nb[mdps] username password
参数说明:
-c 创建一个加密文件
-n 不更新加密文件,只将htpasswd命令加密后的用户名密码显示在屏幕上
-m 默认htpassswd命令采用MD5算法对密码进行加密
-d htpassswd命令采用CRYPT算法对密码进行加密
-p htpassswd命令不对密码进行进行加密,即明文密码
-s htpassswd命令采用SHA算法对密码进行加密
-b htpassswd命令行中一并输入用户名和密码而不是根据提示输入密码
-D 删除指定的用户
新增用户role02
htpasswd -b [passwdfile] [username] [passwd]
htpasswd -b /data/nginx/htpasswd role02 123456
内容稍作修改,转载链接:https://www.jianshu.com/p/17567e89733f
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)