百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

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的功能是不是...

win7正在启动windows 卡住(win7正在启动windows卡住了 进入安全模式)
  • win7正在启动windows 卡住(win7正在启动windows卡住了 进入安全模式)
  • win7正在启动windows 卡住(win7正在启动windows卡住了 进入安全模式)
  • win7正在启动windows 卡住(win7正在启动windows卡住了 进入安全模式)
  • win7正在启动windows 卡住(win7正在启动windows卡住了 进入安全模式)
手机可以装电脑系统吗(手机可以装电脑系统吗怎么装)

答题公式1:手机可以通过数据线或无线连接的方式给电脑装系统。手机安装系统需要一定的技巧和软件支持,一般需要通过数据线或无线连接的方式与电脑连接,并下载相应的软件和系统文件进行安装。对于大部分手机用户来...