ELK极简上手
目录
引言
首先,下载相关的包
其次,安装启动elasticsearch
下一步,安装并启动logstash
最后,安装并启动kibana
进一步的,测试数据的流动
引言
最近整理电脑发现之前的一篇ELK极简入门笔记,现整理发出来,希望对感兴趣的小伙伴有帮助。
要说ELK是什么,我们先给一个引子。早期,计算机方面比较实用的技术是体系结构相关的内容。那时候,各个大学的计算机系主任大部分是体系结构方面的专家;后来,算法逐渐占据上风,开始流行起来,当年微软将谷歌作为最大的竞争对手,不无道理;再后来,人工智能开始如滔天大浪席卷了几乎所有高科技公司和高校,现在再去看各个高校的计算机系主任,不沾点人工智能的边都不好意思把简历放出来。在这个历史过程中,搜索算法一度被认为是算法皇冠上的明珠,尤其是在互联网大潮来临后,数据生产呈现爆炸式增长,如何快速准确的检索需要的数据,成为了算法工程师的终极梦想。这方面的技术仍然在不断的进化演进,ELK就是在大数据领域的一个搜索引擎成果包。简而言之,ELK由三个子包构成,E代表elasticsearch,可升缩的查找引擎;L代表logstash,这里我们比较通用的将其理解为数据解析转换器,而非日志;K代表kibana,可视化的一套组件。放在一起就是,logstash将生产的数据,按照规则,解析过滤转换为结构化的数据,提交给elasticsearch,kibana提供简洁丰富的可视化界面,方便用户查找elasticsearch中的数据。

下面看看如何搭建最基本的ELK环境。
首先,下载相关的包
官网国内下载地址过慢,可以找国内镜像下载
https://elasticsearch.thans.cn/downloads/logstash/logstash-6.4.3.tar.gz
https://artifacts.elastic.co/downloads/logstash/logstash-6.4.3.tar.gz
其次,安装启动elasticsearch
elastic 高版本出现一些错误打印,不再研究,考虑下载低版本
下载6.4版本,启动,提示killed
修改config目录下的jvm options配置文件,将虚拟机内存要求降低,从1G到512M
再次运行,提示错误can not run elasticsearch as root
因为安全问题elasticsearch 不让用root用户直接运行,所以要创建新用户,用非root用户启动,提示
Exception in thread "main" java.nio.file.AccessDeniedException: /home/work/ELK/elasticsearch-6.4.3/config/jvm.options
是因为目录没有非root用户的执行权限,用root用户chmod -R 777 安装目录
然后再次启动elasticsearch,成功
在机器内部执行curl -get http://127.0.0.1:9200可以访问,说明elasticsearch启动成功
curl -get http://127.0.0.1:9200{"name" : "DxD9f_v","cluster_name" : "elasticsearch","cluster_uuid" : "7z49ZWMyQR2QYdCfghiVkg","version" : {"number" : "6.4.3","build_flavor" : "default","build_type" : "tar","build_hash" : "fe40335","build_date" : "2018-10-30T23:17:19.084789Z","build_snapshot" : false,"lucene_version" : "7.4.0","minimum_wire_compatibility_version" : "5.6.0","minimum_index_compatibility_version" : "5.0.0"},"tagline" : "You Know, for Search"}
但是外部网络访问不了,打开config下的yml配置文件,将里面的net host项打开,并指定外部访问的IP地址 0.0.0.0
重启服务,提示max fs过小,vm max mem过小
对max fs过小,按照网上的,修改/etc/security/limits配置文件,将65535改成65536
对于vm max mem过小,按照网上修改,将/etc/sysctl.conf配置文件,增加一行vm配置,按照elasticsearch启动时提示的错误信息,补充需要的大小,21xxx44
执行sysctl -p 使配置生效
对于第一个修改的生效,需要重新登录
之后,再次启动elasticsearch成功,在浏览器中访问192.168.0.108:9200 成功

向elasticsearch插入数据,需要指定头部
curl -XPUT 'http://localhost:9200/twitter/_doc/1?pretty' -H 'Content-Type: application/json' -d '{"user": "kimchy","post_date": "2009-11-15T13:12:00","message": "Trying out Elasticsearch, so far so good?"}'
获取内容
curl -XGET 'http://localhost:9200/twitter/_doc/1?pretty=true'{"_index" : "twitter","_type" : "_doc","_id" : "1","_version" : 1,"found" : true,"_source" : {"user" : "kimchy","post_date" : "2009-11-15T13:12:00","message" : "Trying out Elasticsearch, so far so good?"}}
查看elasticsearch的状态
curl -X GET "localhost:9200/_cat"
可以查看到支持命令列表
=^.^=/_cat/allocation/_cat/shards/_cat/shards/{index}/_cat/master/_cat/nodes/_cat/tasks/_cat/indices/_cat/indices/{index}/_cat/segments/_cat/segments/{index}/_cat/count/_cat/count/{index}/_cat/recovery/_cat/recovery/{index}/_cat/health/_cat/pending_tasks/_cat/aliases/_cat/aliases/{alias}/_cat/thread_pool/_cat/thread_pool/{thread_pools}/_cat/plugins/_cat/fielddata/_cat/fielddata/{fields}/_cat/nodeattrs/_cat/repositories/_cat/snapshots/{repository}/_cat/templates
查看节点健康状态
curl -X GET "localhost:9200/_cat/health?v"epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent1699100535 20:22:15 elasticsearch yellow 1 1 30 30 0 0 15 0 - 66.7%
查看节点的状态
curl -X GET "localhost:9200/_cat/nodes?v"ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name192.168.0.99 60 96 2 0.00 0.00 0.00 mdi * DxD9f_v
查看索引
curl -X GET "localhost:9200/_cat/indices?v"health status index uuid pri rep docs.count docs.deleted store.size pri.store.sizegreen open .monitoring-kibana-6-2020.04.05 dEiKRojsQv-o22ZL7POLVA 1 0 25917 0 3.2mb 3.2mbgreen open .monitoring-es-6-2020.04.05 dosbfiHqR_uQcDNS6KTXGw 1 0 95077 200 36.2mb 36.2mbyellow open bank 9X6hpCfMRgG0Hg_pldRghA 5 1 1000 0 483kb 483kbyellow open blog TWYzd5SgRsCR5VEu1szVSg 5 1 1110 0 329.1kb 329.1kbgreen open .monitoring-es-6-2020.04.12 L2kP2a1sRJmYv32WJiR9ug 1 0 34872 0 14.9mb 14.9mbgreen open .monitoring-kibana-6-2020.04.13 7JMe7HYlQaKr_SEAocLXuA 1 0 15 0 81.4kb 81.4kbgreen open .monitoring-es-6-2020.04.06 VIwdUGpxQ_q3GUNDaiBrFQ 1 0 10283 216 5mb 5mbgreen open .monitoring-kibana-6-2020.04.04 L3uJIJ9GQ2WxtDFUVqT0Xg 1 0 13629 0 1.9mb 1.9mbyellow open test 3wkfLrXHRXS-HZsWXkDYjg 5 1 2 0 10.8kb 10.8kbgreen open .monitoring-kibana-6-2020.04.12 7okTRX0VTrya7qCKusG6kQ 1 0 9184 0 1.1mb 1.1mbgreen open .monitoring-kibana-6-2020.04.06 Bq9YykB7Smi3IqY7KqSUew 1 0 2361 0 326kb 326kbgreen open .monitoring-es-6-2020.04.04 X05uCpFqTtupA5x9OKFCvA 1 0 45040 46 16.7mb 16.7mbgreen open .monitoring-kibana-6-2020.04.08 bpTl2-TdSn6hRKFG2WdPlQ 1 0 8 0 48.3kb 48.3kbgreen open .monitoring-es-6-2020.04.13 ku_cSQXDRIG88gKRmZy3cw 1 0 147 44 234.6kb 234.6kbgreen open .monitoring-es-6-2020.04.07 _GTr8c30Q1iam0Jq49MacQ 1 0 27084 203 11.2mb 11.2mbgreen open .monitoring-kibana-6-2020.04.07 or0a2MePRuiQ815Q7SQKlw 1 0 7180 0 1000.2kb 1000.2kbgreen open .monitoring-es-6-2023.11.04 UDOLcrBPSRGo0w_5XGuxuQ 1 0 3674 135 2.1mb 2.1mbgreen open .kibana 32YGBWOgSTK5cxPAyz1ZUA 1 0 5 0 27.5kb 27.5kb
查看索引的文档,如果不存在,会提示错误
curl -X GET "localhost:9200/_cat/indices/blog"
yellow open blog TWYzd5SgRsCR5VEu1szVSg 5 1 1110 0 329.1kb 329.1kb
查询索引中的数据,pretty会让数据美化输出,主要是按照层次结构输出,下面命令中,search应该是内置命令字
curl -X GET "localhost:9200/blog/_search?pretty"
执行accounts数据示例,注意, 会提示bulk命令需要一个回车换行,其实是在accounts文件尾部增加一个回车换行
curl -H "Content-Type: application/json" -XPOST "localhost:9200/bank/_doc/_bulk?pretty&refresh" --data-binary "@accounts.json"
现在就向elasticsearch中增加了bank这个索引,并有1000个文档数据
curl "localhost:9200/_cat/indices?v"
查询所有索引,可以看到有bank索引
检索特定索引,这里是刚创建的bank索引
curl -X GET "localhost:9200/bank/_search?q=*&sort=account_number:asc&pretty"
?后面是参数列表,以&分割。q表示匹配所有参数,sort表示按照accountsnumber升序排列,pretty表示美化输出
以上可以在安装包的Readme中查找到使用例子
===========================================================
下一步,安装并启动logstash
logstash-6.4.3/bin/logstash --help
Unrecognized VM option 'UseParNewGC'
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
注释掉config/jvm.options文件中的 -XX:+UseParNewGC 行即可
运行出现exit,查看输出日志,是因为更新了JDK到11所致,这个版本的JDK需要降低,使用jdk1.8.0,Logstash启动成功。
===========================================================
最后,安装并启动kibana
发现启动kibana后,elasticsearch就会出现killed
进一步分析发现,kibana在启动过程中会连接elasticsearch
对于killed现象初步分析可能是jvm 内存出错导致,很可能是内存不够
之前的Hadoop相关java进程都是以1g内存参数启动jvm的,在elasticsearch中将其修改为512了,这一点上两块使用java前后有所不同步
其次,是否是因为这些java进程的存在,消耗了大量jvm内存,导致后面再开新的java进程会崩溃,由于内存不够
关闭Hadoop相关进程,使用jps,重新运行elasticsearch和kibana,成功,可以通过web看到kibana的页面
jps只有elasticsearch一个进程,kibana难道不是java进程启动????
原来因为kibana是使用node.js写的,所以进程在node中。但是查找到的node进程不一定就是kibana的,
所以还需要根据端口进一步确认,直接查看5601端口的占用情况,确定下进程ID,然后在查看下node进程的ID,
如果一致,就可以确定该node进程就是kibana的进程了。
这是很关键的一点。之前出现过关闭elasticsearch后,再次启动elasticsearch后,出现kibana启动后卡住,CPU占比接近100%的情况
无意中发现此时kibana的web端仍然是可用工作的,才想起来它可能在后台工作,并没有退出。
此时,可通过netstat 查看5601端口是否仍然在工作
netstat -anlp | grep 5601
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 0.0.0.0:5601 0.0.0.0:* LISTEN 78985/bin/../node/b
进一步的找到进程78985
ps aux | grep 78985
ywg 78985 1.2 8.3 1439760 184632 ? Sl 06:59 2:37 bin/../node/bin/node --no-warnings bin/../src/cli
此即为kibana关联的node进程
===========================================================
进一步的,测试数据的流动
Logstash 的配置文件中使用了网络的例子,
input {file {path => "/var/log/bootstrap.log" start_position => "beginning"type => "test"}}
输入使用了上述日志文件,并以beginning为开始标记
使用echo命令向上述日志文件中增加内容,可以在Logstash的日志中看到新内容解析
{"message" => "Mytest ELK","@timestamp" => 2023-11-04T14:20:08.571Z,"path" => "/var/log/bootstrap.log","type" => "test","tags" => [[0] "_grokparsefailure"],"host" => "ubuntu","@version" => "1"}
从kibana中可以看到日志信息及统计信息变化


如果要添加索引项目,可以在manager中添加索引匹配模式

下一步就是熟悉elasticsearch的数据结构,这样在后续使用中才可以做到从心所欲。
相关文章:
ELK极简上手
目录 引言 首先,下载相关的包 其次,安装启动elasticsearch 下一步,安装并启动logstash 最后,安装并启动kibana 进一步的,测试数据的流动 引言 最近整理电脑发现之前的一篇ELK极简入门笔记,现整理发出…...
在 JavaScript 中,变量的作用域是如何确定的?
在 JavaScript 中,变量的作用域是由作用域链(Scope Chain)来确定的。作用域链是指变量在执行期间访问的作用域的链式结构。 JavaScript 中的作用域分为全局作用域和局部作用域(函数作用域和块级作用域)。 全局作用域…...
常见面试题-TCP三次握手四次挥手
TCP 三次握手/四次挥手 参数用途SYN用于启动和建立连接时,同步设备之间的序列号。0到2^32 - 1的随机数。ACK向另一端确认已经收到 SYN,数值为收到 SYN 增一。SYN-ACK确认之前收到了 SYN,数值为自定义值。FIN终止连接。RST重置连接。 三次握…...
前端框架Vue学习 ——(六)Vue组件库Element
文章目录 Element 介绍快速入门常见组件表格分页Dialog 对话框组件表单 Container 布局容器 Element 介绍 Element:是饿了么团队研发的,一套为开发者、 设计师和产品经理准备的基于Vue 2.0的桌面端组件库。 组件:组成网页的部件,…...
第六章:Property-based Testing and Test Oracles
文章目录 Test OraclesActive and Passive Test OraclesTypes of Test OraclesFormal, executable specificationsSolved examplesMetamorphic oraclesAlternative implementations (备用实现)Heuristic oracles (启发式)The Golden Program!Oracle Deviation (Oracle偏差)T…...
react生命周期函数
React 组件的生命周期可分为三大阶段:挂载阶段(Mounting)、更新阶段(Updating)和卸载阶段(Unmounting)。 1.挂载阶段(Mounting) 在组件被插入到 DOM 中后,会…...
QSqlDatabase使用Sqlite
QSqlDatabase使用Sqlite Sqlite本身就可以被内嵌在程序中,QSqlDatabase也自带Sqlite驱动,无需任何第三方依赖,可以直接使用 QSqlDatabase _db QSqlDatabase::addDatabase("QSQLITE"); QString dbPath "/path/to/xxx.db&qu…...
宝马——使用人工智能制造和驾驶汽车
德国汽车制造商宝马(BMW)每年在全球制造和销售250万台汽车,其品牌包括宝马、MINI和劳斯莱斯。 宝马汽车以其卓越的性能和对新技术的应用而著名,它是道路上最精致的汽车之一,并且和其竞争对手戴姆勒(Daimler)一样,在将自动驾驶汽车…...
java入门,Map<? extends String, ?>
一、前言 是不是平时写业务代码的时候很少用到这个写法:Map<? extends String, ?>,这是Map类型,Map的键是? extends String 类型,值是?。为什么不是我们平时写的Map< String, Object>,这种写法有什么好…...
Spring Boot 统一处理功能
目录 1.用户登陆权限验证 1.1 每个方法验证 1.2 Spring AOP 用户统一登陆验证 1.3 拦截器 1.3.1 自定义拦截器 1.3.2 将自定义拦截器配置到系统设置中,并且设置拦截规则 1.3.3 排除所有的静态资源 1.4 登录拦截器(练习) 1.5 拦截器原…...
香港金融科技周VERTU CSO Sophie谈Web3.0的下一个风口 手机虚拟货币移动支付
10月31日,香港金融科技周正式拉开帷幕。这项香港金融科技界地年度盛事今年已经踏入了第八届,本届活动吸引超过数百位金融科技专业人士、创业者和行业领袖现场参与,线上参与观众超过10万人次。 在金融科技周的圆桌会议上,VERTU首席…...
分布式单元化
一 分布式单元化 1.1 两地三中心 顾名思义,两地指的是两个城市:同城,异地。三中心指的是三个数据中心:生产中心、同城容灾中心、异地容灾中心。 在同一个城市或者临近的城市建设两个相同的系统,双中心具备相当的业…...
wvp-gb28181-pro接入海康摄像头
网络-高级配置-平台接入 sip服务器信息默认参数如下,一键安装wvp完成之后默认就是这样的参数 设置项 设置值 平台接入方式 28181 本地sip端口 5060 传输协议 tcp、udp(外网的话我建议还是用tcp) 启用 勾选 协议版本 GB/T28181-201…...
近视眼选择什么台灯好?专家推荐的防近视台灯
年轻的时候不懂,以为自己的眼睛不好,近视度数高,是因为长时间看书造成的,其实我们都忽视了一个最为重要的影响因素,那就是灯光。如今的孩子面临着比我们以前更要繁重的学习压力,因此更需要注意用眼健康了&a…...
数据标注工具【LabelImg】安装使用 用VOC制作自己的数据集
labelImg的安装 ⭐️LabelImg简介⭐️LabelImg的安装⭐️labelImg标注数据集⭐️利用VOC制作自己的数据集 ⭐️LabelImg简介 Labelimg是一款开源的数据标注工具,标签可用于分类和目标检测,它是用python写的,并使用Qt作为其图形界面…...
Zeus IoT : 基于 SpringBoot 的分布式开源物联网大数据平台
Zeus IoT 是一个集设备数据采集、存储、分析、观测为一体的开源物联网平台,全球首创基于 Zabbix 的物联网分布式数据采集架构,具备超百万级物联网设备的并发监控能力,真正具备工业级性能与稳定性的开源物联网大数据中台。 Zeus IoT 致力于让设…...
面试—如何介绍项目中的多级缓存?
项目中使用的多级缓存也就是 分布式缓存 Redis 本地缓存 Caffeine,那么令 Caffeine 作为一级缓存,Redis 作为二级缓存,在项目中通过记录数据的访问次数,将热点数据放在 本地缓存,将非热点数据放在 Redis缓存 中&#…...
PyTorch入门学习(十七):完整的模型训练套路
目录 一、构建神经网络 二、数据准备 三、损失函数和优化器 四、训练模型 五、保存模型 一、构建神经网络 首先,需要构建一个神经网络模型。在示例代码中,构建了一个名为Tudui的卷积神经网络(CNN)模型。这个模型包括卷积层、…...
《 Hello 算法 》 - 免费开源的数据结构与算法入门教程电子书,包含大量动画、图解,通俗易懂
这本学习算法的电子书应该是我看过这方面最好的书了,代码例子有多种编程语言,JavaScript 也支持。 《 Hello 算法 》,英文名称是 Hello algo,是一本关于编程中数据解构和算法入门的电子书,作者是毕业于上海交通大学的…...
数据库之事务
数据库之事务 事务的特点: ACID 原子性 一致性:数据库的完整性约束,不能被破坏 隔离性 持久性:数据一旦提交,事务的效果将会被永久的保留在数据库中。而且不会被回滚 主从复制 高可用 备份 权限控制 脏读&am…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
git: early EOF
macOS报错: Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...
【Veristand】Veristand环境安装教程-Linux RT / Windows
首先声明,此教程是针对Simulink编译模型并导入Veristand中编写的,同时需要注意的是老用户编译可能用的是Veristand Model Framework,那个是历史版本,且NI不会再维护,新版本编译支持为VeriStand Model Generation Suppo…...
如何在Windows本机安装Python并确保与Python.NET兼容
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
基于stm32F10x 系列微控制器的智能电子琴(附完整项目源码、详细接线及讲解视频)
注:文章末尾网盘链接中自取成品使用演示视频、项目源码、项目文档 所用硬件:STM32F103C8T6、无源蜂鸣器、44矩阵键盘、flash存储模块、OLED显示屏、RGB三色灯、面包板、杜邦线、usb转ttl串口 stm32f103c8t6 面包板 …...
