热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Elasticsearch+Logstash+Kibana实战部署[ELK]

ELK简介什么是ELK?通俗来讲,ELK是由Elasticsearch、Logstash、Kibana三个开源软件组成的一个组合体,这三个软件当中,每个软件用于完成不同的功能,E

ELK简介


什么是ELK?通俗来讲,ELK是由Elasticsearch、Logstash、Kibana 三个开源软件组成的一个组合体,这三个软件当中,每个软件用于完成不同的功能,ELK又称ELKstack,官网 https://www.elastic.co/ , ELK主要优点有如下几个:

1、处理方式灵活:elasticsearch是实时全文索引,具有强大的搜索功能。
2、配置相对简单:elasticsearch全部使用JSON接口,logstash使用模块配置,kibana的配置文件部分更简单。
3、检索性能高:基于优秀的设计,虽然每次查询都是实时,但是也可以达到百亿级数据的查询秒级响应。
4、集群线性扩展:elasticsearch和logstash都可以灵活线性扩展。
5、前端操作绚丽:kibana的前端设计比较绚丽,而且操作简单。

Elasticsearch



  • elasticsearch是一个高度可扩展全文搜索和分析引擎,基于Apache Lucene 构建,能对大容量的数据进行接近实时的存储、搜索和分析操作,可以处理大规模日志数据,比如Nginx、Tomcat、系统日志等功能。


Logstash



  • 数据收集引擎。它支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储到用户指定的位置;支持普通log、自定义json格式的日志解析。


Kibana



  • 数据分析和可视化平台。通常与 Elasticsearch 配合使用,对其中数据进行搜索、分析和以统计图表的方式展示。




ELK部署准备


这里实验所使用系统CentOS 7.4 x86_64,请关闭防火墙和selinux





















IPAddressHostnameMem
172.18.12.172elk-node14G
172.18.12.163elk-node24G

上传软件包



  • elasticsearch-7.4.2-linux-x86_64.tar.gz

  • jdk-8u221-linux-x64.tar.gz

  • kibana-7.4.2-linux-x86_64.tar.gz

  • logstash-7.4.2.tar.gz

  • Elasticsearch-head

  • node-v12.14.0-linux-x64.tar.xz


软件包下载地址 提取码:se5p


安装JDK并配置环境变量

[root@localhost /]# tar -xzvf jdk-8u221-linux-x64.tar.gz
[root@localhost /]# vim etc/profile

添加如下:

#set java environment
JAVA_HOME=/sk/jdk1.8.0_221
JRE_HOME=$JAVA_HOME/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH

使配置生效

[root@localhost /]# source /etc/profile

查看JDK版本

[root@localhost /]# java -version




Elasticsearch部署


一、解压elasticsearch并配置bin/elasticsearch.yml

[root@localhost tmp]# tar -zxvf elasticsearch-7.4.3.tar.gz
[root@localhost tmp]# mkdir /ELK
[root@localhost tmp]# mv elasticsearch-7.4.3 /ELK/elasticsearch
[root@localhost /]# cd ELK/elasticsearch/config/
[root@localhost config]# vim elasticsearch.yml

配置如下:

cluster.name: ELK-Cluster #ELK的集群名称,名称相同即属于是同一个集群
node.name: elk-node1 #本机在集群内的节点名称
path.data: /ELK/elasticsearch/data #数据存放目录
path.logs: /ELK/elasticsearch/data/log #日志保存目录
bootstrap.memory_lock: true #服务启动的时候锁定足够的内存,防止数据写入swap
network.host: 172.18.12.164 #监听的IP地址
http.port: 9200 #服务监听的端口
discovery.seed_hosts: ["172.18.12.172", "172.18.12.173"] #单播配置一台即可
cluster.initial_master_nodes: ["elk-node1", "elk-node2"]

二、配置内存限制

[root@localhost config]# vim jvm.options

配置如下:

-Xms2g
-Xmx2g

最小和最大内存限制,为什么最小和最大设置一样大?
参考:https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html



三、创建用户以及数据目录

[root@localhost config]# mkdir -p /ELK/elasticsearch/{data,data/log}
[root@localhost elasticsearch]# groupadd elk
[root@localhost elasticsearch]# useradd -g elk elk
[root@localhost elasticsearch]# passwd elk
[root@localhost elasticsearch]# chown -R elk:elk /ELK/elasticsearch/ -R
[root@localhost bin]# su elk
[elk@localhost elasticsearch]# cd bin/
[elk@localhost bin]# ./elasticsearch

ERROR: [3] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
[2]: memory locking requested for elasticsearch process but memory is not locked
[3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

启动报错:需要修改文件的最大打开数以及内存锁定



修改内核参数

[root@localhost bin]# vim /etc/security/limits.conf

配置如下:

* soft nofile 65536
* hard nofile 131072
* soft memlock unlimited
* hard memlock unlimited


修改最大线程数

[root@localhost bin]# vim /etc/security/limits.d/20-nproc.conf

配置如下:

* soft nproc unlimited


[root@localhost bin]# vim /etc/sysctl.conf

配置如下:

vm.max_map_count = 655360

令配置生效:

[root@localhost bin]# sysctl -p
[root@localhost bin]# reboot

四、启动服务

[root@localhost bin]# su elk
[elk@localhost elasticsearch]# cd bin/
[elk@localhost bin]# ./elasticsearch
[elk@localhost bin]$ yum -y install net-tools
[elk@localhost bin]# netstat -nltup |grep java

tcp6 0 0 172.18.12.164:9200 :::* LISTEN 9971/java
tcp6 0 0 172.18.12.164:9300 :::* LISTEN 9971/java

同理配置另一台bin/elasticsearch.yml

[root@localhost tmp]# tar -zxvf elasticsearch-7.4.3.tar.gz
[root@localhost tmp]# mkdir /ELK
[root@localhost tmp]# mv elasticsearch-7.4.3 /ELK/elasticsearch
[root@localhost /]# cd ELK/elasticsearch/config/
[root@localhost config]# vim elasticsearch.yml
-----------------------------------------------------------------------------------
cluster.name: ELK-Cluster #ELK的集群名称,名称相同即属于是同一个集群
node.name: elk-node2 #本机在集群内的节点名称
path.data: /ELK/elasticsearch/data #数据存放目录
path.logs: /ELK/elasticsearch/data/log #日志保存目录
bootstrap.memory_lock: true #服务启动的时候锁定足够的内存,防止数据写入swap
network.host: 172.18.12.166 #监听的IP地址
http.port: 9200 #服务监听的端口
discovery.seed_hosts: ["172.18.12.172", "172.18.12.173"] #单播配置一台即可
cluster.initial_master_nodes: ["elk-node1", "elk-node2"]
-----------------------------------------------------------------------------------
[root@localhost config]# vim jvm.options
-----------------------------------------------------------------------------------
-Xms2g
-Xmx2g
-----------------------------------------------------------------------------------
[root@localhost config]# mkdir -p /ELK/elasticsearch/{data,data/log}
[root@localhost elasticsearch]# groupadd elk
[root@localhost elasticsearch]# useradd -g elk elk
[root@localhost elasticsearch]# passwd elk
[root@localhost elasticsearch]# chown -R elk:elk /ELK/elasticsearch/ -R
[root@localhost bin]# su elk
[elk@localhost elasticsearch]# cd bin/
[elk@localhost bin]# ./elasticsearch
[elk@localhost bin]$ yum -y install net-tools
[elk@localhost bin]# netstat -nltup |grep javatcp6 0 0 172.18.12.164:9200 :::* LISTEN 9971/java
tcp6 0 0 172.18.12.164:9300 :::* LISTEN 9971/java



Elasticsearch-head插件


一、解压并安装head插件&npm

[root@localhost tmp]# tar -zxvf elasticsearch-head.tar.gz
[root@localhost tmp]# mv elasticsearch-head /ELK/elasticsearch-head
[root@localhost tmp]# xz -d node-v12.14.0-linux-x64.tar.xz
[root@localhost tmp]# tar -xvf node-v12.14.0-linux-x64.tar
[root@localhost ELK]# ln -s /ELK/nodejs/bin/node /usr/bin/node
[root@localhost tmp]# mv node-v12.14.0-linux-x64 /ELK/nodejs
[root@localhost ELK]# ln -s /ELK/nodejs/bin/npm /usr/bin/npm //建立软连接
[root@localhost elasticsearch-head]# npm install --registry=https://registry.npm.taobao.org //使用淘宝源
[root@localhost elasticsearch-head]# npm run start
[root@localhost elasticsearch-head]# npm run start & //后台启动

二、访问http://IP___:9100


三、分别修改所有elasticsearch服务配置文件,开启跨域访问支持,然后重启elasticsearch服务

[root@localhost elasticsearch]# vim /ELK/elasticsearch/config/elasticsearch.yml

配置如下:

http.cors.enabled: true
http.cors.allow-origin: "*"

[root@localhost bin]# ps -ef |grep elasticelk 9971 1 0 13:22 pts/0 00:00:45 /tmp/jdk1.8.0_221/bin/java -Xms2g -Xmx2g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+AlwaysPreTouch -Xss1m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djna.nosys=true -XX:-OmitStackTraceInFastThrow -Dio.netty.noUnsafe=true -Dio.netty.noKeySetOptimization=true -Dio.netty.recycler.maxCapacityPerThread=0 -Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -Djava.io.tmpdir=/tmp/elasticsearch.JlwA3m72 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=data -XX:ErrorFile=logs/hs_err_pid%p.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -Xloggc:logs/gc.log -XX:+UseGCLogFil[root@localhost bin]# kill -9 9971
[root@localhost bin]# su elk
[elk@localhost bin]$ ./elasticsearch &

四、浏览器访问9100端口,将连接地址修改为elasticsearch地址


五、提交测试数据












Master和Slave的区别:

Master的职责:
统计各node节点状态信息、集群状态信息统计、索引的创建和删除、索引分配的管理、关闭node节点等
Savle的职责
同步数据、等待机会成为Master





Logstash部署


一、测试标准输入输出

[root@localhost tmp]$ mv logstash-7.5.1 /ELK/logstash
[root@localhost ELK]# cd logstash/bin/
[root@elk-node1 logstash]# vim /ELK/logstash/config/logstash.yml

配置logstash.yml

http.host: "192.168.30.129"
http.port: 9600


测试标准输入输出


[root@localhost bin]# ./logstash -e 'input { stdin {} } output { stdout { codec => rubydebug} }'


输入:hello word


{"@version" => "1","@timestamp" => 2019-12-19T07:33:46.725Z,"message" => "hello word","host" => "localhost"
}

二、测试输出到文件

[root@localhost bin]# ./logstash -e 'input { stdin{} } output { file { path => "/tmp/log-%{+YYYY.MM.dd}messages.gz"}}'


输入:

hello word


[2019-12-19T15:44:02,238][INFO ][logstash.outputs.file ][main] Opening file {:path=>"/tmp/log-2019.12.19messages.gz"}
[2019-12-19T15:44:20,886][INFO ][logstash.outputs.file ][main] Closing file /tmp/log-2019.12.19messages.gz

查看文件内容:

[root@localhost bin]# tail /tmp/log-2019.12.19messages.gz {"message":"hello world","@version":"1","@timestamp":"2019-12-19T07:44:01.261Z","host":"localhost"}

三、测试输出到elasticsearch

[root@linux-elk1 ~]# ./logstash -e 'input { stdin{} } output { elasticsearch {hosts => ["172.18.12.164:9200"] index => "mytest-%{+YYYY.MM.dd}" }}'

四、elasticsearch服务器验证收到数据

[root@localhost /]# ll /ELK/elasticsearch/data/nodes/0/indices/总用量 0
drwxrwxr-x. 8 elk elk 65 12月 19 15:51 bOpOoG7xRQW7OVV06ufvAw
drwxrwxr-x. 8 elk elk 65 12月 19 14:51 mPiADPveTbyGdvj-i9W7Uw









kibana部署


一、解压并配置 kibana.yml

[root@localhost tmp]# tar -zxvf kibana-7.5.1-linux-x86_64.tar.gz
[root@localhost tmp]# mv kibana-7.5.1-linux-x86_64 /ELK/kibana
[root@localhost tmp]# cd /ELK/kibana/config/
[root@localhost config]# vim kibana.yml

配置如下

server.port: 5601 #监听端口
server.host: "172.18.12.164" #监听地址
elasticsearch.hosts: ["http://172.18.12.164:9200","http://172.18.12.166:9200"] #elasticsearch服务器地址
i18n.locale: "zh-CN" #修改为中文


Kibana.yml配置文件详解



二、启动并验证

[root@localhost bin]# cd /ELK/kibana/bin/
[root@localhost bin]# ./kibana --allow-root




Elastic Stack实战


一、收集yum日志

[root@elk-node1 logstash]# mkdir conf.d
[root@elk-node1 logstash]# touch conf.d/yum-log.conf
[root@elk-node1 logstash]# vim conf.d/yum-log.conf

编辑新增配置文件:

input {file {path => "/var/log/yum.log" type => "systemlog" start_position => "beginning" stat_interval => "2" }
}output {elasticsearch {hosts => ["172.18.12.172:9200"] index => "logstash-%{type}-%{+YYYY.MM.dd}" }
}

检测配置文件语法是否正确:

[root@elk-node1 logstash]# /ELK/logstash/bin/logstash -f /ELK/logstash/conf.d/yum-log.conf -t

Thread.exclusive is deprecated, use Thread::Mutex
Sending Logstash logs to /ELK/logstash/logs which is now configured via log4j2.properties
[2019-12-20T16:53:29,595][INFO ][logstash.setting.writabledirectory] Creating directory {:setting=>"path.queue", :path=>"/ELK/logstash/data/queue"}
[2019-12-20T16:53:29,615][INFO ][logstash.setting.writabledirectory] Creating directory {:setting=>"path.dead_letter_queue", :path=>"/ELK/logstash/data/dead_letter_queue"}
[2019-12-20T16:53:30,038][WARN ][logstash.config.source.multilocal] Ignoring the 'pipelines.yml' file because modules or command line options are specified
[2019-12-20T16:53:31,328][INFO ][org.reflections.Reflections] Reflections took 67 ms to scan 1 urls, producing 20 keys and 40 values
Configuration OK
[2019-12-20T16:53:31,979][INFO ][logstash.runner ] Using config.test_and_exit mode. Config Validation Result: OK. Exiting Logstash

二、重启logstash服务

[root@elk-node1 logstash]# /ELK/logstash/bin/logstash -f /ELK/logstash/conf.d/yum-log.conf &

三、Kibana可视化界面配置


























推荐阅读
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
  • ElasticSerach初探第一篇认识ES+环境搭建+简单MySQL数据同步+SpringBoot整合ES
    一、认识ElasticSearch是一个基于Lucene的开源搜索引擎,通过简单的RESTfulAPI来隐藏Lucene的复杂性。全文搜索,分析系统&# ... [详细]
  • camel_使用Camel在来自不同来源的Solr中索引数据
    camelApacheSolr是建立在Lucene之上的“流行的,快速的开源企业搜索平台”。为了进行搜索(并查找结果),通常需要从不同的源(例如内容管理 ... [详细]
  • 一:什么是solrSolr是apache下的一个开源项目,使用Java基于lucene开发的全文搜索服务器;Lucene是一个开放源代 ... [详细]
  • ES基本原理名词解释In-memorybuffer:ES内存缓冲区,新建的document写入的地方document:索引和搜索的 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • Linux下安装免费杀毒软件ClamAV及使用方法
    本文介绍了在Linux系统下安装免费杀毒软件ClamAV的方法,并提供了使用该软件更新病毒库和进行病毒扫描的指令参数。同时还提供了官方安装文档和下载地址。 ... [详细]
  • 本文介绍了在RHEL 7中的系统日志管理和网络管理。系统日志管理包括rsyslog和systemd-journal两种日志服务,分别介绍了它们的特点、配置文件和日志查询方式。网络管理主要介绍了使用nmcli命令查看和配置网络接口的方法,包括查看网卡信息、添加、修改和删除配置文件等操作。 ... [详细]
  • 在Windows10系统上使用VMware创建CentOS虚拟机的详细步骤教程
    本文详细介绍了在Windows10系统上使用VMware创建CentOS虚拟机的步骤,包括准备条件、安装VMware、下载CentOS ISO文件、创建虚拟机并进行自定义配置、设置虚拟机的ISO与网络、进行安装和配置等。通过本文的指导,读者可以轻松地创建自己的CentOS虚拟机并进行相应的配置和操作。 ... [详细]
  • 本文介绍了在无法联网的情况下,通过下载rpm包离线安装zip和unzip的方法。详细介绍了如何搜索并下载合适的rpm包,以及如何使用rpm命令进行安装。 ... [详细]
  • LINUX学习之centos7营救模式
    今天卸载软件的时候,不小心把GNOME的一些组件给卸了,导致桌面无法正常开启,会卡在启动过程中,而我的开机启动模式又是设置为图形界面,所以一开LINUX就卡住了,进入不了命令行界面 ... [详细]
author-avatar
手机用户2502940417_253
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有