ELK是Elasticsearch、Logstash、Kiban
市面上也被成为Elastic Stack (这三个加在一块)
日志分析架构技术栈总称
ElasticsearchElasticsearch是一个基于Lucene、分布式、通过Restful方式进行交互的近实时搜索平台框架。
像类似百度、谷歌这种大数据全文搜索引擎的场景都可以使用Elasticsearch作为底层支持框架,
简称Elasticsearch为es
LogstashLogstash是ELK的中央数据流引擎,用于从不同目标(文件/数据存储/MQ)收集的不同格式数据,经过过滤后支持输出到不同目的地(文件/MQ/redis/elasticsearch/kafka等)
KibanaKibana可以将elasticsearch的数据通过友好的页面展示出来,提供实时分析的功能。
流程通过Logstash去收集每台服务器日志文件,
然后按定义的正则模板过滤后传输到Kafka或redis,
然后由另一个Logstash从KafKa或redis读取日志存储到elasticsearch中创建索引,
最后通过Kibana展示给开发者或运维人员进行分析。
Logstash 收集各种日志,过滤传输到——> Elasticsearch (ES)——>后交给Kinana 分析展示
过滤环节是很耗时间和资源的,过滤完成后才传输到ES中
优化过的流程:
Nginx——>收集——>Logstash——>Kafka
logstash过滤(所有的数据都用这个logstash过滤),传输到——>ES——>展示,分析 ——> Kibana
优化后Kafka作为缓冲存储作用,
运行在数据源的Logstash采集器收集到数据后作为生产者直接传输到Kafka
Kafka它的读写性能是非常高的
我们需要独立部署一个专门消费的Logstash,
这个Logstash负责过滤,并将过滤好的数据传输到ES,
后面依然由Kibana读取ES数据进行展示
这个架构不但性能好,而且耦合低,并且可以针对不同环节进行平行扩展
在新的架构上平行扩展可能演变的架构图:Nginx——>收集——>Logstash——>Kafka
logstash过滤。
另外一条线也是这样,最后各自logstash过滤过的,传给ES
而:ES,和 kibana,也可以有更多的节点。
小白都会超详细–ELK日志管理平台搭建教程https://blog.csdn.net/li123128/article/details/81052374
一、介绍
二、安装JDK
三、安装Elasticsearch
四、安装Logstash
五、安装Kibana
ELK由Elasticsearch、Logstash和Kibana三部分组件组成;
Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
Logstash是一个完全开源的工具,它可以对你的日志进行收集、分析,并将其存储供以后使用
kibana 是一个开源和免费的工具,它可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。
四大组件
Logstash: logstash server端用来搜集日志;
Elasticsearch: 存储各类日志;
Kibana: web化接口用作查寻和可视化日志;
Logstash Forwarder: logstash client端用来通过lumberjack 网络协议发送日志到logstash server;
工作流程
在需要收集日志的所有服务上部署logstash,作为logstash agent(logstash shipper)用于监控并过滤收集日志,
将过滤后的内容发送到Redis,
然后logstash indexer将日志收集在一起交给全文搜索服务ElasticSearch,
可以用ElasticSearch进行自定义搜索通过Kibana 来结合自定义搜索进行页面展示。
Logstash-forwarder(多个)——》logstash——》elasticsearch——》kibana——》nginx
一、 Elasticsearch安装配置阿里源:wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all
yum makecache
Logstash的运行依赖于Java运行环境,Elasticsearch 要求至少 Java 7。
[root@controller ~]# yum install java-1.8.0-openjdk -y
[root@controller ~]# java -version
openjdk version "1.8.0_151"
OpenJDK Runtime Environment (build 1.8.0_151-b12)
OpenJDK 64-Bit Server VM (build 25.151-b12, mixed mode)
1、关闭防火墙
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
2、关闭selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
4)添加自启动
chkconfig --add elasticsearch
5)启动命令
systemctl daemon-reload
systemctl enable elasticsearch.service
防火墙: 关闭
Sellinux: 关闭
JDK 1.8(备注至少是1.8版本的JDK)
https://www.elastic.co/downloads/elasticsearch
sudo chown -R luna elasticsearch-6.1.0/
或者
创建elsearch用户组 及elsearch用户
groupadd elsearch
rch -p elasticsearch
更改elasticsearch文件夹及内部文件的所属用户及组为elsearch:elsearch
cd /opt
chown -R elsearch:elsearch elasticsearch
su elsearch cd elasticsearch/bin
./elasticsearch
1、下载
https://www.elastic.co/downloads/elasticsearch 最新版的在下面找就行
[elk@localhost elasticsearch]$ pwd
/usr/local/src/elasticsearch
[elk@localhost elasticsearch]$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.2.tar.gz
tar -zxvf elasticsearch-6.4.2.tar.gz
在config目录下的elasticsearch.yml文件中你可以设置es服务的端口号以及网络ip等
network.host:0.0.0.0
切换到bin目录下
./elasticsearch
别用root启动,见上面的
问题一:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解决方案:
切换到root用户
编辑 /etc/sysctl.conf,追加以下内容:
vm.max_map_count=655360
保存后,执行:
sysctl -p
问题二:ERROR: bootstrap checks failed
max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]
max number of threads [1024] for user [lishang] likely too low, increase to at least [2048]
解决:切换到root用户,编辑limits.conf 添加类似如下内容
vi /etc/security/limits.conf
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
问题三:max number of threads [1024] for user [lish] likely too low, increase to at least [2048]
解决:切换到root用户,进入limits.d目录下修改配置文件。
vi /etc/security/limits.d/90-nproc.conf
soft nproc 1024 修改为:soft nproc 2048
验证:
curl localhost:9200
二、 Logstash的安装wget https://artifacts.elastic.co/downloads/logstash/logstash-6.4.2.tar.gz
https://artifacts.elastic.co/downloads/logstash 同理,最新版的在下面找就行
尽量迅雷下载
tar -zxvf logstash-6.4.2.tar.gz
在config目录下的logstash.yml我这里也都采用的是默认的,大家可以根据自己的需求自行设
vim logstash.yml
设置tomcat的serer.xml
http://archive.apache.org/dist/tomcat/tomcat-8/v8.5.34/bin/
默认的:
pattern="%h %l %u %t “%r” %s %b"
[elk@localhost conf]$ pwd
/usr/local/src/tomcat/apache-tomcat-8.5.34/conf
[elk@localhost conf]$ vim server.xml
改成:
pattern="%h %l %u %t "%r" %s %b %D "%{Referer}i" "%{User-Agent}i""
创建root-tomcat.conf文件
[elk@localhost logstash-6.4.2]$ pwd
/usr/local/src/elasticsearch/logstash-6.4.2
[elk@localhost logstash-6.4.2]$ vim root-tomcat.conf
input {
file {
path => "/usr/local/src/tomcat/apache-tomcat-8.5.34/logs/localhost_access_log*.txt"
sincedb_path => "/usr/local/src/elasticsearch/logstash-6.4.2/config/sincedb_apache_access_log.txt"
type => "apache_access_log"
add_field => {"tomcatip" => "192.168.1.23改成localhost"}
}
}
filter{
if [type] == "apache_access_log" {
grok{
match => { "message" => "%{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:verb} %{URIPATHPARAM:request}(?: HTTP/%{NUMBER:httpversion})?|-)\" %{NUMBER:response} (?:%{NUMBER:bytes}|-) %{NUMBER:responsetime} \"(?:%{URI:referrer}|-)\" %{QS:agent}" }
}
ruby {
code => "event.timestamp.time.localtime"
}
date{
match => [ "timestamp", "dd/MM/yyyy:HH:mm:ss Z" ]
target => ["writetime"]
}
mutate {
convert => {
"response" => "integer"
"bytes" => "integer"
"responsetime" => "integer"
}
}
}
}
output {
if [type] == "apache_access_log" {
elasticsearch {
hosts => ["192.168.1.23改成localhost:9200"]
index => "logstash-apacheaccesslog-%{+YYYY.MM.dd}"
}
}
}
启动:
[elk@localhost logstash-6.4.2]$ ./bin/logstash -f root-tomcat.conf
三、 安装kibana
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.4.2-linux-x86_64.tar.gz
tar -zxvf kibana-6.4.2-linux-x86_64.tar.gz
cd config/
vim kibana.yml
server.host: "0.0.0.0" 自动检查ip地址,会检查到localhost
./bin/kibana
http://localhost:5601
https://www.jianshu.com/p/3a1f5ea2ce8d