目录

    phoenix监控平台运行常见的报错异常及解决方法


    phoenix监控平台运行常见的报错异常及解决方法

    源码仓库地址

    Gitee仓库 GitHub仓库

    1.Problematic frame:C [sigar-amd64-winnt.dll+0x14ed4]

    jdk 版本和 sigar-amd64-winnt.dll 不匹配,需要安装合适的 jdk 版本,如:jdk1.8.0_241。

    注:类似问题都考虑jdk版本不匹配造成的,需要更换jdk版本。

    2.在 jdk1.8 环境下,出现错误:JCE cannot authenticate the provider BC

    看到这个不用慌,只是因为缺少一个 jar 而已,添加一个 jar,修改一下 jdk 安全配置就搞定。

    a.修改jdk配置

    找到自己本地 jdk 安装根目录,进入 jre/lib/security 目录,编辑 java.security 文件,操作如下:

    # Linux和MacOS记得要加sudo,windows下直接编辑内容即可
    # 进入jdk目录
    cd /Library/Java/JavaVirtualMachines/jdk1.8.0_211.jdk/Contents/Home/jre/lib/security
    # 编辑security文件
    sudo vim java.security
    

    打开文件后,添加如下配置:

    # 这个序号11根据自己的配置写就行,有可能你的配置和我不一样
    security.provider.11=org.bouncycastle.jce.provider.BouncyCastleProvider
    

    人家本身是有其他安全配置的,添加完咱们的配置后,配置长这样:

    # There must be at least one provider specification in java.security.
    # There is a default provider that comes standard with the JDK. It
    # is called the "SUN" provider, and its Provider subclass
    # named Sun appears in the sun.security.provider package. Thus, the
    # "SUN" provider is registered via the following:
    #
    #    security.provider.1=sun.security.provider.Sun
    #
    # (The number 1 is used for the default provider.)
    #
    # Note: Providers can be dynamically registered instead by calls to
    # either the addProvider or insertProviderAt method in the Security
    # class.
    
    #
    # List of providers and their preference orders (see above):
    #
    security.provider.1=sun.security.provider.Sun
    security.provider.2=sun.security.rsa.SunRsaSign
    security.provider.3=sun.security.ec.SunEC
    security.provider.4=com.sun.net.ssl.internal.ssl.Provider
    security.provider.5=com.sun.crypto.provider.SunJCE
    security.provider.6=sun.security.jgss.SunProvider
    security.provider.7=com.sun.security.sasl.Provider
    security.provider.8=org.jcp.xml.dsig.internal.dom.XMLDSigRI
    security.provider.9=sun.security.smartcardio.SunPCSC
    security.provider.10=apple.security.AppleProvider
    security.provider.11=org.bouncycastle.jce.provider.BouncyCastleProvider
    #
    # Sun Provider SecureRandom seed source.
    

    b.添加jar

    jar下载页面:https://gitee.com/monitoring-platform/phoenix/attach_files,下载:bcprov-jdk15on-1.69.jar
    将刚才下载好的 jar 文件(bcprov-jdk15on-1.69.jar),复制到 jre/lib/ext/ 目录下,然后就OK了!

    3.阿里的Druid警告 discard long time none received connection

    解决方案:

    方案一,在启动程序时在运行参数中增加:-Ddruid.mysql.usePingMethod=false
    方案二,在 Spring Boot 项目中,可在启动类中添加如下静态代码快:

    static {
        System.setProperty("druid.mysql.usePingMethod","false");
    }
    

    方案三,类文件配置。在项目的 DruidConfig 类中新增加:

    /*
     * 解决druid日志警告:discard long time none received connection:xxx 
     */
    @PostConstruct
    public void setProperties(){
        System.setProperty("druid.mysql.usePingMethod","false");
    }
    

    4.执行shell脚本报错 /usr/bin/env: ‘bash\r’: No such file or directory

    在执行 shell 脚本时提示这样的错误主要是由于 shell 脚本文件是 dos 格式,即每一行结尾以 \r\n 来标识,而 unix 格式的文件行尾则以 \n 来标识。

    解决方案:
    方案一:使用 linux 命令 dos2unix filename,直接把文件转换为 unix 格式;
    方案二:使用 sed 命令 sed -i "s/\r//" filename 或者 sed -i "s/^M//" filename 直接替换结尾符为 unix 格式;
    方案三:vi filename 打开文件,执行 : set ff=unix 设置文件为 unix,然后执行 :wq,保存成 unix 格式。

    5.Java客户端集成监控后监控服务端无法发现此客户端

    解决方案:
    1.检查监控配置文件是否配置正确,尤其是配置项 monitoring.server.url ,看监控服务端 URL 地址是否正确;
    2.排查 maven 依赖,看是否有版本冲突。

    6.出现错误:javax.mail.AuthenticationFailedException: failed to connect, no password specified?

    未正确配置电子邮箱,需要在 SpringBoot 配置文件中正确配置电子邮箱。

    #############################################电子邮件配置###############################################
    spring:
      mail:
        host: smtp.qq.com
        username: xxx@qq.com
        password: xxx
        protocol: smtp
        default-encoding: UTF-8
        port: 465
        properties:
          mail:
            debug: false
            smtp:
              auth: true
              ssl:
                enabled: true
              starttls:
                enable: true
                required: true
              socketFactory:
                port: 465
                class: javax.net.ssl.SSLSocketFactory
                fallback: false
    

    7.docker部署监控UI端时登录验证码无法显示,导致无法正常登录

    项目基于 OracleJDK 1.8 来做的,图片验证码可以正常显示。但是发布到 docker 更换成 OpenJDK 1.8 后,验证码无法显示,后台代码抛出异常,因为 OpenJDK 比 OracleJDK 简化了一些功能,所以用 docker 打包的时候更小,后端生成验证码所要用到 java 的 awt 组件就被简化了,导致一堆的空指针从而无法初始化。

    解决方案:
    在监控 UI 端通过配置项,关闭登录验证码功能。

    ##############################################phoenix配置#################################################
    phoenix:
      auth:
        type: self
        #登录认证配置
        self-auth:
          login-captcha:
            #是否启用验证码
            enable: false
    
    end
  1. 作者: 锋哥 (联系作者)
  2. 发表时间: 2024-02-27 10:57
  3. 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
  4. 转载声明:如果是转载博主转载的文章,请附上原文链接
  5. 公众号转载:请在文末添加作者公众号二维码(公众号二维码见右边,欢迎关注)
  6. 评论

    站长头像 知录

    你一句春不晚,我就到了真江南!

    文章0
    浏览0

    文章分类

    标签云