您的位置 首页 > 德语词汇

flatline是什么意思 elastalert

大家好,关于flatline是什么意思很多朋友都还不太明白,今天小编就来为大家分享关于elastalert的知识,希望对各位有所帮助!

系统:centos7\nelk版本:7.6.21.1ElastAlert工作原理

周期性的查询Elastsearch并且将数据传递给规则类型,规则类型定义了需要查询哪些数据。

当一个规则匹配触发,就会给到一个或者多个的告警,这些告警具体会根据规则的配置来选择告警途径,就是告警行为,比如邮件、钉钉、tg、slack、企业微信等

flatline是什么意思 elastalert

Tips:Elastalert0.2.0之后使用Python3.6,不再使用Python2版本

#安装EPEL和IUS软件源\nyuminstallepel-release-y\nyuminstallhttps://centos7.iuscommunity.org/ius-release.rpm-y\n#安装python3.6\nyuminstallpython36upython36u-develpython36u-pip-y\n#ln-s/usr/bin/python3.6/bin/python3\n#ln-s/usr/bin/pip3.6/bin/pip32.2安装elastalert

pip3installelastalert2.2.1配置

cd/opt/soft/\ngitclonehttps://github.com/Yelp/elastalert.git\ncdelastalert\ncpconfig.yaml.exampleconfig.yaml\nmkdirrules2.2.2样例

https://github.com/Yelp/elastalert/tree/master/example_rules

#规则目录\nrules_folder:/opt/soft/elastalert/rules\n#多久从ES中查询一次\nrun_every:\nseconds:30\n#是查询窗口的大小,从每个查询运行的时间向后延伸。对于其中use_count_query或use_terms_query设置为true的规则,此值将被忽略。\nbuffer_time:\nminutes:15\n#连接elasticsearch配置\nes_host:127.0.0.1\nes_port:9200\nes_username:elastic\nes_password:xxxxxxxx\n#elastalert索引名称\nwriteback_index:elastalert_status\nwriteback_alias:elastalert_alerts\n#失败重试限制\nalert_time_limit:\ndays:2\n

**以下配置没使用,只做介绍**

####使用TLS连接诶elastsearch\n#use_ssl:True\n#验证tls证书\n#verify_certs:True\n#带正文的GET请求是Elasticsearch的默认选项。如果因为某些原因失败了,你可以通过'GET','POST'或'source',具体可以查看以下(http://elasticsearch-py.readthedocs.io/en/master/connection.html?highlight=send_get_body_as#transport)\n#es_send_get_body_as:GET\n\n#开启ssl认证证书\n#verify_certs:True\n#ca_certs:/path/to/cacert.pem\n#client_cert:/path/to/client_cert.pem\n#client_key:/path/to/client_key.key\n\n2.2.4在elasticsearch中创建elastalert的日志索引

**Tips:**如果索引已存在,则不会重新创建

elastalert-create-index--indexelastalert

输出结果:

ProcessController:ElasticVersion:7.6.2\nReadingElastic6indexmappings:\nReadingindexmapping'es_mappings/6/silence.json'\nReadingindexmapping'es_mappings/6/elastalert_status.json'\nReadingindexmapping'es_mappings/6/elastalert.json'\nReadingindexmapping'es_mappings/6/past_elastalert.json'\nReadingindexmapping'es_mappings/6/elastalert_error.json'2.3常用命令

#测试规则文件\nelastalert-test-rulerule.yaml\n\n#启动监控报警\npython3-melastalert.elastalert--verbose--rule/root/elastalert/example_rules/rule.yaml\n\n2.4服务启动方法

Tips:启动指定家目录的原因主要是有调用,可以少写路径,比如不需要指定config.yml,rule里面的yml文件可以少写路径指定==

#创建elastalert服务文件\nvim/etc/systemd/system/elastalert.service

[Unit]\nDescription=elastalert\nAfter=elasticsearch.service\n\n[Service]\nType=simple\nUser=root\nGroup=root\nRestart=on-failure\nWorkingDirectory=/opt/soft/elastalert\nExecStart=/usr/bin/python3-melastalert.elastalert--verbose--config/opt/soft/elastalert/config.yaml\n\n[Install]\nWantedBy=multi-user.target2.4.2supervisor启动管理

安装supervisor

yuminstall-ysupervisor\nsystemctlenablesupervisord

编写elastalertsupervisord守护进程

vim/etc/supervisord.d/elastalert.ini

[program:elastalert]\ndirectory=/opt/soft/elastalert\ncommand=/usr/bin/python3-melastalert.elastalert--verbose\nautostart=true\nstartsecs=5\nautorestart=true\nstartretries=10\nredirect_stderr=true\nstdout_logfile_maxbytes=20MB\nstdout_logfile_backups=5\nstdout_logfile=/var/log/elastalert/elastalert.log

启动

systemctlenablesupervisord\nsystemctlrestartsupervisord\nsystemctlstartsupervisord\nsystemctlstopsupervisord\nsupervisorctlstatus三、告警测试3.1es测试索引3.1.1创建并推送数据到index

curl-XPOST"http://elastic:passwd@127.0.0.1:9200/test-alert/test"-H'Content-Type:application/json'-d'{"@timestamp":"'$(date--iso-8601=seconds)'","field":"value"}'

{"_index":"test-alert","_type":"test","_id":"inH1I3cBMJwNYi416aLN","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":0,"_primary_term":1}

curl-XDELETEhttp://elastic:passwd@127.0.0.1:9200/test-alert

curl'http://elastic:passwd@127.0.0.1:9200/_cat/indices?v'

curl-XGEThttp://elastic:passwd@127.0.0.1:9200/test-alert/_search

{"took":2,"timed_out":false,"shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":{"value":4,"relation":"eq"},"max_score":1.0,"hits":[{"index":"test-alert","type":"test","id":"inH1I3cBMJwNYi416aLN","score":1.0,"source":{"@timestamp":"2021-01-21T08:01:52+00:00","field":"value"}},{"index":"test-alert","type":"test","id":"0ocXJHcBMJwNYi41y3rG","score":1.0,"source":{"@timestamp":"2021-01-21T08:37:55+0000","field":"value"}},{"index":"test-alert","type":"test","id":"aZAiJHcBMJwNYi41QTqW","score":1.0,"source":{"@timestamp":"2021-01-21T08:49:20+0000","field":"value"}},{"index":"test-alert","type":"test","id":"1ZMmJHcBMJwNYi41h4z8","score":1.0,"source":{"@timestamp":"2021-01-21T08:54:00+0000","field":"value"}}]}}3.2邮件告警3.2.1创建测试告警规则

vim/opt/soft/elastalert/rules/emailtt.yml

name:test-alert\ntype:any\n#es的监控索引\nindex:test-ale*\n\n#发现1次就告警\nnum_events:1\n#1分钟检查1次,和上面一起配合就是1分钟内触发1次规则就告警\ntimeframe:\nminutes:1\n\n#告警规则,查询索引内field字段的值value,可以用正则进行匹配\nfilter:\n-query:\nquery_string:\nquery:"field:*value*"\n\n##smtp邮件server配置\nsmtp_host:smtp.zoho.com\nsmtp_port:465\nsmtp_ssl:true\nfrom_addr:"test@qq.com"\n###发送邮件的账号密码\nsmtp_auth_file:/opt/soft/elastalert/elastalert/smtp_auth_file.yml\n\n#告警方式\nalert:\n-"email"\n\n#设置只需要的告警字段\ninclude:["_index","uri","remote_addr","http_x_forwarded_for","status"]\n\n#邮件标题\nalert_subject:"test-alert正式环境告警{}"\n#告警邮件接收人\nemail:\n-"test@qq.com"\n-"test1@qq.comk"3.2.2发送邮件的账号密码

vi/opt/soft/elastalert/elastalert/smtp_auth_file.yml

#发件箱的qq邮箱地址,也就是用户名\nuser:test@qq.com\n#不是qq邮箱的登录密码,是授权码\npassword:passwd3.2.3启动告警规则并发送测试数据

cd/opt/soft/elastalert\npython3-melastalert.elastalert--verbose--rule/opt/soft/elastalert/rules/emailtt.yml3.3钉钉告警3.3.1下载插件

cd/opt/soft/elastalert\ngitclonehttps://github.com/xuyaoqiang/elastalert-dingtalk-plugin\ncpelastalert-dingtalk-plugin/elastalert_modules/dingtalk_alert.pyelastalert/3.3.2安装依赖

#查看依赖文件elastalert-dingtalk-plugin/requirements.txt,在对比piplist之后,我发现只需要安装以下内容即可\n\npip3installpyOpenSSL==16.2.0\npip3installrequests==2.18.1\npip3installsetuptools>=11.33.3.3创建测试告警规则

vim/opt/soft/elastalert/rules/dingtt.yml

name:Examplefrequencyrule\ntype:any\nindex:test-alert\nnum_events:1\ntimeframe:\nminutes:1\nfilter:\n-query:\nquery_string:\nquery:"field:value"\n\n\n#告警方式\nalert:\n-"elastalert.dingtalk_alert.DingTalkAlerter"\n\n#钉钉接口\ndingtalk_webhook:"https://oapi.dingtalk.com/robot/send?access_token=钉钉机器人apitoken"\ndingtalk_msgtype:"text"3.3.4启动告警规则并发送测试数据

cd/opt/soft/elastalert\npython3-melastalert.elastalert--verbose--rule/opt/soft/elastalert/rules/dingtt.yml3.3.5钉钉机器人配置

具体可以查看钉钉机器人开发文档

https://github.com/anjia0532/elastalert-wechat-plugin

https://anjia0532.github.io/2017/02/16/elastalert-wechat-plugin/

https://github.com/anjia0532/elastalert-docker

#注意上下字段对应\nalert_text:|\nkibana_url:"https://hostname:5601/app/kibana"\nalarm_reason:"1分钟内login.php至少被访问10次"\nalarm_name:{}\nrequest_uri:{}\nrequest_ip:{}\nresponse_status:{}\nalert_text_args:\n-name\n-request\n-clientip\n-response\nalert_text_type:alert_text_only四、kibana添加elastalert插件4.1elastalert-kibana-plugin插件

kibana中elastalert插件,可以实现在kibana界面上编辑elastalert的告警规则配置。

kibana的elastalert插件需要使用新的bitsensor/elastalertapi服务

官网主推:bitsensor/elastalert-kibana-plugin

但是楼上那个很多小版本都没有,以上没有的话推荐使用以下版本:

nsano-rururu/elastalert-kibana-plugin

/usr/share/kibana/bin/kibana-plugininstallhttps://github.com/nsano-rururu/elastalert-kibana-plugin/releases/download/1.2.0/elastalert-kibana-plugin-1.2.0-7.6.2.zip--allow-root

默认情况下,插件将连接到localhost:3030,也就是kibana和elastalert在同一台服务器上面,那么就不需要添加以下配置。如果您的ElastAlert服务器在其他主机或端口上运行,请在config/kibana.yml文件中添加更改以下选项:

elastalert-kibana-plugin.serverHost:192.168.1.1\nelastalert-kibana-plugin.serverPort:90004.3安装elastalert_docker

查看nsano提供的elastalertapi服务支持列表

我使用的是praecoapp/elastalert-server提供的docker镜像对应elastalert0.2.4版本

cd/opt/soft/\ngitclonehttps://github.com/bitsensor/elastalert.gitelastalert_docker\ncdelastalert_docker\nmkdirrules4.3.2更改配置,apiserver端用的配置是config.json

viconfig/config.json

因为我的kibana和elastalertdocker是同一台机,所以我主要修改es的配置就可以

{\n"appName":"elastalert-server",\n"port":3030,\n"wsport":3333,\n"elastalertPath":"/opt/elastalert",\n"verbose":false,\n"es_debug":false,\n"debug":false,\n"rulesPath":{\n"relative":true,\n"path":"/rules"\n},\n"templatesPath":{\n"relative":true,\n"path":"/rule_templates"\n},\n"es_host":"192.168.3.30",\n"es_port":9200,\n"writeback_index":"elastalert_status"\n}4.3.3更改elastalert配置

vi./config/elastalert.yaml

es_host:192.168.3.30\nes_port:9200\nrules_folder:rules\n\nrun_every:\nseconds:5\n\nbuffer_time:\nminutes:1\n\nes_username:elastic\nes_password:passwd\n\nwriteback_index:elastalert_status\n\nalert_time_limit:\ndays:24.3.4docker-compose.yml配置文件

vidocker-compose.yml

version:'3'\nservices:\nelastalert:\nimage:praecoapp/elastalert-server:20210104\ncontainer_name:elastalert\nhostname:elastalert\nrestart:always\nnetwork_mode:"host"\nports:\n-"3030:3030"\n-"3333:3333"\nvolumes:\n-./config/elastalert.yaml:/opt/elastalert/config.yaml\n-./config/elastalert-test.yaml:/opt/elastalert/config-test.yaml\n-./config/config.json:/opt/elastalert-server/config/config.json\n-./rules:/opt/elastalert/rules\n-./rule_templates:/opt/elastalert/rule_templates\n#-./elastalert:/opt/elastalert/elastalert,#这一句先注释掉,下面有个操作4.3.5启动

docker-composeup-d\n##然后把docker镜像里面的elastalert复制出来\ndockercpelastalert:/opt/elastalert/elastalert.\n##再把docker-compose.yml里面的volumes的注释项去掉重新启动\ndocker-composeup-d4.3.6配套钉钉插件和规则测试

cd/opt/soft/elastalert_docker\ngitclonehttps://github.com/xuyaoqiang/elastalert-dingtalk-plugin\ncpelastalert-dingtalk-plugin/elastalert_modules/dingtalk_alert.pyelastalert/\n##安装依赖\ndockerexec-itelastalertpipinstallpyOpenSSL==16.2.0\ndockerexec-itelastalertpipinstallrequests==2.18.1\ndockerexec-itelastalertpipinstallsetuptools>=11.3\n#创建规则\ntouchrules/dingtt.yml\n#授权,否则页面无法编辑,具体可以看下面的报错示例\nchowncentos.centosrules/dingtt.yml\n#重新启动elastalert容器\ndockerrestartelastalert\n##查看日志\ndockerlogs-f--tail=20elastalert4.4出现的报错:

01:50:07.285ZERRORelastalert-server:\nRoutes:Requestfor'/rules/:id'failedwitherror:\n\n[Error:EACCES:permissiondenied,open'/opt/elastalert/rules/dingtt.yaml']{\nerrno:-13,\ncode:'EACCES',\nsyscall:'open',\npath:'/opt/elastalert/rules/dingtt.yaml'\n}

解决办法:

ElastAlert包含几种具有常见监视范例的规则类型:\nany:匹配任何与给定过滤器匹配的事件,这个是查到了什么便直接报警,属于自定义选项;\nfrequency:匹配Y时间内至少有X个事件的地方\nspike:当事件发生率增加或减少时匹配,API流量陡然上升并马上恢复的时候;\nflatline:在Y时间内少于X个事件时进行匹配,内存或者CPU使用率下降的时候;\nblacklist并whitelist输入:当某个字段与黑名单/白名单匹配时匹配,昨天的那个疑似爬虫的IP地址又出现了;\nchange:当某个字段在一段时间内具有两个不同的值时进行匹配,应用的状态突然从UP转为DOWN;\nnew_term:当字段中出现从未见过的术语时进行匹配,某个枚举类型字段,突然出现了未定义的类型;\ncardinality:当字段的唯一值数量大于或小于阈值时匹配,线上的API服务器突然挂了一台,它是根据唯一值的数量来判定的;5.2报警抑制:减少重复报警

#用来区分报警,跟realert配合使用,在这里意味着,\n#5分钟内如果有重复报警,那么当name不同时,会当做不同的报警处理,可以是数组\nquery_key:\n-name\n\n#5分钟内相同的报警不会重复发送\nrealert:\nminutes:5\n\n#指数级扩大realert时间,中间如果有报警,\n#则按照5->10->20->40->60不断增大报警时间到制定的最大时间,\n#如果之后报警减少,则会慢慢恢复原始realert时间\nexponential_realert:\nhours:15.3报警聚合:相同报警,聚合为一条

#根据报警的内,将相同的报警安装name来聚合\naggregation_key:name\n\n#聚合报警的内容,只展示name与message\nsummary_table_fields:\n-name\n-message5.4报警格式化:突出重要信息

在这里,你可以自定义alert的内容,它的内部使用Python的format来实现的。

alert_subject:"Error{}@{}"\nalert_subject_args:\n-name\n-"@timestamp"\n\nalert_text_type:alert_text_only\nalert_text:|\n###Errorfrequencyexceeds\n>Name:{}\n>Message:{}\n>Host:{}({})\nalert_text_args:\n-name\n-message\n-hostname\n-host六、告警接收方式

Email\nSlack\n企业微信\n钉钉\nalerta:https://github.com/alerta/alerta,告警接收平台\nJIRA\nOpsGenie\nCommands\nHipChat\nMSTeams\nTelegram\nAWSSNS\nVictorOps\nPagerDuty\nExotel\nTwilio\nGitter七、告警需求整理

整理下实施ELK最起码要实现的需求:

https://github.com/Yelp/elastalert

https://github.com/bitsensor/elastalert

https://github.com/bitsensor/elastalert-kibana-plugin

https://github.com/xuyaoqiang/elastalert-dingtalk-plugin

https://github.com/anjia0532/elastalert-wechat-plugin

https://segmentfault.com/a/1190000017553282

https://blog.csdn.net/wenwenxiong/article/details/106048313

https://www.cnblogs.com/liuxinyustu/articles/14228934.html

本文作者欲戴王冠,必承其重...易波叶平本文链接:https://www.cnblogs.com/UncleZhao/p/14314270.html

好了,文章到这里就结束啦,如果本次分享的flatline是什么意思和elastalert问题对您有所帮助,还望关注下本站哦!

本站涵盖的内容、图片、视频等数据,部分未能与原作者取得联系。若涉及版权问题,请及时通知我们并提供相关证明材料,我们将及时予以删除!谢谢大家的理解与支持!

Copyright © 2023