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…...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...
