Arthas排查Prometheus请求慢
背景
线上突然出现很多的异常,发现是普罗米休斯在采集指标的时候设置的时间太短,倒是10s之内还没有返回消息直接断开连接导致的异常
注解@WebEndpoint(id = "prometheus")标识在PrometheusScrapeEndpoint上面,其实@WebEndpoint 就相当于声明成一个@RestController的控制类。
当/actuator/prometheus请求进来之后就会请求到PrometheusScrapeEndpoint里面,我们可以看到在scrape方法上有个@ReadOperation(producesFrom = TextOutputFormat.class)注解
/** * {@link Endpoint @Endpoint} that outputs metrics in a format that can be scraped by the * Prometheus server. * * @author Jon Schneider * @author Johnny Lim * @since ...
ESP32-LyraT-Mini从0开始的烧录教程
我使用的是Mac系统,之前使用过Arduino玩过Esp8266并且加了个屏幕(只是玩玩,没有很深),这次搞到了一个ESP32-LyraT-Mini,也是简单入个门。
准备工作
安装ESP-IDF
安装ccache,ccache是一个编译器缓存,该工具会高速缓存编译生成的信息,并在编译的特定部分使用高速缓存的信息,可以加速编译的速度。brew install ccache
安装 CMake 和 Ninja 编译工具brew install cmake ninja dfu-util
确定已经安装python3python3 --version
如果没有安装执行brew install python3
拉取ESP-IDF的代码mkdir -p ~/espcd ~/espgit clone --recursive https://github.com/espressif/esp-idf.git
TO BE CONTINUED
参考文档
ESP32-LyraT-Mini V1.2 入门指南
ESP-IDF 版本简介
Set up
Linux更新之后Systemd启动SYSTEMD_CGROUP_ENABLE_LEGACY_FORCE
在一次Manjaro的日常更新之后,事物当时确实是更新失败了,是一个应用更新失败了,和内核更新无影响,但是重启后系统启动失败,报下面的错误
D: recovering journalD: clean 1969453/15630336 files, 56589956/62515748 blocks Refusing to run under cgroup v1, SYSTEMD_CGROUP_ENABLE_LEGACY_FORCE=1 not specified on kernel comnand line.1.520240] systend[1]: Freezing execution.
原因分析
电脑更新了systemd的新版本,但是可能因为事物的问题没有添加上启动参数,新版本的systemd不支持cgroup v1,需要启动参数开启兼容模式
* Support for cgroup v1 ('legacy' and 'hybrid' hierarchies) is now considered obsolete and system ...
Google Auth 迁移到 Chrome 拓展程序
公司日常开发有很多时候需要用到两步验证,目前我的两步验证码是保存在手机上面的Google Authenticator。
每次登陆的时候都需要打开手机进行验证很麻烦。决定找一个能在电脑上面使用两步验证的app。
因为不想删掉之前的两步验证重新添加,所以还需要能迁移过去。
需求点
能够从Google Authenticator迁移到新寻找的App上面。
免费。
在App Store上面找到了几款应用介绍非常不错的,并且还能有TouchID来解锁的功能,兴致冲冲去下载之后发现要内购。
没错这几个都要钱
找了一圈Crack也没有找到,无奈之下找到了个Chrome的拓展程序,也可以进行迁移导入 。
先上链接
选择导入备份之后
在Google Authenticator点击转移账号,将生成的二维码截图或者拍照
我尝试使用QRCODE导入,但是识别不到。
最终使用了扫描二维码出来的内容,使用导入备份文本解决的。
JumpServer跳过登陆验证使用终端直接登陆
前言
公司在经历一段安全管控之后,JumpServer就连使用跳板到测试环境也需要两步验证了,但是每次这样都会很麻烦,本来使用三方的tabby进行连接就很优雅了,使用https://github.com/jumpserver/jumpserver/issues/10061两步验证之后都很繁琐。
发现MFA的配置无法跳过,下面的内容也只能起到跳过密码的操作
自动登陆也是可以实现的,不过我懒得去弄了,详情见延展阅读2
MFA 是二次认证。用户登录 JumpServer 时,密码是第一层,第二层是 MFA。通过 Terminal 登录时,也是一样的。使用密钥 SSH 登录,只是第一层认证通过了,所以会显示 MFA 等待输入。如果用户开启了 MFA,那无论是 Web 还是终端都需要认证。从安全角度来讲,没问题的。
今天在看JumpServer的个人资料设置的时候发现了个SSH Key设置
那么不就简单多了,直接通过SSH Key进行免密登陆
操作
到你的JumpServer上找到上图设置,在头像的个人资料设置那里就有
点击Reset and download SSH Key下载到一 ...
Liquibase使用
安装liquibase
我这里用的是Manjaro,直接使用yay进行安装
yay -S liquibase
安装MySQL的驱动
通过yay安装的liquibase会在/opt/liquibase/internal/lib,将下好的驱动放到这个目录下
创建一个liquibase的配置文件
# Mysql连接串driver: com.mysql.cj.jdbc.Driverclasspath: /opt/liquibase/internal/lib/mysql-connector-j-8.1.0.jarurl: jdbc:mysql://127.0.0.1:3306/liquisbase?useSSL=false&serverTimezone=UTC&autoReconnect=true&allowPublicKeyRetrieval=true&useOldAliasMetadataBehavior=trueusername: liquibasepassword: 123456changeLogFile: changeLog-mysql.x ...
HtmlUnit爬虫获取页面信息
HtmlUnit是一个没有GUI的模拟浏览器测试框架,之前在Python使用过Slenium进行自动化测试和一些爬虫的操作。但是Slenium在使用的时候会出现一个浏览器界面进行真实操作。
HtmlUnit可能在编排代码的时候不知道浏览器现在是什么情况,可能会有很难写下去的情况。
POM中引入HtmlUnit
<!-- https://mvnrepository.com/artifact/net.sourceforge.htmlunit/htmlunit --><dependency> <groupId>net.sourceforge.htmlunit</groupId> <artifactId>htmlunit</artifactId> <version>2.70.0</version></dependency>
编写代码
package org.example;import com.gargoylesoftware.htmlunit.Browser ...
自生成IP证书实现局域网Https访问
当我们在本地进行测试和部署的时候,有些会涉及到Https的部署,或者客户系统需要Https内网的加密通话。但是Https证书一般都是颁发给域名的,我们本地应该怎么操作呢。
生成需要的对应IP的Https证书,keytool就是java自带的工具,可以进行证书的生成等操作。
keytool -genkeypair -alias myapp -keyalg RSA -keysize 2048 -keystore keystore.jks -validity 3650 -dname "CN=example.com" -ext "SAN=IP:192.168.1.1"
转换证书,该证书安装在使用者的电脑上
keytool -exportcert -alias keystore -file keystore.crt -keystore keystore.jks
keystore.jks就可以放在自己的应用下,作为Https证书使用,keystore.crt安装在要访问应用的用户电脑上。
这样咱们在内网就可以使用Https加密的IP地址访 ...
Feign Resilience4j 与 Hystrix 的碰撞
背景
在升级Springboot版本的时候,之前使用的是ContextHolder
threadLocal=ContextHolder.getInstance().getContextHolder();Map<String, String> parMap=new HashMap<>();parMap.put("Key","Value");threadLocal.set(parMap);
获取一个map保存传递信息
原理是 使用Feign的拦截器
if(parMap!=null&&parMap.size()>0&&parMap.containsKey("Key")){ template.header("Key","Value");}else{ logger.info(Thread.currentThread().getName()+"为空。");}
Fei ...
TypeNotPresentExceptionProxy问题排查
java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
TypeNotPresentExceptionProxy 是 类型不存在异常代理
找到TypeNotPresentExceptionProxy类,在sun.reflect.annotation下
在TypeNotPresentExceptionProxy方法里打断点
debug项目,查看断点错误





