ELK踩坑记
liuian 2025-05-23 18:31 95 浏览
#ELK #ElasticSearch #Kibana
本文不是Step by Step教程文章,是我个人在搭建大型elk系统中遇到的一些问题,只建议相关从业者参阅。
问题一、Logstash 配置后疑似日志疑似没有向ElasticSearch推送
在使用
curl http://192.168.60.3:9200/_cat/indices?v
注:如果es集群有用户身份认证,应该加上 -u uid:password 参数,如果启用了SSL,原则上应该再带上 -k 参数
以下同。查看ElasticSearch中存在的索引时,发现相关的索引数据量一直没有增长,怀疑是Logstash没有往ElasticSearch推送数据。
经查为索引没刷新,可以通过
curl http://192.168.60.3:9200/_all/_flush 刷新相关索引后重新关注数据量增长情况。发现 Logstash 在稳定推送数据。
问题二、Elastic 数据量不断增大,可能占满服务器磁盘空间
使用
curl -XDELETE http://192.168.60.3:9200/firewall-v4-2021.10.19 形式的命令可以删除创建时间较久的索引。
注:ILM也可以实现索引的生命周期管理,具体参阅问题11
问题三、数据推送到 Elastic 后,在 Kibana 的 Discovery 与 Dashboard 界面无法看到相关索引
7.15.1 版本 Kibana,需要在
Manage/Kibana/IndexPattern 下添加数据索引模式。之后可以在 Analytics/Discover 以及
Analytics/Dashboard/CreateVisualization 调用索引模式
问题四、关于KQL指令
多条件连接: and, or
在指定字段中搜索: fieldname: search-pattern
举例:以下指令搜索device字段包含4J-3,Action字段为Permit的文档数据: device: 4J-3 and Action: Permit
注:在elastic search中,分词可能会有一定规则,比如某条日志中包含以下文本:10NAT/6/NAT_FLOW,那么要检索出该条日志,使用NAT这一关键字可能无法准确选取出该日志,应该该日志可能按照斜杆分词,却可能不会按照下划线分词,因此:你使用10NAT, NAT_FLOW 可以检索,单纯使用NAT作为关键字却无法检出该日志。另外,在KQL中可以在关键字首尾使用*通配符号。而多个关键字用空格分隔时,其关系为 或
问题五、ETL的系统架构模式
Logstash: 收取并清洗日志,向Elastic推送日志,其中,需要在Logstash配置文件中的 output 节设置相关的推送参数。
Elastic: 需要设置一系列参数
- 如 sysctl -w vm.max_map_count=262144 增大系统资源,调增docker的CPU及内存数量(如果有限制的话)
- 系统启动后,如果Elastic为单机模式,需要设置以下参数:1)设置副本数量为0,否则系统上所有索引会显示为Yellow状态。相关命令:
curl -XPUT "http://192.168.60.3:9200/_settings" -d "{\"number_of_replicas\":0}" -H "content-type:application/json"Kibana: 需要设置ElasticSearch节点或者集群相关信息。配置:kibana.yml 文件
问题六、ELK时间戳问题
在 logastash 与 ElasticSearch 中,时间戳所在的时区均为UTC时区,而在Kibana默认使用用户浏览器时区,也就是说:
- Logastash 在生成日志时间戳时,无论你服务器所在的时区是什么,它均为转换为UTC时区。如日志默认的 "@timestamp" 时间戳。
- ElasticSearch 如果收到的时间戳类型的数据如果没带时区,其会直接转换为距离1970年1月1日0时0分的毫秒数存储到数据库中,如果带了时区,其会转换为UTC后,再按照距离1970年1月1日的毫秒数存储到数据库中,也就是说,如果我们在Logstash中对时间戳进行了处理,比如增加了8个小时,并保存在"cstts"这个字段中,这条日志传输到Elastic后,由于没带时区,cstts 这个字段的时间戳不会被修改,但到Kibana后,系统会按照你浏览器的时区对时间戳进行调整,也就是说:你没有做处理的"@timestamp"时间戳反而是对的,经处理的cstts这个时间戳反而快了8个小时。因此,在纯粹的ELK系统中,无须对时间戳做特别处理,由系统内部处理,时间就是会是正常的。
我个人的实践是在LOGSTASH特定增加两个字段,用于保存UTC及CST时间戳,以便ES及本地保存时无视日志中包含的时间戳,这样虽然存储日志的时间可能与日志事件发生的时间有所不同,但能够确保文件在保存时的时间保持一致性。使用Ruby处理,相关代码
filter{ mutate{ } ruby{
code => " event.set('utc', Time.now.getutc) event.set('cst', Time.now.getutc + 8*60*60) cst = Time.now.getutc + 8*60*60 pathstr = cst.strftime('%Y-%m-%d/%H') indexstr = cst.strftime('%Y-%m-%d') event.set('pathstr',pathstr) event.set('indexstr',indexstr) " }
date{ match => ["timestamp","MMM d HH:mm:ss", "MMM d HH:mm:ss YYYY", "ISO8601"] }}其中:pathstr为格式化的本地日期+小时,indexstr为本地化的日期,主要为了保持在ES与LS本地存储日志时间的统一性。在output节中相关代码如下:
output{ elasticsearch{ hosts => ["es1:9200"] index => "raw-%{indexstr}" ssl => true cacert => "/usr/share/logstash/config/cert/elastic-stack-ca.pem" user => "elastic" password => "xxxxx" }}问题七、在Kibana的Dashboard中,索引模板的部分字段为空字段。
这个具体原因还没有找到,依据系统相关文档的解释,貌似如果索引中的前500个文档中未在该字段找到足够数据包含该字段的话,该字段就会被标记为空字段。但我在实测中,实际上每个字段都存在相关数据,但有的字段被标记为空字段。空字段无法在dashboard中引用及画图
问题八、Kibana Web端不停报警安全功能未启用:Warning299
有两种方法处理该问题,一是在Elastic的相关配置:elasticsearch.yml 中显示关闭xpack安全功能,二是对Elastic启用安全功能,如开启用户名和密码认证,SSL传输等。
方法一:在 ElasticSearch 配置文件:elasticsearch.yml 中添加如下指令:
x-pack.security.enabled = false ,并重启Elasic集群。不过需要注意确认Elastic启动时所用的配置文件,可能不是elasticsearch/config/下的配置文件,可通过: pe -ef | grep elastic 的命令行参数确认。
问题九、通过docker启动ELK系统
<pre> docker run -tid -p 5601:5601 -p 5044:5044 -p 9200:9200 -p 9300:9300 \ -v /root/data/es/conf/kibana.yml:/opt/kibana/config/kibana.yml \ -v /root/data/es/data:/var/lib/elasticsearch \ -v /root/data/logstash/config:/opt/logstash/config \ --restart=always --name elk sebp/elk</pre>通过 -v 参数将ELK所需配置文件,数据目录投递到容器
P.S. 如果要启用安全功能,使用一键运行的elk就不太方便调试了,可以参考 [[DOCKER环境下ELK部署及安全设定]]这篇文章拉取Elastic官方docker镜像进行安装。
注:这篇文章不是 Step by Step 的教程文章,有些遗漏的地方,因此也只适合相关从业者参考。
问题十、Elastic 返回指定字段
<pre>curl http://url/index/_search?q=abc&_source=fieldA,fieldB,fieldC_search?q=keyword&filter_path=hits.hits._source&_source=fields_spec其中:filter_path为只返回指定路径</pre>问题十一、关于ILM(索引生命周期管理)
顾名思义,索引生成周期管理是针对Elastic Search 索引的,主要功能是两项:数据的冷、温、热分离;数据的保存期限设置。注意:ILM的相关策略是在索引上生效,而不能在索引模板以及索引模式上生效。
索引模板主要用于控制索引在**创建时**的一些行为:主要作用有两项目,一是应用ILM策略,二是应用一些字段转化规则,比如某个字段转化为数字,某个字段进行分词诸如此类。索引模板只针对后面新建的索引生效。
索引模式用于概括名称符合一定规则的索引,比如在Kibana的Discover以及DASHBOARD中,需要创建索引模式,以告诉Kibana应该在哪些索引中搜索数据,在前述索引模板中,也需要创建索引模式以告诉Elastic哪些索引在创建时要套用模板中的规则。
在索引模板设置中引用ILM策略:
<pre>{ "index": { "lifecycle": { "name": "store-30d" } }}</pre>问题十二、使用LOGSTASH自动创建索引时,自动生成的字段类型不匹配导致部分日志入库失败
在 logstash output 相关配置中指定 index 相关配置项后,如果相关索引不存在,系统会自动创建相关索引,而索引字段类型是通过首次推送的数据推断而来的,因此,如果LOGSTASH 系统从多个数据源获取日志时,可能导致部分日志的部分字段类型不统一,从而导致部分日志无法入库。解决办法:
在索引模板中约束相关字段的类型,而拒绝ES在创建索引时自动推断字段类型。在Kibana里面,通过 Management/Index Management/Index Templates/ 创建相关的索引模板,并在MAPPINGS 选项中,为容易出现问题的字段添加类型(最好为Text,这样兼容性更强一点),这样,系统在创建索引时,会自动以模板中的类型替代自动推断。
注:关于索引模板的相关使用,可以查看 **问题11** 中相关说明。
相关推荐
- 搭建一个20人的办公网络(适用于20多人的小型办公网络环境)
-
楼主有5台机上网,则需要一个8口路由器,组网方法如下:设备:1、8口路由器一台,其中8口为LAN(局域网)端口,一个WAN(广域网)端口,价格100--400元2、网线N米,这个你自己会看了:)...
- 笔记本电脑各种参数介绍(笔记本电脑各项参数新手普及知识)
-
1、CPU:这个主要取决于频率和二级缓存,频率越高、二级缓存越大,速度越快,现在的CPU有三级缓存、四级缓存等,都影响相应速度。2、内存:内存的存取速度取决于接口、颗粒数量多少与储存大小,一般来说,内...
- 汉字上面带拼音输入法下载(字上面带拼音的输入法是哪个)
-
使用手机上的拼音输入法打成汉字的方法如下:1.打开手机上的拼音输入法,在输入框中输入汉字的拼音,例如“nihao”。2.根据输入法提示的候选词,选择正确的汉字。例如,如果输入“nihao”,输...
- xpsp3安装版系统下载(windowsxpsp3安装教程)
-
xpsp3纯净版在采用微软封装部署技术的基础上,结合作者的实际工作经验,融合了许多实用的功能。它通过一键分区、一键装系统、自动装驱动、一键设定分辨率,一键填IP,一键Ghost备份(恢复)等一系列...
- 没有备份的手机数据怎么恢复
-
手机没有备份恢复数据方法如下1、使用数据线将手机与电脑连接好,在“我的电脑”中可以看到手机的盘符。 2、将手机开启USB调试模式。在手机设置中找到开发者选项,然后点击“开启USB调试模式”。 3、...
- 电脑怎么激活windows11专业版
-
win11专业版激活方法有多种,以下提供两种常用的激活方式:方法一:使用激活密钥激活。在win11桌面上右键点击“此电脑”,选择“属性”选项。进入属性页面后,点击“更改产品密钥或升级windows”。...
- 华为手机助手下载官网(华为手机助手app下载专区)
-
华为手机助手策略调整,已不支持从应用市场下载手机助手,目前华为手机助手是需要在电脑上下载或更新手机助手到最新版本,https://consumer.huawei.com/cn/support/his...
- 光纤线断了怎么接(宽带光纤线断了怎么接)
-
宽带光纤线断了可以重接,具体操作方法如下:1、光纤连接的时候要根据束管内,同色相连,同芯相连,按顺序进行连接,由大到小。一般有三种连接方法,分别是熔接、活动连接和机械连接。2、连接的时候要开剥光缆,抛...
- win7旗舰版和专业版区别(win7旗舰版跟专业版)
-
1、功能区别:Win7旗舰版比专业版多了三个功能,分别是Bitlocker、BitlockerToGo和多语言界面; 2、用途区别:旗舰版的功能是所有版本中最全最强大的,占用的系统资源,...
- 万能连接钥匙(万能wifi连接钥匙下载)
-
1、首先打开wifi万能钥匙软件,若手机没有开启WLAN,就根据软件提示打开WLAN开关;2、打开WLAN开关后,会显示附近的WiFi,如果知道密码,可点击相应WiFi后点击‘输入密码’连接;3、若不...
- 雨林木风音乐叫什么(雨林木风是啥)
-
雨林木风的创始人是陈年鑫先生。陈年鑫先生于1999年创立了雨林木风公司,其初衷是为满足中国市场对高品质、高性能电脑的需求。在陈年鑫先生的领导下,雨林木风以技术创新、产品质量和客户服务为核心价值,不断推...
- aics6序列号永久序列号(aics6破解序列号)
-
关于AICS6这个版本,虽然是比较久远的版本,但是在功能上也是十分全面和强大的,作为一名平面设计师的话,AICS6的现有的功能已经能够应付几乎所有的设计工作了……到底AICC2019的功能是不是...
- 手机可以装电脑系统吗(手机可以装电脑系统吗怎么装)
-
答题公式1:手机可以通过数据线或无线连接的方式给电脑装系统。手机安装系统需要一定的技巧和软件支持,一般需要通过数据线或无线连接的方式与电脑连接,并下载相应的软件和系统文件进行安装。对于大部分手机用户来...
- 一周热门
- 最近发表
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- vscode切换git分支 (35)
- python bytes转16进制 (35)
- grep前后几行 (34)
- hashmap转list (35)
- c++ 字符串查找 (35)
- mysql刷新权限 (34)
