Git Product home page Git Product logo

autohomecorp / frostmourne Goto Github PK

View Code? Open in Web Editor NEW
1.3K 43.0 301.0 64.08 MB

Frostmourne(霜之哀伤监控平台)是基于Elasticsearch, Prometheus, SkyWalking, InfluxDB,Mysql/TiDB,ClickHouse, SqlServer, IoTDB数据的分布式监控报警系统. Monitor & alert & alarm for Elasticsearch,Prometheus data。主要使用springboot2 + vue-element-admin

Home Page: https://frostmourne-demo.github.io

License: MIT License

Java 71.79% HTML 0.04% JavaScript 11.98% Vue 15.16% Shell 0.22% SCSS 0.80%
elasticsearch elastalert monitor logging springboot2 alert alarm vue-element-admin vue element-ui

frostmourne's People

Contributors

dependabot[bot] avatar fangpeng-lingoace avatar huaqiu2022 avatar limboinf avatar littleshrimp1987 avatar wuaping avatar wxmclub avatar xyzj91 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

frostmourne's Issues

监控编辑保存的问题

提交保存是失败,报如下异常

feign.FeignException: Unexpected character ('<' (code 60)): expected a valid value (JSON String, Number, Array, Object or token 'null', 'true' or 'false')
at [Source: (BufferedReader); line: 1, column: 2] reading POST http://192.168.1.109:8089/xxl-job-admin/jobinfo/add
at feign.FeignException.errorReading(FeignException.java:120) ~[feign-core-10.5.1.jar:?]
at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:157) ~[feign-core-10.5.1.jar:?]
at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:80) ~[feign-core-10.5.1.jar:?]
at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:103) ~[feign-core-10.5.1.jar:?]
at com.sun.proxy.$Proxy95.addJob(Unknown Source) ~[?:?]
at com.autohome.frostmourne.monitor.service.admin.impl.ScheduleService.addJob(ScheduleService.java:33) ~[classes/:?]
at com.autohome.frostmourne.monitor.service.admin.impl.AlarmAdminService.saveJobSchedule(AlarmAdminService.java:406) ~[classes/:?]
at com.autohome.frostmourne.monitor.service.admin.impl.AlarmAdminService.save(AlarmAdminService.java:267) ~[classes/:?]
at com.autohome.frostmourne.monitor.service.admin.impl.AlarmAdminService.atomicSave(AlarmAdminService.java:110) ~[classes/:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_91]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_91]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_91]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_91]
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344) ~[spring-aop-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:205) ~[spring-aop-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at com.sun.proxy.$Proxy97.atomicSave(Unknown Source) ~[?:?]
at com.autohome.frostmourne.monitor.controller.AdminController.save(AdminController.java:29) ~[classes/:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_91]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_91]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_91]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_91]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:888) ~[spring-webmvc-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793) ~[spring-webmvc-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040) [spring-webmvc-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) [spring-webmvc-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) [spring-webmvc-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) [spring-webmvc-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:660) [tomcat-embed-core-9.0.29.jar:9.0.29]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) [spring-webmvc-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) [tomcat-embed-core-9.0.29.jar:9.0.29]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) [tomcat-embed-core-9.0.29.jar:9.0.29]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.29.jar:9.0.29]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) [tomcat-embed-websocket-9.0.29.jar:9.0.29]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-9.0.29.jar:9.0.29]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.29.jar:9.0.29]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) [spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-9.0.29.jar:9.0.29]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.29.jar:9.0.29]
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) [spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-9.0.29.jar:9.0.29]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.29.jar:9.0.29]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) [spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-9.0.29.jar:9.0.29]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.29.jar:9.0.29]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) [tomcat-embed-core-9.0.29.jar:9.0.29]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) [tomcat-embed-core-9.0.29.jar:9.0.29]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:526) [tomcat-embed-core-9.0.29.jar:9.0.29]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) [tomcat-embed-core-9.0.29.jar:9.0.29]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.29.jar:9.0.29]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) [tomcat-embed-core-9.0.29.jar:9.0.29]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) [tomcat-embed-core-9.0.29.jar:9.0.29]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:367) [tomcat-embed-core-9.0.29.jar:9.0.29]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.29.jar:9.0.29]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:860) [tomcat-embed-core-9.0.29.jar:9.0.29]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1591) [tomcat-embed-core-9.0.29.jar:9.0.29]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.29.jar:9.0.29]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_91]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_91]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.29.jar:9.0.29]
at java.lang.Thread.run(Thread.java:745) [?:1.8.0_91]
Caused by: com.fasterxml.jackson.core.JsonParseException: Unexpected character ('<' (code 60)): expected a valid value (JSON String, Number, Array, Object or token 'null', 'true' or 'false')
at [Source: (BufferedReader); line: 1, column: 2]
at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1840) ~[jackson-core-2.10.1.jar:2.10.1]
at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:712) ~[jackson-core-2.10.1.jar:2.10.1]
at com.fasterxml.jackson.core.base.ParserMinimalBase._reportUnexpectedChar(ParserMinimalBase.java:637) ~[jackson-core-2.10.1.jar:2.10.1]
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._handleOddValue(ReaderBasedJsonParser.java:1917) ~[jackson-core-2.10.1.jar:2.10.1]
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser.nextToken(ReaderBasedJsonParser.java:773) ~[jackson-core-2.10.1.jar:2.10.1]
at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:4340) ~[jackson-databind-2.10.1.jar:2.10.1]
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4189) ~[jackson-databind-2.10.1.jar:2.10.1]
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3234) ~[jackson-databind-2.10.1.jar:2.10.1]
at feign.jackson.JacksonDecoder.decode(JacksonDecoder.java:61) ~[feign-jackson-10.4.0.jar:?]
at feign.SynchronousMethodHandler.decode(SynchronousMethodHandler.java:178) ~[feign-core-10.5.1.jar:?]
at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:142) ~[feign-core-10.5.1.jar:?]
... 65 more

es数据分桶统计后如何按BUCKETS来告警

大佬好,又来提问了,es数据分桶统计后如何按BUCKETS来告警,返回的json串中有BUCKETS字段,可以循环输出在一个告警项中,或者按每个BUCKETS中的值分开告警吗?

数据查询页面不支持ES8

org.elasticsearch.ElasticsearchStatusException: Elasticsearch exception [type=x_content_parse_exception, reason=[1:792] [date_histogram] unknown field [interval] did you mean [fixed_interval]?]

关于功能需求。

1、可以加入排班制度,不在班次的人不会被发送告警消息。 我们公司是白夜休休的值班制度,可以设置不值班的时间不会被企业微信机器人@,不被发送邮件等。。
2、希望相关的技术文档更多更详细一些。

用户问题

每次新增用户的时候需要重启spi服务,没法自助处理。

建议前期先增加用户管理功能方便用户自助维护,后期根据功能需要再对接第三方用户系统,比如sso,ldap之类的。

连接Microsoft LDAP异常

ldap_enabled=true
spring_ldap_urls=192.168.1.2
spring_ldap_username=tech
spring_ldap_password=abc@123
spring_ldap_base=ou=技术部,dc=sh,dc=energy-blockchain,dc=com
spring_ldap_auth_searchFilter=sAMAccountName={0}

"2020-11-30T10:53:56.281+08:00" "ERROR" "com.autohome.frostmourne.monitor.service.account.impl.LdapAuthService" "38" "org.springframework.ldap.UncategorizedLdapException" "Uncategorized exception occured during LDAP processing; nested exception is javax.naming.NamingException: Cannot parse url: 192.168.1.2/ou=æ%C2%8A%C2%80æ%C2%9C¯é%C2%83¨,dc=sh,dc=energy-blockchain,dc=com [Root exception is java.net.MalformedURLException: Invalid URI: 192.168.1.2/ou=æ%C2%8A%C2%80æ%C2%9C¯é%C2%83¨,dc=sh,dc=energy-blockchain,dc=com]" "error when ldap authenticate user: bin.sun" "com.autohome.frostmourne.monitor.service.account.impl.LdapAuthService" "validate" "-" "-" "tech" "frostmourne" "frostmourne.monitor" "-" "25" "http-nio-10054-exec-3" "-" "192.168.1.166" "-" "-" "-" "-" "org.springframework.ldap.UncategorizedLdapException: Uncategorized exception occured during LDAP processing; nested exception is javax.naming.NamingException: Cannot parse url: 192.168.1.2/ou=æ%C2%8A%C2%80æ%C2%9C¯é%C2%83¨,dc=sh,dc=energy-blockchain,dc=com [Root exception is java.net.MalformedURLException: Invalid URI: 192.168.1.2/ou=æ%C2%8A%C2%80æ%C2%9C¯é%C2%83¨,dc=sh,dc=energy-blockchain,dc=com]

不清LDAP这块的配置该如何配置的,报了一个如图的错误,用的是微软的AD Server,配置如图,Urls和base这两块配置找了下没有可供参考的。

是否可以添加手动确认告警actived

是否可以添加手动确认告警actived, 比如告警连续在发生然后我们可以手动点击这个告警然后进行确认,一段时间内此告警就不会发生了。

提一条关于恢复告警的小建议

能否支持单独的查询项来确定告警是否恢复。因为有些服务的告警日志是重要且偶发的,服务日志可以定义相应的关键字来确定服务状态是否恢复。望采纳(●'◡'●)

通过HTTP监控告警出现unknown exception

我想通过监控prometheus http api 来触发告警, 在后台配置好监控地址后, 浏览数据正常.
{
"data": {
"resultType": "vector",
"result": [
{
"metric": {
"name": "kafka_cluster_partition_atminisr",
"instance": "localhost:9991",
"job": "ad-kafka",
"partition": "0",
"topic": "ad_station"
},
"value": [
1648002724.339,
"0"
]
}
]
},
"HTTP_STATUS": 200,
"EXPRESSION": "data.result[0].value[0] > 10",
"HTTP_COST": 2,
"status": "success"
}

然后在告警规则中判断表达式: data.result[0].value[0] > 10
最后保存的时候提示: unknown exception

请问我有哪里写的有问题吗?

使用ldap登录,返回用户不存在

非常感谢此项目,目前在使用的时候,遇到一些问题,希望能白忙之中帮忙解答一下。
谢谢。

情况

开启了 ldap 认证之后,登录提示用户不存在(ldap中是存在登录的用户的,并且在 Jenkins 中配置 ldap 登录,同一用户也能登录 Jenkins)。

monitor 版本

部署使用的是 docker-compose ,镜像:

registry.cn-hangzhou.aliyuncs.com/kechangqing/frostmourne:0.4

ldap 配置

ldap_enabled: 'true'
spring_ldap_urls: ldap://example.com:10389
spring_ldap_username: cn=admin,dc=example,dc=com
spring_ldap_password: xxxxxx
spring_ldap_base: dc=example,dc=com
spring_ldap_auth_searchFilter: uid={0}

同样尝试了 spring_ldap_base 中指定 ou,也是提示用户不存在。

monitor 报错日志

"2021-02-23T11:06:48.684+08:00" "ERROR" "com.autohome.frostmourne.monitor.config.GlobalControllerAdvice"        "24"    "com.autohome.frostmourne.core.contract.ProtocolException"      "用户不存在"    "global catch exception"     "com.autohome.frostmourne.monitor.config.GlobalControllerAdvice"        "handleProtocolException"       "-"     "-"     "tech"  "frostmourne"   "frostmourne.monitor"   "-"     "217"   "http-nio-10054-exec-10"     "-"     "172.20.0.4"    "-"     "-"     "-"     "-"     "com.autohome.frostmourne.core.contract.ProtocolException: 用户不存在
        at com.autohome.frostmourne.monitor.controller.UserController.login(UserController.java:52)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:90)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
        at java.lang.reflect.Method.invoke(Method.java:508)
        at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)
        at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
        at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:879)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793)
        at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
        at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373)
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590)
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1160)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:822)

ldap 日志

发现 ldap 中收到了 2 次请求

60347148 conn=1473 fd=28 ACCEPT from IP=172.18.0.1:53676 (IP=0.0.0.0:389)
60347148 conn=1473 op=0 BIND dn="cn=admin,dc=example,dc=com" method=128
60347148 conn=1473 op=0 BIND dn="cn=admin,dc=example,dc=com" mech=SIMPLE ssf=0
60347148 conn=1473 op=0 RESULT tag=97 err=0 text=
60347148 conn=1473 op=1 SRCH base="dc=example,dc=com" scope=2 deref=3 filter="(uid=testuser)"
60347148 conn=1473 op=1 SEARCH RESULT tag=101 err=0 nentries=1 text=
60347148 conn=1473 op=2 UNBIND
60347148 conn=1473 fd=28 closed
60347148 conn=1474 fd=28 ACCEPT from IP=172.18.0.1:53680 (IP=0.0.0.0:389)
60347148 conn=1474 op=0 BIND dn="uid=testuser,ou=People,dc=example,dc=com" method=128
60347148 conn=1474 op=0 BIND dn="uid=testuser,ou=People,dc=example,dc=com" mech=SIMPLE ssf=0
60347148 conn=1474 op=0 RESULT tag=97 err=0 text=
60347148 conn=1474 op=1 UNBIND
60347148 conn=1474 fd=28 closed

报警发送添加对用户组的支持并且可以自动发现供选取

[简述你的问题]
希望能通过所属团队查看监控列表,报警发送支持用户组的形式。
对已存在的用户组,在报警发送界面可以支持自动发现供选取。

使用版本
[请提供你使用的frostmourne版本]
0.1-RELEASE

具体表现[截图可能会更好些,最好能截全]
GroupA 对应 UserA,UserB,UserC
通过选择GroupA即可发送至UserA,UserB,UserC

其他
用户组中的用户可能属于不同部门,需要灵活调整。

[注:] 完成后请关闭 issue

docker部署,mysql监控,后台会报查询mysql出错。

从后台执行日志看,应该是执行查询时没有传递mysql的密码引起的。
我反复确认过多次,数据源肯定是定义了用户名和密码。我查看data_source表,proterties字段中保存了正确的用户名密码。
并且在新增告警时,页面中的“测试”按钮执行是能正确返回结果的。

"2021-01-30T00:34:39.210+08:00" "WARN" "com.autohome.frostmourne.monitor.service.core.execute.GenerateShortLinkService" "55" "-" "-" "error when generate short link. response: {""returncode"":0,""message"":""ok"",""result"":""""}" "com.autohome.frostmourne.monitor.service.core.execute.GenerateShortLinkService" "generate" "-" "-" "tech" "frostmourne" "frostmourne.monitor" "-" "394" "Thread-264" "-" "172.18.0.4" "-" "-" "-" "-" "-"
"2021-01-30T00:34:47.230+08:00" "ERROR" "com.alibaba.druid.pool.DruidDataSource" "53" "java.sql.SQLException" "Access denied for user 'xxxxxx'@'10.10.5.220' (using password: YES)" "create connection error, url: jdbc:mysql://10.10.5.27:3306/xxxxxxx" "com.alibaba.druid.support.logging.Log4j2Impl" "error" "-" "-" "tech" "frostmourne" "frostmourne.monitor" "-" "226" "Druid-ConnectionPool-Create-1187914410" "-" "172.18.0.4" "-" "-" "-" "-" "java.sql.SQLException: Access denied for user 'xxxxxx'@'10.10.5.220' (using password: YES)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:836)
at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:456)
at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:246)
at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:197)
at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1375)
at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1431)
at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1888)

希望支持按指定字段进行分组Count功能

现在监控的数据配置里,聚合类型指定为count时,就无法再指定聚合字段。(指定其他聚合类型时,就可以指定聚合字段)。
无法满足一次监控多个动态桶的聚合指标是否异常的需求。

希望修改一下,允许按指定聚合字段进行分组count,并进行指标判断和告警。

当数据源为多层json时,[数据查询]中部分字段会显示为undefined

[简述你的问题]

当数据为多层json时,[数据查询]中部分字段会显示为undefined

使用版本

[请提供你使用的frostmourne版本]
master:6452c52

具体表现[截图可能会更好些,最好能截全]

数据查询——>当数据源为多层json格式
例如:

{
    "@timestamp": "2020-07-08T12:40:04.712Z",
    "architecture": "x86_64",
    "os": {
        "kernel": "6.1.7601.24545 (win7sp1_ldr_escrow.200102-1707)",
        "build": "7601.24544",
        "platform": "windows",
        "version": "6.1",
        "family": "windows",
        "name": "Windows Server 2008 R2 Enterprise"
    }
}

其中的 os 字段在表格中会显示为 undefined,数据展开后显示正常

@timestamp architecture os
2020-07-08T12:40:04.712Z x86_64 undefined

[注:] 完成后请关闭 issue

配置告警项提示问题

配置告警项的时候,没有任务提示或提示比较隐蔽,一眼看不出来配置的有没有问题

建议调度配置后可以显示预期执行时间

[简述你的问题]
调度配置完成后,希望能提供一个按钮,查看接下来几次的执行时间。

使用版本

[请提供你使用的frostmourne版本]
0.1-RELEASE

具体表现[截图可能会更好些,最好能截全]

类似 Cron 为 0 0/40 * * * ? ,点击按钮显示如下:
2020-06-16 11:40:00
2020-06-16 12:00:00
2020-06-16 12:40:00
2020-06-16 13:00:00
2020-06-16 13:40:00

[注:] 完成后请关闭 issue

frostmoure如何配置AWS_ES作为数据源

java.lang.NumberFormatException: For input string: ""//vpc-oregon-elk-es.xxxxxxxxxxxxx.us-west-2.es.amazonaws.com"
1.配置ES数据源是否只能通过:地址+端口形式(127.0.0.1:91200),现在使用AWS_ES地址(服务地址:https//vpc-oregon-elk-es.xxxxxxxxxxxxx.us-west-2.es.amazonaws.com)配置数据源出现以上错误
2.使用地址+端口形式(vpc-oregon-elk-es.xxxxxxxxxxxxx.us-west-2.es.amazonaws.com:443)但由于AWS_ES服务现在原因出现400,AWS_ES服务不支持http请求请问如何
请教一下需要如何进行正确配置

提两个小建议

1、如果事件发生的时间是21点到早上6点,非紧急告警可以只做记录,而非直接推送。
2、获取到告警消息后 支持告警的分组处理,比如 获取到service.name,发给相关的负责人

火狐浏览器兼容问题

目前时间类型的字段在火狐浏览器里面会出现无法正常展示的问题,希望能够在后面的版本中进行修复

聚合类型为count时可以按字段吗

各位大佬好,目前的平台在聚合类型为count时可以按字段统计吗,如下:
nginx的5xx按域名字段来统计数量并告警,比如单个域名5xx达到10次就告警
目前的count是不区分域名,统计的都是所有值

连接https的Elasticsearch失败

"2021-03-22T17:33:52.008+08:00" "ERROR" "com.autohome.frostmourne.monitor.dao.elasticsearch.EsRestClientContainer" "102" "javax.net.ssl.SSLHandshakeException" "PKIX path building failed: com.ibm.security.cert.IBMCertPathBuilderException: unable to find valid certification path to requested target" "error when check cluster health" "com.autohome.frostmourne.monitor.dao.elasticsearch.EsRestClientContainer" "health" "-" "-" "tech" "frostmourne" "frostmourne.monitor" "-" "222" "http-nio-10054-exec-1" "-" "10.101.1.211" "-" "-" "-" "-" "javax.net.ssl.SSLHandshakeException: PKIX path building failed: com.ibm.security.cert.IBMCertPathBuilderException: unable to find valid certification path to requested target
at org.elasticsearch.client.RestClient$SyncResponseListener.get(RestClient.java:947)
at org.elasticsearch.client.RestClient.performRequest(RestClient.java:229)
at org.elasticsearch.client.RestHighLevelClient.internalPerformRequest(RestHighLevelClient.java:1762)
at org.elasticsearch.client.RestHighLevelClient.performRequest(RestHighLevelClient.java:1732)
at org.elasticsearch.client.RestHighLevelClient.performRequestAndParseEntity(RestHighLevelClient.java:1694)
at org.elasticsearch.client.ClusterClient.health(ClusterClient.java:146)
at com.autohome.frostmourne.monitor.dao.elasticsearch.EsRestClientContainer.health(EsRestClientContainer.java:100)
at com.autohome.frostmourne.monitor.dao.elasticsearch.ElasticsearchSourceManager.reloadEsRestClientContainer(ElasticsearchSourceManager.java:47)
at com.autohome.frostmourne.monitor.service.admin.impl.DataAdminService.saveDataSource(DataAdminService.java:74)
at com.autohome.frostmourne.monitor.controller.DataNameController.saveDataSource(DataNameController.java:31)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:90)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
at java.lang.reflect.Method.invoke(Method.java:508)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:879)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:747)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1160)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:822)
Caused by: javax.net.ssl.SSLHandshakeException: PKIX path building failed: com.ibm.security.cert.IBMCertPathBuilderException: unable to find valid certification path to requested target
at com.ibm.jsse2.g.a(g.java:58)
at com.ibm.jsse2.ba.a(ba.java:38)
at com.ibm.jsse2.ba.a(ba.java:101)
at com.ibm.jsse2.ba.a(ba.java:62)
at com.ibm.jsse2.y$c.a(y$c.java:166)
at com.ibm.jsse2.y$c.a(y$c.java:10)
at com.ibm.jsse2.y$c.consume(y$c.java:6)
at com.ibm.jsse2.p.consume(p.java:43)
at com.ibm.jsse2.Z.a(Z.java:73)
at com.ibm.jsse2.bf$a$b.a(bf$a$b.java:2)
at com.ibm.jsse2.bf$a$b.run(bf$a$b.java:3)
at java.security.AccessController.doPrivileged(AccessController.java:774)
at com.ibm.jsse2.bf$a.run(bf$a.java:26)
at org.apache.http.nio.reactor.ssl.SSLIOSession.doRunTask(SSLIOSession.java:288)
at org.apache.http.nio.reactor.ssl.SSLIOSession.doHandshake(SSLIOSession.java:356)
at org.apache.http.nio.reactor.ssl.SSLIOSession.isAppInputReady(SSLIOSession.java:537)
at org.apache.http.impl.nio.reactor.AbstractIODispatch.inputReady(AbstractIODispatch.java:120)
at org.apache.http.impl.nio.reactor.BaseIOReactor.readable(BaseIOReactor.java:162)
at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvent(AbstractIOReactor.java:337)
at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvents(AbstractIOReactor.java:315)
at org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:276)
at org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:104)
at org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworkerIOReactor.java:591)
... 1 more
Caused by: com.ibm.jsse2.util.j: PKIX path building failed: com.ibm.security.cert.IBMCertPathBuilderException: unable to find valid certification path to requested target
at com.ibm.jsse2.util.h.a(h.java:120)
at com.ibm.jsse2.util.h.b(h.java:5)
at com.ibm.jsse2.util.g.a(g.java:10)
at com.ibm.jsse2.bq.a(bq.java:32)
at com.ibm.jsse2.bq.a(bq.java:70)
at com.ibm.jsse2.bq.checkServerTrusted(bq.java:10)
at com.ibm.jsse2.y$c.a(y$c.java:99)
... 19 more
Caused by: com.ibm.security.cert.IBMCertPathBuilderException: unable to find valid certification path to requested target
at com.ibm.security.cert.SunCertPathBuilder.build(SunCertPathBuilder.java:139)
at com.ibm.security.cert.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:124)
at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:292)
at com.ibm.jsse2.util.h.a(h.java:124)
... 25 more

LDAP账号同步问题

这个只做了密码认证功能,每次来新人的时候需要手动创建用户信息,比较麻烦

当 [数据名] 未填写 [说明] 时,监控编辑中数据源选择显示为空白(可选取)

[简述你的问题]

当 [数据名] 未填写 [说明] 时,监控编辑中数据源选择显示为空白(可选取)

使用版本

[请提供你使用的frostmourne版本]
master:6452c52

具体表现[截图可能会更好些,最好能截全]

数据名

ID 名称 说明
1 dev dev_env
2 ops
3 prod

监控编辑——>数据配置——>数据,下拉框显示为

  • dev_env
  • 空白
  • 空白

其他

可以考虑下拉框显示 [数据名] 中的 [名称],鼠标悬停显示 [说明]

[注:] 完成后请关闭 issue

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.