ELK简介:
ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。
Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。
Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。
Filebeat隶属于Beats。目前Beats包含四种工具:
-
- Packetbeat(搜集网络流量数据)
- Topbeat(搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据)
- Filebeat(搜集文件数据)
- Winlogbeat(搜集 Windows 事件日志数据)
本人小白,自己搭建ELK测试玩,以下为自身操作分享,欢迎各位查看指正,大神勿喷。
部署环境:
操作系统:Centos7.6
系统资源:双核4G
192.168.0.223(服务端):elasticsearch;kibana;filebeat
192.168.0.226(客户端):filebeat
安装前准备:
logstash 和filebeat都具有日志收集功能,filebeat更轻量,占用资源更少;
logstash是jvm跑的,资源消耗比较大,但logstash 具有filter功能,能过滤分析日志。
本文试验采用占用资源更小的filebeat来进行日志收集功能。
首先去ELK的官网上将ELK部署需要的rpm包文件,下载到本地,方便以下安装。
最好下载同一个版本的rpm包文件,否则安装配置的过程中可能会出现问题。
安装JDK
因为elasticsearch需要JDK环境,所以需要提前安装好JDK环境。安装JDK的步骤在此不做过多介绍。
安装elasticsearch
rpm --import GPG-KEY-elasticsearch
rpm -ivh elasticsearch-7.9.2-x86_64.rpm
安装ES后,进入ES的配置文件,进行配置。
[root@elk ~]# egrep -v "#|^$" /etc/elasticsearch/elasticsearch.yml
node.name: elk-1
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
cluster.initial_master_nodes: ["node-1","node-2"]
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-methods: OPTIONS, HEAD, GET, POST, PUT, DELETE
http.cors.allow-headers: "X-Requested-With, Content-Type, Content-Length, X-User"
创建ES的数据存放目录和日志存放目录并赋予用户及组。
mkdir /var/lib/elasticsearch
chown -R elasticsearch:elasticsearch /var/lib/elasticsearch
mkdir /var/log/elasticsearch
chown -R elasticsearch:elasticsearch /var/log/elasticsearch/
启动ES,并加入开机自启。
systemctl restart elasticsearch
systemctl enable elasticsearch
在浏览器上访问,进行测试,出现下面的信息即为安装成功。
安装elasticsearch-head
git上下载elasticsearch-head并安装。
cd /var/lib/
git clone git://github.com/mobz/elasticsearch-head.git
cd /var/lib/elasticsearch-head/
npm run start & #在后台运行
elasticsearch-head的端口默认为9100/tcp
然后在浏览器访问进行测试。
安装filebeat
rpm -ivh filebeat-7.9.2-x86_64.rpm
进入filebeat文件,进行配置
[root@elk filebeat]# egrep -v "#|^$" /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
enabled: true #是否启动
paths: #上报日志文件路径
- /var/log/*.log
- /var/log/messages
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
setup.template.settings:
index.number_of_shards: 1
setup.kibana:
output.elasticsearch: #输出到ES
hosts: ["192.168.0.223:9200"] #ES的地址
processors:
- add_host_metadata:
when.not.contains.tags: forwarded
- add_cloud_metadata: ~
- add_docker_metadata: ~
- add_kubernetes_metadata: ~
启动filebeat并加入到开机自启。
systemctl start filebeat
systemctl enable filebeat
安装kibana
rpm -ivh kibana-7.9.2-x86_64.rpm
进入kibana配置文件,进行配置
[root@elk filebeat]# egrep -v "#|^$" /etc/kibana/kibana.yml
server.port: 5602 #kibana的服务端口5602/tcp
server.host: "localhost"
elasticsearch.hosts: ["http://192.168.0.223:9200"] #对应ES的地址及端口
i18n.locale: "zh-CN" #默认为英文,可以修改成中文显示。(部分字段显示不友好)
启动kibana并且加入到开机自启
systemctl start kibana
systemctl enable kibana
访问进行测试,部分功能是收费的,但是可以试用。
添加filebeat索引进行显示。
搜索日志进行显示。
可以在上方搜索主机IP,左侧可以选择筛选索引,选择显示字段等内容,右侧可以选择筛选日志时间等。
发现问题及解决
1、发现elasticsearch启动出现了问题。
[1]memory locking requested for elasticsearch process but memory is not locked
[2]the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
解决:
原因:在/etc/elasticsearch/elasticsearch.yml 开启了 bootstrap.memory_lock: true 这个配置
elasticsearch官网建议生产环境需要设置bootstrap.memory_lock: true
官网的解释 是:发生系统swapping的时候ES节点的性能会非常差,也会影响节点的稳定性。所以要不惜一切代价来避免swapping。swapping会导致Java GC的周期延迟从毫秒级恶化到分钟,更严重的是会引起节点响应延迟甚至脱离集群。
所以最好限制住elasticsearch占用的内存情况,可选少用swap
# vim /etc/security/limits.conf
elk soft nofile 65536
elk hard nofile 65536
elk soft nproc 2048
elk hard nproc 2048
elk soft memlock unlimited
elk hard memlock unlimited
第二个问题就是注意 elasticsearch.yml的node.name的名称。
2、发现filebeat服务出现了问题
连接不上,是因为elasticsearch.ym那个node出现了问题