111111

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
es安装

 

命令解释:

-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
docker安装kibana
--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安装logstash
创建完容器之后,需要在容器修改一些配置
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操作

 

 

应用场景的高并发架构

 

posted @ 2025-04-29 17:11  赵SIR  阅读(116)  评论(0)    收藏  举报