WSL development environment under Win11

1.Why to do that ? Because in the eyes of a non-Microsoft developer, the environment of windows is not very friendly, but windows software is needed daily, so there are only two choices: vm or wsl. I personally think wsl is more convenient, so I will use wsl first this time. The following are my target requirements: 1.Work and life are all in one system. 2.File/software isolation does not affect each other....

December 31, 2021 · 4 min · cui

Css the definitive guide 01

Historical background created of the Cascading Style Sheets. Cascading Style Sheets was first proposed in 1994. The authors can only mark a piece of content as paragraph,as heading of some level, as preformatted text, or one of other element types. To configure browser to make all level-one-heading tiny and pink and all level-six headings huge and red, that only was users lookout. So the CSS(Cascading Style Sheet) was introduced that goal to provide a simple,declarative styling language that was flexible for authors....

December 19, 2021 · 1 min · cui

Year 2021

今年好累,身体也出了一些状况,什么事情也没做,什么东西也没学,远远没有达成计划。 已经26了,努力在找女朋友,可又一次被拒绝,之前会埋怨,只是被拒绝,但不告诉我我哪里不好,后来我也明白了,喜欢和讨厌都是没有理由的,爱就是爱,恨就是恨。 也逐渐脱离天真了,越来越没有怜悯之心,我是什么时候变成了一个势力又任性又振振有词咄咄逼人的人呢?可怕。 就这样吧,2021年终。 不做计划了。希望明年可以兴起发力吧。

December 19, 2021 · 1 min · cui

JSONSchema

Document Ref JSONSchema,Validation 1.什么是JSONSchema JSON Schema 是一个允许您注释 和验证 JSON 文档的词汇表。 2.构建JSONSchema 2.1 Example 1 2 3 4 5 6 { "productId": 1, "productName": "A green door", "price": 12.50, "tags": [ "home", "green" ] } 如上json有一些问题,比如 productId是什么,productName是什么,如何验证里面的字段,price可不可以为0,上述JSON只是一份不完备的JSON文档 2.2 开始构建 1 2 3 4 5 6 7 { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://example.com/product.schema.json", "title": "Product", "description": "A product in the catalog", "type": "object" } $schema: 根据哪个json草案/标准进行编写的,还有版本信息 $id: 定义了Schema的 URI,以及Schema内其他 URI 引用解析所依据的基本 URI title,description: 描述这个JSON文档的一些信息 type: 这个字段是对JSON文档的第一个约束,如上表明json文档为对象类型 type还有如下几种类型...

December 5, 2021 · 5 min · cui

K8S服务健康检测(探针)

1.业务探针 readinessProbe 1.1 为什么自动扩容导致请求失败? 一个新Pod创建后,Service就能立即选择到它,并会把请求转发给Pod,那问题就来了,通常一个Pod启动是需要时间的,如果Pod还没准备好(可能需要时间来加载配置或数据,或者可能需要执行 一个预热程序之类),这时把请求转给Pod的话,Pod也无法处理,造成请求失败。 1.2 如何解决? 加入业务探针,可以理解为类似ws的心跳检测机制. Kubernetes中解决这个问题的方法就是给Pod加一个业务就绪探针Readiness Probe,当检测到Pod就绪后才允许Service请求转给Pod。 Readiness Probe周期性检测Pod,然后根据响应来判断Pod是否就绪,Service根据就绪状态分发流量。 1.3 配置详解 1.3.1 EXEC(shell)检测 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 apiVersion:apps/v1kind:Deploymentmetadata:name:nginxspec:replicas:3selector:matchLabels:app:nginxtemplate:metadata:labels:app:nginxspec:containers:- image:nginx:latestname:container-0resources:limits:cpu:500mmemory:1024Mirequests:cpu:500mmemory:1024Mi// 重点内容// 声明一个 业务探针 去检测 当前服务是否准备完毕readinessProbe:# Readiness Probeexec:// 在容器中先后执行 ls,/ready 命令,如果命令完整执行完毕,则标志POD为就绪状态,可以从Service接收流量command:- ls- /readyimagePullSecrets:- name:imagepull-secret 1.3.2 HTTP 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 apiVersion:apps/v1kind:Deploymentmetadata:name:nginxspec:replicas:3selector:matchLabels:app:nginxtemplate:metadata:labels:app:nginxspec:containers:- image:nginx:latestname:container-0resources:limits:cpu:500mmemory:1024Mirequests:cpu:500mmemory:1024Mi// 这里是重点// 声明一个业务 探针,向本POD发起 /read请求,根据响应码判断POD是否准备就绪readinessProbe:httpGet:path:/readport:80imagePullSecrets:- name:imagepull-secret 1....

December 5, 2021 · 3 min · cui

Micrometer Concepts

1.什么是 Micrometer 针对JVM Application的指标库工具 SPI 服务商应用接口 2.支持的服务商 AppOptics Atlas Azure Monitor Cloudwatch Datadog Datadog StatsD Dynatrace Elastic Humio Influx KairosDB New Relic Prometheus SignalFx Sysdig StatsD Telegraf StatsD Wavefront 3.注册 Registry Meter是测量你的应用程序指标的一个集合 Meter在Micrometer中被MeterRegistry创建并保存 每个受支持的监控服务商都有一套对应的MeterRegistry实现 SimpleMeterRegistry可以将数据保存在内存中,不会将数据导出到任何地方 假如没有首选监控系统,可以从SimpleMeterRegistry开始 MeterRegistry registry = new SimpleMeterRegistry(); SimpleMeterRegistry可以在Springboot中直接注入 3.1 Composite registries 提供了CompositeMeterRegistry,可以添加多个注册表 通过CompositeMeterRegistry可以将指标推送到多个监控系统 1 2 3 4 5 6 7 8 9 10 11 12 // 声明一个复合注册表 CompositeMeterRegistry composite = new CompositeMeterRegistry(); // 从复合注册表声明一个名为counter的计数器 Counter compositeCounter = composite....

December 5, 2021 · 7 min · cui

Prometheus Alerting

1.Alerting with Prometheus is separated in to two parts 1-1Alerting rules Alerting rules is a file that formatted by yml,it’s define some exp in to the yaml file. Alerting rules is in Prometheus servers send alerts to an alert manager and alert manager managed those alerts. the rule document in there: the rules doc 1-2Alerting Manager AlertingManager is a command line tool and the command line tool flags has those functions...

December 5, 2021 · 3 min · cui

Prometheus Exporter

time series metrics collect toolkit 提供了UI服务,默认端口30313 主要作用就是监控一下我们服务的各项指标,也有许多包已经集成了这个功能,基本上查找一下配置一下就可以快速的展示出各项指标了 业务指标 但例如 java_gc,go_gc,node_request_total这种指标对我们来说没有特别大的用处,我们的着力点应该在于提取业务指标,各个业务系统数据源不同逻辑不同导致无法使用通用型第三方包来构建我们的指标。 这个时候就出现了 prometheus-exporter用来放出自定义的业务指标,等待prometheus来此处收集。 prometheus exporter 其实很简单,就是攒一些prometheus数据格式的数据放入 /metrics路由中等待scrape就好 下面使用Go来举例子 这里使用了godror驱动oracle,prometheus/client_golang 客户端,logrus日志模块 一些命令行参数 main函数主要就是构造exporter对象然后启动http服务 exporter 结构体中加入了同步锁,封装好的oracle客户端比较重要的是 metricDescriptions和 metricMap这几个指标map 作为prometheus的exporter需要实现两个接口,一个是输入描述的 Describe一个是收集数据的 Collect Collect,循环map然后将数据和字符串传入ch管道中 Describe相同都是向ch放入构建好的 指针类型对象 接下来看map中到底是什么 map为string对应的匿名函数,函数类型为MetricHandler 很好理解,将管道传入匿名函数,结构体传入匿名函数,然后利用结构体的oracleClient执行sql构建Metric结构体传入ch中即可 Over 整个流程非常简单,由于公司的exporter不可能开源,所以这里提供redis-exporter地址以供参考 https://github.com/oliver006/redis_exporter 2020结束,最后一篇简单的参考教程

December 5, 2021 · 1 min · cui

Prometheus Redis

1.下载redis_exporter 2.脚本 1 nohup ./redis_exporter -redis.addr 0.0.0.0:6379 -redis.password "password" & link 3.promethus endpoint 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 apiVersion: v1 kind: Endpoints metadata: name: redis-exporter subsets: - addresses: - ip: 222....

December 5, 2021 · 16 min · cui

Prometheus Rules

1.Two types of rules Prometheus supports two types of rules .whitch may be configured and then evaluated at regular intervals: Recording rules and Alerting rules. 2.Recording rules 1.Recording rules allow you to precompute frequently needed or computationally expensive expressions and save their result as a new set of time series. 2.Be mutch faster than executing the origin expression every time it’s need. 3.Rules within a group run sequentially at a regular interval....

December 5, 2021 · 9 min · cui