elk的理论以及相关配置

ELK中各个服务的作用
Elasticsearch:用于存储收集到的日志信息;
Logstash:用于收集日志,SpringBoot应用整合了Logstash以后会把日志发送给Logstash,Logstash再把日志转发给Elasticsearch;
Kibana:通过Web端的可视化界面来查看日志。

ES 可以扩展到上百台的服务器
Es核心概念 数据库查询和搜索不分家,所以说 Es的概念有很多和数据库的概念是差不多的
es不支持事物
索引库 -数据库
类型 -数据表
文档 -行
字段 -列
映射配置 -DDL

基本操作——服务
调用方式:接口调用
我们可以通过postman来模拟请求
SDK就相当于驱动

文档表引入es会生成一个倒排索引表
更快的搜索
通过索引表里面的关键词来定位文档表中的位置

1.elasticsearch
参考资料: http://www.macrozheng.com/#/technology/mall_tiny_elk
修改虚拟内存区域大小,否则会因为过小而无法启动:(这里是256K,可以根据情况自行加)
使用如下命令启动Elasticsearch服务:
1 docker pull elasticsearch:7.6.2
1 sysctl -w vm.max_map_count=262144启动时会发现 /usr/share/elasticsearch/data 目录没有访问权限,只需要修
改 /mydata/elasticsearch/data 目录的权限,再重新启动即可;
安装中文分词器IKAnalyzer,并重新启动:
开启防火墙:
之后访问es : http://192.168.73.133:9200
2.kibana
使用如下命令启动Kibana服务:
启动防火墙
等待一分钟后,访问 http://192.168.73.133:5601
docker run -p 9200:9200 -p 9300:9300 --name elasticsearch \
-e “discovery.type=single-node” \
-e “cluster.name=elasticsearch” \
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
-d elasticsearch:7.6.2
chmod 777 /mydata/elasticsearch/data/
docker restart elasticsearch
docker exec -it elasticsearch /bin/bash
#此命令需要在容器中运行
elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-
ik/releases/download/v7.6.2/elasticsearch-analysis-ik-7.6.2.zip
docker restart elasticsearch
firewall-cmd --zone=public --add-port=9200/tcp --permanent
firewall-cmd --reload
1docker pull kibana:7.6.2
docker run --name kibana -p 5601:5601 \
–link elasticsearch:es \
-e “elasticsearch.hosts=http://es:9200” \
-d kibana:7.6.2
firewall-cmd --zone=public --add-port=9200/tcp --permanent
firewall-cmd --reload
1
22.3 logstash
创建 /mydata/logstash/config 目录,并进入该目录
创建配置文件:logstash.conf
按 i 键 进入编辑,进行配置
docker pull logstash:7.6.2
mkdir /mydata/logstash/config
cd /mydata/logstash/config
vim logstash.conf
input {
file{
path => [ “/var/logs//*-debug.log" ]
codec=>json
start_position => “beginning”
type => “debug”
}
file{
path => [ "/var/logs/
/-error.log" ]
codec=>json
start_position => “beginning”
type => “error”
}
file{
path => [ "/var/logs/**/
-record.log” ]
codec=>json
start_position => “beginning”
type => “record”
}
}
filter {
date{
match => [ “print_time” , “ISO8601” ]
target => “@timestamp”
}
mutate{
remove_field =>
["@version",“print_time”,“fields”,“host”,“log”,“prospector”,“tags”]
}
if [type] == “record” {
json {
source => “message”
remove_field => [“message”]
}
}
}
编辑好后,按下 esc , 之后 按下 shift + : ,输入wq保存退出。
之后启动容器:
微服务相关配置
各个微服务的日志配置 yaml:(生产环境)
在微服务公共模块中,导入logstash 依赖,配置logback-spring.xml文件

3.logstash收集日志
首先它可以用不同的方式收集日志(input插件),比如:标准输入(exec等,就是监听控制台)、文件读取(file)、tcp数据等等,另外也可以配置后直接从某些典型的服务读取,如redis,mysql。
说白了就是三种:控制台接收,日志文件读取,网络传输(需要另外的机子搭logstash微服务)
这里我们自然是用日志文件读取较优,
1 是服务基本都会会留下日志文件,不会有公司不留日志文件只看控制台输出吧= =。基本可以排除标准输入方式。
2 是配置也更方便,springboot整合一下logstash,配置 logback-spring.xml 文件就行了(项目的
common模块已经配置好了,稍作调整就好);不过如果多台机子,另外搭logstash微服务倒是有点麻烦,这算一点缺点吧。
3 是另外在本机搭建logstash微服务,只需要本地读取相关的日志文件即可,另外找机子搭个日志收集
微服务也比较浪费,自然还是直接本机部署好点。
当然也有劣势,首先是日志服务崩的情况,这种能想到的有两种情况,被攻击或者资源不够了,不过重启服务依然还是能正常运行的,日志文件摆在那,logstash依然会重新查日志的。
其次节点挂了(整台服务器崩了)日志服务同样会没有,不过这种情况很少,并且依然有日志文件,重启一下服务器依然是能继续正常运行的。
然后是资源占用问题,内存占用的话就是需要另外的logstash微服务吧,日志文件肯定是要有的,所以
暂且忽略;总的来说不算太多。网络的话传日志给其它机子也是传,直接发给本机的logstash,在传给es大致也是一样的效果,数据略有差异而已。
3.2 logstash过滤日志
然后它可以过滤数据(filter),把日志文件的数据添加上时间什么的,或者对特定类型的数据文件收集: filter {
date{
match => [ “print_time” , “ISO8601” ]
target => “@timestamp”
}
mutate{
remove_field =>
["@version",“print_time”,“fields”,“host”,“log”,“prospector”,“tags”]
}
#判定type,在input
if [type] =“record” {
json {
source => “message”
remove_field => [“message”]
}
}
}
3.3 logstash输出日志
连接es输出就好。
input {
file{
#日志文件位置
path => [ “/var/logs/**/*-debug.log” ]
#可以配置读取日志文件的格式,默认的话是直接文本内容读取,这里可以直接读取json格式数

codec=>json
#监听文件的方式,默认是end,就是从文件末尾读取,也就是说只会读取新加进来的数据;
#而beginning从文件头部开始监听,某行发生了变更都会读取到。
#一般来说end就够用了,不过beginning更好,服务崩了重启依然有效,能确保日志文件无误。
start_position => “beginning”
#指定日志类型,可自定义,用于后续的filter和output
type => “debug”
}
}
filter {
date{
match => [ “print_time” , “ISO8601” ]
target => “@timestamp”
}
mutate{
remove_field =>
["@version",“print_time”,“fields”,“host”,“log”,“prospector”,“tags”]
}
#判定type,在input
if [type] == “record” {
json {
source => “message”
remove_field => [“message”]
}
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值