<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Blogs on li 的 Blog</title>
    <link>https://blog.zhangli2946.club/blog/</link>
    <description>Recent content in Blogs on li 的 Blog</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Fri, 26 Jun 2020 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://blog.zhangli2946.club/blog/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Alpine Image</title>
      <link>https://blog.zhangli2946.club/blog/alpine-image/</link>
      <pubDate>Fri, 26 Jun 2020 00:00:00 +0000</pubDate>
      <guid>https://blog.zhangli2946.club/blog/alpine-image/</guid>
      <description>&lt;h2 id=&#34;背景&#34;&gt;背景&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;公司使用的 alpine 镜像进行过网络参数调优&lt;/li&gt;
&lt;li&gt;新项目 使用了 cgo (librdkafka-go-bindings)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;冲突&#34;&gt;冲突&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;想要在该项目中使用调优过的 alpine 镜像&lt;/li&gt;
&lt;li&gt;该镜像不具备编译源代码能力&lt;/li&gt;
&lt;li&gt;librdkafka-go-bindings 需要编译时开启 cgo&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;结果&#34;&gt;结果&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;通过 多阶段编译 方式解决上面问题
&lt;ol&gt;
&lt;li&gt;使用 golang:alpine 环境 作为编译阶段的底包&lt;/li&gt;
&lt;li&gt;apk 安装 build-base vim git 等包组和实用工具&lt;/li&gt;
&lt;li&gt;编译阶段产物 复制到最终阶段 (使用公司调优的 alpine)&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;形成了通用的 多阶段编译方案 (伸手党最爱)
&lt;ul&gt;
&lt;li&gt;源码放置 相关 Dockerfile Makefile&lt;/li&gt;
&lt;li&gt;ci 配置 编译路径&lt;/li&gt;
&lt;li&gt;just build&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;感想&#34;&gt;感想&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;解决这个问题 使用的 go 库自带电池是非常贴心的
&lt;ul&gt;
&lt;li&gt;大大降低了 折腾编译依赖库的成本
&lt;ul&gt;
&lt;li&gt;对比同组的巨巨 手工编译依赖的代码库 我真是 一部到位&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;使用一个好的 底包也有很大关系
&lt;ul&gt;
&lt;li&gt;alpine 自带的包管理 使得我能够以最低成本调整出编译代码的必要环境&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;前期对问题的了解 也很重要
&lt;ul&gt;
&lt;li&gt;问题识别不清楚 很容易抓不到核心矛盾&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Go Module 与 私有库</title>
      <link>https://blog.zhangli2946.club/blog/go-module-private-repo/</link>
      <pubDate>Thu, 27 Feb 2020 00:00:00 +0000</pubDate>
      <guid>https://blog.zhangli2946.club/blog/go-module-private-repo/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;由于公司 vcs 设置缘故 项目基本存在于 subgroup 下 且 import 路径也有属于 project 的 subdir
这就需要公司的 vcs 能够适应 ?go-get=1 访问 subdir 或 subgroup 时能给出正确的 clone 地址&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;问题背景&#34;&gt;问题背景&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;公司 vcs 系统使用 gitlab-ce 10.6.5 版本
源码 module 保存在 subgroup 和 subdir 下
vcs 没有 https 端点&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;调查范围&#34;&gt;调查范围&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;module get 的工作方式&lt;/li&gt;
&lt;li&gt;gitlab 响应逻辑&lt;/li&gt;
&lt;li&gt;正常工作的必要条件&lt;/li&gt;
&lt;li&gt;认证&lt;/li&gt;
&lt;li&gt;联通&lt;/li&gt;
&lt;li&gt;编译&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;实际工作&#34;&gt;实际工作&lt;/h2&gt;
&lt;h3 id=&#34;服务搭建与配置&#34;&gt;服务搭建与配置&lt;/h3&gt;
&lt;h4 id=&#34;证书与签名&#34;&gt;证书与签名&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://www.akadia.com/services/ssh_test_certificate.html&#34;&gt;英文参考&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;h5 id=&#34;自签名证书&#34;&gt;自签名证书&lt;/h5&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 1.生成私钥&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ openssl genrsa -out server.key &lt;span style=&#34;color:#ae81ff&#34;&gt;2048&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 2.生成 CSR (Certificate Signing Request)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ openssl req -new -key server.key -out server.csr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 3.生成自签名证书&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ openssl x509 -req -days &lt;span style=&#34;color:#ae81ff&#34;&gt;3650&lt;/span&gt; -in server.csr -signkey server.key -out server.crt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h5 id=&#34;自建-ca-签名证书&#34;&gt;自建 CA 签名证书&lt;/h5&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 1.创建 CA 私钥&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ openssl genrsa -out ca.key &lt;span style=&#34;color:#ae81ff&#34;&gt;2048&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 2.生成 CA 的自签名证书&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ openssl req -new -x509 -days &lt;span style=&#34;color:#ae81ff&#34;&gt;3650&lt;/span&gt; -key ca.key -out ca.crt
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 3.生成需要颁发证书的私钥&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ openssl genrsa -out server.key &lt;span style=&#34;color:#ae81ff&#34;&gt;2048&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 4.生成要颁发证书的证书签名请求，证书签名请求当中的 Common Name 必须区别于 CA 的证书里面的 Common Name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ openssl req -new -key server.key -out server.csr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 5.用 2 创建的 CA 证书给 4 生成的 签名请求 进行签名&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ openssl x509 -req -days &lt;span style=&#34;color:#ae81ff&#34;&gt;3650&lt;/span&gt; -in server.csr -CA ca.crt -CAkey ca.key -set_serial &lt;span style=&#34;color:#ae81ff&#34;&gt;01&lt;/span&gt; -out server.crt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;工具访问与尝试&#34;&gt;工具访问与尝试&lt;/h3&gt;
&lt;h4 id=&#34;模拟访问&#34;&gt;模拟访问&lt;/h4&gt;
&lt;h5 id=&#34;curl-模拟&#34;&gt;CURL 模拟&lt;/h5&gt;
&lt;h5 id=&#34;postman-模拟&#34;&gt;POSTMAN 模拟&lt;/h5&gt;
&lt;h5 id=&#34;httpie-模拟&#34;&gt;HTTPie 模拟&lt;/h5&gt;
&lt;h4 id=&#34;go-mod-访问&#34;&gt;go mod 访问&lt;/h4&gt;
&lt;h3 id=&#34;源码阅读与分析&#34;&gt;源码阅读与分析&lt;/h3&gt;
&lt;h4 id=&#34;gitlab-源码-go-middleware-部分&#34;&gt;gitlab 源码 Go Middleware 部分&lt;/h4&gt;
&lt;h4 id=&#34;go-mod-源码-module-lookup-部分&#34;&gt;go mod 源码 Module Lookup 部分&lt;/h4&gt;
&lt;h2 id=&#34;总结&#34;&gt;总结&lt;/h2&gt;
&lt;h3 id=&#34;外部评价&#34;&gt;外部评价&lt;/h3&gt;
&lt;h3 id=&#34;内部评价&#34;&gt;内部评价&lt;/h3&gt;
&lt;h2 id=&#34;附录&#34;&gt;附录&lt;/h2&gt;
&lt;h3 id=&#34;多级证书签名&#34;&gt;多级证书签名&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 生成根 CA 并自签（Common Name 填 RootCA）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ openssl genrsa -des3 -out keys/RootCA.key &lt;span style=&#34;color:#ae81ff&#34;&gt;2048&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ openssl req -new -x509 -days &lt;span style=&#34;color:#ae81ff&#34;&gt;3650&lt;/span&gt; -key keys/RootCA.key -out keys/RootCA.crt
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 生成二级 CA（Common Name 填 SecondCA）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ openssl genrsa -des3 -out keys/secondCA.key &lt;span style=&#34;color:#ae81ff&#34;&gt;2048&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ openssl rsa -in keys/secondCA.key -out keys/secondCA.key
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ openssl req -new -days &lt;span style=&#34;color:#ae81ff&#34;&gt;3650&lt;/span&gt; -key keys/secondCA.key -out keys/secondCA.csr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ openssl ca -extensions v3_ca -in keys/secondCA.csr -config /etc/pki/tls/openssl.cnf -days &lt;span style=&#34;color:#ae81ff&#34;&gt;3650&lt;/span&gt; -out keys/secondCA.crt -cert keys/RootCA.crt -keyfile keys/RootCA.key
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 生成三级 CA（Common Name 填 ThirdCA）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ openssl genrsa -des3 -out keys/thirdCA.key &lt;span style=&#34;color:#ae81ff&#34;&gt;2048&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ openssl rsa -in keys/thirdCA.key -out keys/thirdCA.key
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ openssl req -new -days &lt;span style=&#34;color:#ae81ff&#34;&gt;3650&lt;/span&gt; -key keys/thirdCA.key -out keys/thirdCA.csr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ openssl ca -extensions v3_ca -in keys/thirdCA.csr -config /etc/pki/tls/openssl.cnf -days &lt;span style=&#34;color:#ae81ff&#34;&gt;3650&lt;/span&gt; -out keys/thirdCA.crt -cert keys/secondCA.crt -keyfile keys/secondCA.key
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 使用三级 CA 签发服务器证书&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ openssl genrsa -des3 -out keys/server.key &lt;span style=&#34;color:#ae81ff&#34;&gt;2048&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ openssl rsa -in keys/server.key -out keys/server.key
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ openssl req -new -days &lt;span style=&#34;color:#ae81ff&#34;&gt;3650&lt;/span&gt; -key keys/server.key -out keys/server.csr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ openssl ca -in keys/server.csr -config /etc/pki/tls/openssl.cnf -days &lt;span style=&#34;color:#ae81ff&#34;&gt;3650&lt;/span&gt; -out keys/server.crt -cert keys/thirdCA.crt -keyfile keys/thirdCA.key
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;build--x&#34;&gt;build -x&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;使用 go build -x 能看到更多 go module build 期间更多的细节&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go Module 与 私有库 (二)</title>
      <link>https://blog.zhangli2946.club/blog/go-module-private-part2/</link>
      <pubDate>Thu, 27 Feb 2020 00:00:00 +0000</pubDate>
      <guid>https://blog.zhangli2946.club/blog/go-module-private-part2/</guid>
      <description>&lt;h2 id=&#34;现状&#34;&gt;现状&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;公司当前使用 GitLab 版本 为 10.6.5&lt;/li&gt;
&lt;li&gt;使用 Go Module 拉取 GitLab 中 个人目录下的项目 能够正常工作&lt;/li&gt;
&lt;li&gt;使用 Go Module 拉取 GitLab 中 SubGroup/SubDirect 不能够正常工作
&lt;ul&gt;
&lt;li&gt;go get 解析到的地址为 gitlab.supos.ai/$GROUP/$SUBGROUP 用于拉取项目目录&lt;/li&gt;
&lt;li&gt;解析到的地址有误 不能进行后续动作&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;问题&#34;&gt;问题&lt;/h2&gt;
&lt;h3 id=&#34;背景&#34;&gt;背景&lt;/h3&gt;
&lt;h4 id=&#34;go-get-查找-repo-root-方式&#34;&gt;go get 查找 repo root 方式&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;go get -u -v gitlab.supos.ai/supos/datalake/common/log
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;get &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;gitlab.supos.ai/supos/datalake&amp;#34;&lt;/span&gt;: found meta tag get.metaImport&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;Prefix:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;gitlab.supos.ai/supos/datalake&amp;#34;&lt;/span&gt;, VCS:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;git&amp;#34;&lt;/span&gt;, RepoRoot:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;http://gitlab.supos.ai/supos/datalake.git&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt; at //gitlab.supos.ai/supos/datalake?go-get&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;get &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;gitlab.supos.ai/supos/datalake/common&amp;#34;&lt;/span&gt;: found meta tag get.metaImport&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;Prefix:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;gitlab.supos.ai/supos/datalake/common&amp;#34;&lt;/span&gt;, VCS:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;git&amp;#34;&lt;/span&gt;, RepoRoot:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;http://gitlab.supos.ai/supos/datalake/common.git&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt; at //gitlab.supos.ai/supos/datalake/common?go-get&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;get &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;gitlab.supos.ai/supos/datalake/common/log&amp;#34;&lt;/span&gt;: found meta tag get.metaImport&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;Prefix:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;gitlab.supos.ai/supos/datalake/common&amp;#34;&lt;/span&gt;, VCS:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;git&amp;#34;&lt;/span&gt;, RepoRoot:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;http://gitlab.supos.ai/supos/datalake/common.git&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt; at //gitlab.supos.ai/supos/datalake/common/log?go-get&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;get &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;gitlab.supos.ai/supos/datalake/common/log&amp;#34;&lt;/span&gt;: verifying non-authoritative meta tag
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;go: finding gitlab.supos.ai/supos/datalake/common/log latest
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;gitlab.supos.ai/supos/datalake/common/log
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;由 log 可见 查找 repo root 的过程是根据 路径级别 递归查找&lt;/li&gt;
&lt;li&gt;当进入 repo 的 subdir 时 返回的 RepoRoot 仍旧指向 repo 而非 其 subdir&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;go-get-携带认证信息的方式&#34;&gt;go get 携带认证信息的方式&lt;/h4&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/golang/go/blob/release-branch.go1.13/src/cmd/go/internal/auth/auth.go#L17&#34;&gt;源码位置&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go Module 与 私有库 (问题分析篇)</title>
      <link>https://blog.zhangli2946.club/blog/go-module-private-analysis/</link>
      <pubDate>Thu, 27 Feb 2020 00:00:00 +0000</pubDate>
      <guid>https://blog.zhangli2946.club/blog/go-module-private-analysis/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;由于公司 vcs 设置缘故 项目基本存在于 subgroup 下 且 import 路径也有属于 project 的 subdir
这就需要公司的 vcs 能够适应 ?go-get=1 访问 subdir 或 subgroup 时能给出正确的 clone 地址&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;问题背景&#34;&gt;问题背景&lt;/h2&gt;
&lt;p&gt;公司 vcs 系统使用 gitlab-ce 10.6.5 版本，源码 module 保存在 subgroup 和 subdir 下，vcs 没有 https 端点。&lt;/p&gt;
&lt;h2 id=&#34;调查范围&#34;&gt;调查范围&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;module get 的工作方式&lt;/li&gt;
&lt;li&gt;gitlab 响应逻辑&lt;/li&gt;
&lt;li&gt;正常工作的必要条件&lt;/li&gt;
&lt;li&gt;认证&lt;/li&gt;
&lt;li&gt;联通&lt;/li&gt;
&lt;li&gt;编译&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;实际工作&#34;&gt;实际工作&lt;/h2&gt;
&lt;h3 id=&#34;服务搭建与配置&#34;&gt;服务搭建与配置&lt;/h3&gt;
&lt;h4 id=&#34;证书与签名&#34;&gt;证书与签名&lt;/h4&gt;
&lt;p&gt;&lt;a href=&#34;https://www.akadia.com/services/ssh_test_certificate.html&#34;&gt;英文参考&lt;/a&gt;&lt;/p&gt;
&lt;h5 id=&#34;自签名证书&#34;&gt;自签名证书&lt;/h5&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 1.生成私钥&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ openssl genrsa -out server.key &lt;span style=&#34;color:#ae81ff&#34;&gt;2048&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 2.生成 CSR (Certificate Signing Request)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ openssl req -new -key server.key -out server.csr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 3.生成自签名证书&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ openssl x509 -req -days &lt;span style=&#34;color:#ae81ff&#34;&gt;3650&lt;/span&gt; -in server.csr -signkey server.key -out server.crt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h5 id=&#34;自建-ca-签名证书&#34;&gt;自建 CA 签名证书&lt;/h5&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 1.创建 CA 私钥&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ openssl genrsa -out ca.key &lt;span style=&#34;color:#ae81ff&#34;&gt;2048&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 2.生成 CA 的自签名证书&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ openssl req -new -x509 -days &lt;span style=&#34;color:#ae81ff&#34;&gt;3650&lt;/span&gt; -key ca.key -out ca.crt
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 3.生成需要颁发证书的私钥&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ openssl genrsa -out server.key &lt;span style=&#34;color:#ae81ff&#34;&gt;2048&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 4.生成要颁发证书的证书签名请求&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ openssl req -new -key server.key -out server.csr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 5.用 CA 证书给签名请求进行签名&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ openssl x509 -req -days &lt;span style=&#34;color:#ae81ff&#34;&gt;3650&lt;/span&gt; -in server.csr -CA ca.crt -CAkey ca.key -set_serial &lt;span style=&#34;color:#ae81ff&#34;&gt;01&lt;/span&gt; -out server.crt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;工具访问与尝试&#34;&gt;工具访问与尝试&lt;/h3&gt;
&lt;h4 id=&#34;模拟访问&#34;&gt;模拟访问&lt;/h4&gt;
&lt;p&gt;使用 CURL、POSTMAN、HTTPie 模拟 ?go-get=1 请求进行验证。&lt;/p&gt;</description>
    </item>
    <item>
      <title>go module 访问私有库 (gitlab@11.10.4)</title>
      <link>https://blog.zhangli2946.club/blog/go-module-gitlab/</link>
      <pubDate>Sun, 16 Feb 2020 00:00:00 +0000</pubDate>
      <guid>https://blog.zhangli2946.club/blog/go-module-gitlab/</guid>
      <description>&lt;h2 id=&#34;开发环境-配置&#34;&gt;开发环境 配置&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;推荐 编译环境升级 go 1.13+&lt;/p&gt;&lt;/blockquote&gt;
&lt;h3 id=&#34;启动-gomod-模式&#34;&gt;启动 GOMOD 模式&lt;/h3&gt;
&lt;h4 id=&#34;设置-go1111module&#34;&gt;设置 GO1111MODULE&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;go env -w GO111MODULE=on&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;配置公有库依赖管理&#34;&gt;配置公有库依赖管理&lt;/h3&gt;
&lt;h4 id=&#34;设置-goproxy&#34;&gt;设置 GOPROXY&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;go env -w GOPORXY=http://10.30.52.66:3000,direct&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;配置私有库依赖管理&#34;&gt;配置私有库依赖管理&lt;/h3&gt;
&lt;h4 id=&#34;设置-goprivate&#34;&gt;设置 GOPRIVATE&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;go env -w GOPRIVATE=$PRIVATE_REPO_HOST&lt;/code&gt;&lt;/p&gt;
&lt;h4 id=&#34;设置-git-over-https-免密&#34;&gt;设置 Git over HTTP(s) 免密&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;在 gitlab 注册后从 web 界面 获取 acceess token (编译环境 选只读; 开发环境 选读写)
通过 下述方式 进行免密配置后 不需要进行 ssh 证书添加&lt;/p&gt;&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;touch ~/.git-credentials
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;http://&lt;/span&gt;$PRIVATE_REPO_USERNAME&lt;span style=&#34;color:#e6db74&#34;&gt;:&lt;/span&gt;$$&lt;span style=&#34;color:#e6db74&#34;&gt;PRIVATE_REPO_TOKEN@&lt;/span&gt;$PRIVATE_REPO_HOST&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; ~/.git-credentials
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://&lt;/span&gt;$PRIVATE_REPO_USERNAME&lt;span style=&#34;color:#e6db74&#34;&gt;:&lt;/span&gt;$$&lt;span style=&#34;color:#e6db74&#34;&gt;PRIVATE_REPO_TOKEN@&lt;/span&gt;$PRIVATE_REPO_HOST&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; ~/.git-credentials
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git config --global credential.helper store
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;设置-module-命令认证信息&#34;&gt;设置 Module 命令认证信息&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;go mod 命令的认证信息 仅能从 主机登陆协议配置 $HOME/.netrc 中获取&lt;/p&gt;</description>
    </item>
    <item>
      <title>Init</title>
      <link>https://blog.zhangli2946.club/blog/init/</link>
      <pubDate>Sun, 16 Feb 2020 00:00:00 +0000</pubDate>
      <guid>https://blog.zhangli2946.club/blog/init/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-make&#34; data-lang=&#34;make&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;release&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; build
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	@cd zhangli2946.github.io &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; git add . &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; git commit -m &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;update&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; git push
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;build&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	hugo -D
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>使用 prometheus 监控应用性能</title>
      <link>https://blog.zhangli2946.club/blog/prometheus-metrics/</link>
      <pubDate>Sun, 16 Feb 2020 00:00:00 +0000</pubDate>
      <guid>https://blog.zhangli2946.club/blog/prometheus-metrics/</guid>
      <description>&lt;h2 id=&#34;引入pull-模型的服务监控&#34;&gt;引入：Pull 模型的服务监控&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&#34;Prometheus 生态&#34; loading=&#34;lazy&#34; src=&#34;https://camo.githubusercontent.com/78b3b29d22cea8eee673e34fd204818ea532c171/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f70726f6d6574686575732f70726f6d65746865757340633334323537643036396336333036383564613335626365663038343633326666643564363230392f646f63756d656e746174696f6e2f696d616765732f6172636869746563747572652e737667&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;pull-模型&#34;&gt;Pull 模型&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;由 Prometheus 向所有已知的 target 发送 http get $HOST:$PORT/metrics&lt;/p&gt;&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;http get prometheus:9090/metrics&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# HELP prometheus_tsdb_wal_page_flushes_total Total number of page flushes.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# TYPE prometheus_tsdb_wal_page_flushes_total counter&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;prometheus_tsdb_wal_page_flushes_total &lt;span style=&#34;color:#ae81ff&#34;&gt;5759&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# HELP promhttp_metric_handler_requests_total Total number of scrapes by HTTP status code.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# TYPE promhttp_metric_handler_requests_total counter&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;promhttp_metric_handler_requests_total&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;code&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;200&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1134&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;promhttp_metric_handler_requests_total&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;code&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;500&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;promhttp_metric_handler_requests_total&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;code&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;503&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# HELP promhttp_metric_handler_requests_in_flight Current number of scrapes being served.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# TYPE promhttp_metric_handler_requests_in_flight  gauge&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;promhttp_metric_handler_requests_in_flight &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# HELP prometheus_tsdb_wal_truncate_duration_seconds Duration of WAL truncation.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# TYPE prometheus_tsdb_wal_truncate_duration_seconds summary&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;prometheus_tsdb_wal_truncate_duration_seconds&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;quantile&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;0.5&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt; NaN
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;prometheus_tsdb_wal_truncate_duration_seconds&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;quantile&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;0.9&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt; NaN
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;prometheus_tsdb_wal_truncate_duration_seconds&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;quantile&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;0.99&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt; NaN
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;prometheus_tsdb_wal_truncate_duration_seconds_sum &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;prometheus_tsdb_wal_truncate_duration_seconds_count &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;prometheus_tsdb_wal_truncations_total &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# HELP prometheus_tsdb_compaction_chunk_range_seconds Final time range&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# TYPE prometheus_tsdb_compaction_chunk_range_seconds histogram&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;prometheus_tsdb_compaction_chunk_range_seconds_bucket&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;le&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;102400&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;prometheus_tsdb_compaction_chunk_range_seconds_bucket&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;le&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;1.6384e+06&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;594&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;prometheus_tsdb_compaction_chunk_range_seconds_bucket&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;le&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;6.5536e+06&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2838&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;prometheus_tsdb_compaction_chunk_range_seconds_bucket&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;le&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;+Inf&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2838&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;prometheus_tsdb_compaction_chunk_range_seconds_sum 4.489241e+09
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;prometheus_tsdb_compaction_chunk_range_seconds_count &lt;span style=&#34;color:#ae81ff&#34;&gt;2838&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;可视化效果&#34;&gt;可视化效果&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://192.168.11.98:3000&#34;&gt;grafana&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://192.168.11.98:9090/graph&#34;&gt;prometheus&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;数据类型-与-指标定义&#34;&gt;数据类型 与 指标定义&lt;/h2&gt;
&lt;h3 id=&#34;数据类型&#34;&gt;数据类型&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;计数器
&lt;ul&gt;
&lt;li&gt;单调增加&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;示数器
&lt;ul&gt;
&lt;li&gt;随意增减&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;分布
&lt;ul&gt;
&lt;li&gt;分段统计 _bucket{le=&amp;quot;&amp;quot;}&lt;/li&gt;
&lt;li&gt;计量 _sum&lt;/li&gt;
&lt;li&gt;计数 _count&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;摘要
&lt;ul&gt;
&lt;li&gt;分位统计 {quantile=&amp;quot;&amp;quot;}&lt;/li&gt;
&lt;li&gt;计量 _sum&lt;/li&gt;
&lt;li&gt;计数 _count&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;指标定义&#34;&gt;指标定义&lt;/h3&gt;
&lt;h4 id=&#34;示例apdex-score&#34;&gt;示例：Apdex score&lt;/h4&gt;
&lt;p&gt;&lt;a href=&#34;https://prometheus.io/docs/practices/histograms/#apdex-score&#34;&gt;原文&lt;/a&gt;&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
