ELK简单讲解
简介:
elk(Elasticsearch、Logstash、Kibana)
ELK 其实并不是一款软件,而是一整套解决方案,是三个软件产品的首字母缩写
-
Elasticsearch:负责日志检索和储存
-
Logstash:负责日志的收集和分析、处理
-
Kibana:负责日志的可视化
这三款软件都是开源软件,通常是配合使用,而且又先后归于 Elastic.co 公司名下,故被简称为 ELK
1.1 基础日志平台的背景
为什么要用elk??
日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。
通常,日志被分散的储存不同的设备上,如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志,影响效率。
最简单的基础架构:

其中ElasticSearch 是三台服务器构成的集群,其中:
-
ElasticSearch做倒排索引,概念有
-
索引:索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。
-
切片 :当有大量的文档时,由于内存的限制、磁盘处理能力不足、无法足够快的响应客户端的请求等,一个节点可能不够,会把分片分到不同服务器上,ES会把查询发送给每个相关的分片,并将结果组合在一起,这个对我们来说是透明的。
-
副本 :副本就这这个分片的备胎,当某个分片损坏,可以用副本来恢复,副本份数越多搜索越快。
-
Logstash跑在每个服务器上,各种日志通过Logstash搜集,Grok,Geoip等插件进行处理然后统一送到ElasticSearch的集群。
-
Kibana做图形化的展示。
这种elk架构比较简单,也存在一些问题:
1、Logstash依赖Java虚拟机占用系统的内存和CPU都比较大,
2、Logstash在数据量较大的时候容易导致其他业务应用程序崩溃,影响业务正常使用
3、随着时间的积累,es空间不能满足现状
4、ElasticSearch 主节点也是数据节点,导致有时候查询较慢
简单部署:
2.docker安装elk
创建虚拟网络类似vlan 同一个网段通信
docker network create elk-net
docker pull elasticsearch:7.12.1 mkdir -p /root/mydata/elasticsearch/config mkdir -p /root/mydata/elasticsearch/data mkdir -p /root/mydata/elasticsearch/plugins chmod -R 777 /root/mydata/elasticsearch/ docker run -d \ --name es \ --restart=always \ -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \ -e "discovery.type=single-node" \ -v /root/mydata/elasticsearch/data:/usr/share/elasticsearch/data \ -v /root/mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \ --privileged \ --network elk-net \ -p 9200:9200 \ -p 9300:9300 \ elasticsearch:7.12.1
命令解释: -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 /root/mydata/elasticsearch/data:/usr/share/elasticsearch/data:挂载逻辑卷,绑定es的数据目录 -v /root/mydata/elasticsearch/logs:/usr/share/elasticsearch/logs:挂载逻辑卷,绑定es的日志目录 -v /root/mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins:挂载逻辑卷,绑定es的插件目录 --privileged:授予逻辑卷访问权 --network elk-net :加入一个名为es-net的网络中 -p 9200:9200:端口映射配置
在浏览器中输入:http://192.168.214.128:9200 (按照自己的ip访问)即可看到elasticsearch的响应结果:

docker pull kibana:7.12.1 docker run -d \ --name kibana \ --restart=always \ -e ELASTICSEARCH_HOSTS=http://es:9200 \ -e "I18N_LOCALE=zh-CN" \ --network=elk-net \ -p 5601:5601 \ kibana:7.12.1
--network elk-net :加入一个名为es-net的网络中,与elasticsearch在同一个网络中 -e ELASTICSEARCH_HOSTS=http://es:9200":设置elasticsearch的地址,因为kibana已经与elasticsearch在一个网络,因此可以用容器名直接访问elasticsearch -p 5601:5601:端口映射配置
此时,在浏览器输入地址访问:http://192.168.214.128:5601 (按照自己的ip访问),即可看到结果

docker pull logstash:7.12.1 docker run -d -p 5044:5044 -p 9600:9600 --name logstash --network=elk-net logstash:7.12.1
创建完容器之后,需要在容器修改一些配置
docker exec -it logstash /bin/bash
修改里面的内容,设置es服务的地址,如下
vim logstash.yml
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://es:9200" ]
vim /pipeline/logstash.conf
bash-4.2$ cat pipeline/logstash.conf
input {
file {
path => "/var/log/suricata/eve.json"
codec => "json"
# type => "SuricataAlert"
}
}
grok { match =>
{ "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp}
%{SYSLOGHOST:syslog_hostname}
%{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?:
%{GREEDYDATA:syslog_message}" } }
output { elasticsearch { hosts => ["http://es:9200"] index => "securl-%{+YYYY.MM.dd}" codec => "json" } }
配置完毕后重启logstash
docker restart logstash
以上是最简单的elk操作
应用场景的高并发架构

浙公网安备 33010602011771号