<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Erdong’ Blog</title>
  
  <subtitle>苦练七十二变，笑对八十一难。</subtitle>
  <link href="/atom.xml" rel="self"/>
  
  <link href="https://erdong.site/"/>
  <updated>2022-07-22T16:27:17.376Z</updated>
  <id>https://erdong.site/</id>
  
  <author>
    <name>Er Dong</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>QDS08 curl 安装</title>
    <link href="https://erdong.site/QDS/qds08.html"/>
    <id>https://erdong.site/QDS/qds08.html</id>
    <published>2022-07-24T12:12:15.000Z</published>
    <updated>2022-07-22T16:27:17.376Z</updated>
    
    <content type="html"><![CDATA[<p>curl 是常用的命令行工具，用来请求 Web 服务器。它的名字就是客户端（client）的 URL 工具的意思。</p><a id="more"></a><p>它的功能非常强大，命令行参数多达几十种。如果熟练的话，完全可以取代 Postman 这一类的图形界面工具。</p><p>官方是： <a href="https://curl.se" target="_blank" rel="noopener">https://curl.se</a> </p><p>在 CentOS 7 上安装</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">yum install curl</span><br></pre></td></tr></table></figure><p>查看 Curl 的版本</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">[root@erdong ~]# curl --version</span><br><span class="line">curl 7.29.0 (x86_64-redhat-linux-gnu) libcurl&#x2F;7.29.0 NSS&#x2F;3.28.4 zlib&#x2F;1.2.7 libidn&#x2F;1.28 libssh2&#x2F;1.4.3</span><br><span class="line">Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smtp smtps telnet tftp</span><br><span class="line">Features: AsynchDNS GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz unix-sockets</span><br><span class="line">[root@erdong ~]# cat &#x2F;etc&#x2F;redhat-release</span><br><span class="line">CentOS Linux release 7.9.2009 (Core)</span><br><span class="line">[root@erdong ~]#</span><br></pre></td></tr></table></figure><p>我们可以看到在 CentOS 7.9 上，缺省的 Curl 版本是 7.29.0 ，当前（2021.08）Curl 的最新版本是 7.78 。</p><p>接下来我们进行升级 Curl , Curl 支持多个平台多种操作系统的安装和使用，我们来下载 Linux 平台下使用的二进制包，访问 GitHub 如下链接，就可以看到最近发布的版本，选择 AMD64 架构来下载</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https:&#x2F;&#x2F;github.com&#x2F;moparisthebest&#x2F;static-curl&#x2F;releases</span><br></pre></td></tr></table></figure><p>执行下列操作来进行更新</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">wget https:&#x2F;&#x2F;github.com&#x2F;moparisthebest&#x2F;static-curl&#x2F;releases&#x2F;tag&#x2F;v7.78.0</span><br><span class="line"></span><br><span class="line">chmod +x curl-amd64</span><br><span class="line">mv curl-amd64 &#x2F;usr&#x2F;bin&#x2F;curl</span><br></pre></td></tr></table></figure><p>这样就更新了 Curl 的可执行文件。</p><p>另外我们也可以通过 Yum 来更新 cURL ，首先创建 <code>repo</code> 仓库文件。</p><p><code>vi /etc/yum.repos.d/city-fan.repo</code><br>写入如下内容：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">[CityFan]</span><br><span class="line">name&#x3D;City Fan Repo</span><br><span class="line">baseurl&#x3D;http:&#x2F;&#x2F;www.city-fan.org&#x2F;ftp&#x2F;contrib&#x2F;yum-repo&#x2F;rhel$releasever&#x2F;$basearch&#x2F;</span><br><span class="line">enabled&#x3D;1</span><br><span class="line">gpgcheck&#x3D;0</span><br></pre></td></tr></table></figure><p>然后进行更新</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">yum update curl</span><br></pre></td></tr></table></figure><p>在查看版本就已经更新好了</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">[root@erdong ~]# curl --version</span><br><span class="line">curl 7.78.0 (x86_64-redhat-linux-gnu) libcurl&#x2F;7.78.0 NSS&#x2F;3.53.1 zlib&#x2F;1.2.7 libpsl&#x2F;0.7.0 (+libicu&#x2F;50.1.2) libssh2&#x2F;1.9.0 nghttp2&#x2F;1.33.0 OpenLDAP&#x2F;2.4.44</span><br><span class="line">Release-Date: 2021-07-21</span><br><span class="line">Protocols: dict file ftp ftps gopher gophers http https imap imaps ldap ldaps mqtt pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp</span><br><span class="line">Features: alt-svc AsynchDNS GSS-API HSTS HTTP2 HTTPS-proxy IPv6 Kerberos Largefile libz NTLM NTLM_WB PSL SPNEGO SSL UnixSockets</span><br><span class="line">[root@erdong ~]#</span><br></pre></td></tr></table></figure><p>ok ,结束。</p><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p><p><img src="https://erdong.site/images/erdongxtnew.jpg" alt="微信公众号"></p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;curl 是常用的命令行工具，用来请求 Web 服务器。它的名字就是客户端（client）的 URL 工具的意思。&lt;/p&gt;
    
    </summary>
    
    
      <category term="QDS" scheme="https://erdong.site/categories/QDS/"/>
    
    
      <category term="QDS" scheme="https://erdong.site/tags/QDS/"/>
    
      <category term="curl" scheme="https://erdong.site/tags/curl/"/>
    
  </entry>
  
  <entry>
    <title>QDS07 MySQL 安装</title>
    <link href="https://erdong.site/QDS/qds07.html"/>
    <id>https://erdong.site/QDS/qds07.html</id>
    <published>2022-07-24T10:22:14.000Z</published>
    <updated>2022-07-22T16:25:44.911Z</updated>
    
    <content type="html"><![CDATA[<p>MySQL 是经常使用的数据库软件，我们在做测试和实验的时候希望能够快速的安装 MySQL。接下来我们看怎么进行。</p><a id="more"></a><h1 id="基于-Yum-进行安装"><a href="#基于-Yum-进行安装" class="headerlink" title="基于 Yum 进行安装"></a>基于 Yum 进行安装</h1><p>基于 Yum 安装我们可以首先下载 Yum 源</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">wget http:&#x2F;&#x2F;repo.mysql.com&#x2F;mysql57-community-release-el7-9.noarch.rpm</span><br><span class="line"></span><br><span class="line">yum install mysql57-community-release-el7-9.noarch.rpm</span><br></pre></td></tr></table></figure><p>安装好 Yum 源以后 可以使用 Yum 来安装 MySQL </p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">yum install mysql-server</span><br></pre></td></tr></table></figure><p>这样就安装了 MySQL 5.7 版本下的最新的 MySQL，如果要安装 MySQL 8 的话，可以使用如下 Yum 源。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget http:&#x2F;&#x2F;repo.mysql.com&#x2F;mysql80-community-release-el7-3.noarch.rpm</span><br></pre></td></tr></table></figure><h1 id="指定版本安装"><a href="#指定版本安装" class="headerlink" title="指定版本安装"></a>指定版本安装</h1><p>在其他一些使用过程中，我们需要安装指定版本的 MySQL ，这个时候，我们有 2 中方法可以使用，一种是在 Yum 安装的时候指定版本号码，另外就是单独下载指定版本的 RPM 包，使用 RPM 进行安装需要下载如下安装包</p><p>mysql-community-client<br>mysql-community-common<br>mysql-community-libs<br>mysql-community-libs-compat<br>mysql-community-server</p><p>这些是必须的，为了使用方便，也可以将开发包一并安装，mysql-community-devel.</p><p>比如我 要安装 5.7.18 我在 MySQL 的官网 <a href="https://downloads.mysql.com/archives/community/" target="_blank" rel="noopener">https://downloads.mysql.com/archives/community/</a> 上选择 我要的版本</p><p>然后下载上边的几个文件包。</p><p>下载好以后依次安装就可以，如果担心依赖关系也可以使用 Yum 来安装这些 RPM 包</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">yum install mysql-community-client-5.7.18-1.el7.x86_64.rpm mysql-community-libs-5.7.18-1.el7.x86_64.rpm mysql-community-libs-compat-5.7.18-1.el7.x86_64.rpm mysql-community-server-5.7.18-1.el7.x86_64.rpm mysql-community-common-5.7.18-1.el7.x86_64.rpm</span><br></pre></td></tr></table></figure><p>启动 MySQL</p><p>安装好 MySQL 启动就可以使用了。<br>启动 MySQL</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl start mysqld</span><br></pre></td></tr></table></figure><p>设置开机自起</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">systemctl enable mysqld</span><br><span class="line">&#96;&#96;&#96; </span><br><span class="line"></span><br><span class="line">启动以后执行下列命令能正常输出即为安装成功。</span><br></pre></td></tr></table></figure><p>[root@erdong ~]# mysqladmin –version<br>mysqladmin  Ver 8.42 Distrib 5.7.18, for Linux on x86_64</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">这个版本的 MySQL 安装好以后设置了默认的 root 密码，直接登录会提示</span><br></pre></td></tr></table></figure><p>[root@erdong ~]# mysql<br>ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: NO)</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">初始的密码在日志文件当中，没有修改的话在 &#x2F;var&#x2F;log&#x2F;mysqld.log , 在文件中搜索 password 关键字即可,后边会显示出密码</span><br></pre></td></tr></table></figure><p>2021-08-16T09:27:14.711225Z 1 [Note] A temporary password is generated for root@localhost: ufhlrHZ?&gt;94l</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">接下来使用密码进行登录</span><br></pre></td></tr></table></figure><p>[root@erdong ~]# mysql -u root -p<br>Enter password:<br>Welcome to the MySQL monitor.  Commands end with ; or \g.<br>Your MySQL connection id is 7<br>Server version: 5.7.18<br>Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.<br>Oracle is a registered trademark of Oracle Corporation and/or its<br>affiliates. Other names may be trademarks of their respective<br>owners.<br>Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.<br>mysql&gt;</p><pre><code>OK  结束。======================由于无法及时收到评论内容，所以关闭评论功能。大家有问题欢迎发邮件到 erdong@mail.erdong.site ，或者 https://github.com/erdong/erdong.github.io/issues 提 Issue ，我会及时回复。======================Erdong, A Linux user !![微信公众号](https://erdong.site/images/erdongxtnew.jpg)</code></pre>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;MySQL 是经常使用的数据库软件，我们在做测试和实验的时候希望能够快速的安装 MySQL。接下来我们看怎么进行。&lt;/p&gt;
    
    </summary>
    
    
      <category term="QDS" scheme="https://erdong.site/categories/QDS/"/>
    
    
      <category term="QDS" scheme="https://erdong.site/tags/QDS/"/>
    
      <category term="MySQL" scheme="https://erdong.site/tags/MySQL/"/>
    
  </entry>
  
  <entry>
    <title>Prometheus 2.37.0 新特性</title>
    <link href="https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-37-0.html"/>
    <id>https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-37-0.html</id>
    <published>2022-07-23T12:16:16.000Z</published>
    <updated>2022-07-22T16:07:14.961Z</updated>
    
    <content type="html"><![CDATA[<p>Prometheus <a href="https://github.com/prometheus/prometheus/releases/tag/v2.37.0" target="_blank" rel="noopener">2.37.0</a> 现在(2022.07.14)已经发布，在上个月的 <a href="http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-36-0.html">2.36.0</a> 之后又进行了很多的修复和改进。</p><a id="more"></a><p>这次发布的版本是一个 LTS 长期支持的版本，预计会支持到 2023.01.31，详细更多的信息可以查看 <a href="https://erdong.site/Prometheus/New-Features/prometheus-lts-release.html">https://erdong.site/Prometheus/New-Features/prometheus-lts-release.html</a> 。</p><p>由于 OpenBSD 中缺乏统一的缓存而导致用户数据丢失，在找到合适的解决方案之前，Prometheus 开发团队将不再发布支持 OpenBSD 的 Prometheus 长期版本。</p><p>这次的 LTS 版本发布主要以稳定性为主，进行了大量的 BUG 修复，只新增了一个新的功能特性，以及一些实验性的功能。</p><h1 id="服务发现"><a href="#服务发现" class="headerlink" title="服务发现"></a>服务发现</h1><p>本次版本更新唯一的一个稳定功能增加就是 基于 Nomad 的服务发现，Nomad 是 HashiCorp 出品的一个简单、灵活的调度工具，官网地址是 <a href="https://www.nomadproject.io" target="_blank" rel="noopener">https://www.nomadproject.io</a> 。</p><p>对于 Kubernetes 的服务发现，进行了优化，在 endpoint 的 role 中允许增加节点的 label。</p><p>修复了  Uyuni 服务发现的 BUG，制作相对于 Prometheus 配置文件的认证文件，并且修复了默认配置文件的值。<br>修复了 Hetzner 服务发现的 BUG ，制作相对于 Prometheus 配置文件的认证文件。</p><h1 id="TSDB"><a href="#TSDB" class="headerlink" title="TSDB"></a>TSDB</h1><p>对了 TSDB 首先对内存进行了优化。其次优化了读取 WAL 是的睡眠时间，睡眠时间变短了。</p><p>针对 TSDB 修复了 3 个 BUG，第一个是当 context 被取消时，不增加prometheus_tsdb_compactions_failed_total  的值。第二个是修复了在删除 series时没有找到 series 的问题。第三个是当打开顺序错误时，会增加prometheus_tsdb_mmap_chunk_corruptions_total 的值。</p><h1 id="PromQL-amp-Promtool"><a href="#PromQL-amp-Promtool" class="headerlink" title="PromQL &amp; Promtool"></a>PromQL &amp; Promtool</h1><p>优化了 PromQL ，优化了创建签名时带 label 或者不带 label 的问题。</p><p>对于 Promtool 工具修复了 Promtool 检查配置文件失败时不能正确提示错误的问题 。</p><h1 id="OAuth2"><a href="#OAuth2" class="headerlink" title="OAuth2"></a>OAuth2</h1><p>对于 OAuth2 进行了优化，增加了适当的超时和 User-Agent 头 。</p><h1 id="Other"><a href="#Other" class="headerlink" title="Other"></a>Other</h1><p>针对 Alerting 修复了警报排队时 Alertmanager 目标不更新的问题。</p><p>针对 Scrape 修复在服务重载配置时保持重新标记的获取监控数据时间间隔和超时时间。</p><p>详细的发行注记可以查看 <a href="https://github.com/prometheus/prometheus/releases/tag/v2.37.0" target="_blank" rel="noopener">release notes</a> 。</p><h1 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h1><ul><li><a href="https://github.com/prometheus/prometheus/releases/tag/v2.37.0" target="_blank" rel="noopener">https://github.com/prometheus/prometheus/releases/tag/v2.37.0</a> ，By prombot of GitHub</li></ul><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p><p><img src="https://erdong.site/images/erdongxtnew.jpg" alt="微信公众号"></p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Prometheus &lt;a href=&quot;https://github.com/prometheus/prometheus/releases/tag/v2.37.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2.37.0&lt;/a&gt; 现在(2022.07.14)已经发布，在上个月的 &lt;a href=&quot;http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-36-0.html&quot;&gt;2.36.0&lt;/a&gt; 之后又进行了很多的修复和改进。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="New-Features" scheme="https://erdong.site/categories/Prometheus/New-Features/"/>
    
    
      <category term="Prometheus" scheme="https://erdong.site/tags/Prometheus/"/>
    
      <category term="Features" scheme="https://erdong.site/tags/Features/"/>
    
      <category term="release" scheme="https://erdong.site/tags/release/"/>
    
  </entry>
  
  <entry>
    <title>QDS06 Iperf 测网速</title>
    <link href="https://erdong.site/QDS/qds06.html"/>
    <id>https://erdong.site/QDS/qds06.html</id>
    <published>2022-07-23T10:22:14.000Z</published>
    <updated>2022-07-22T16:21:41.426Z</updated>
    
    <content type="html"><![CDATA[<p>QDS （Quick Deployment Series）快速的部署一个软件。这次我们来部署 Iperf 。</p><p>Iperf 是一个网络性能测试工具。Iperf 可以测试最大 TCP 和 UDP 带宽性能，具有多种参数和 UDP 特性，可以根据需要调整，可以报告带宽、延迟抖动和数据包丢失。</p><a id="more"></a><h1 id="下载安装"><a href="#下载安装" class="headerlink" title="下载安装"></a>下载安装</h1><h2 id="yum-安装"><a href="#yum-安装" class="headerlink" title="yum 安装"></a>yum 安装</h2><p>如果可以正常使用 yum ，那么可以使用 yum 来安装 Iperf ，该软件包在 epel 源中，需要先安装 epel 。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">yum install -y epel-release</span><br><span class="line"></span><br><span class="line">yum install -y iperf</span><br></pre></td></tr></table></figure><p>这样就安装好了 Iperf ，版本默认是 2.x 。</p><h2 id="编译安装"><a href="#编译安装" class="headerlink" title="编译安装"></a>编译安装</h2><p>如果所在机器无法正常使用 yum ，或者想要使用最新版本的 Iperf ，那么请选择编译安装，在编译前请确保该机器相关编译器已经正确安装且可以使用。</p><p>Iperf 开源在 Github，所以我们可以在 Github 上找到最新的源代码。</p><p>Github 仓库地址：<a href="https://github.com/esnet/iperf" target="_blank" rel="noopener">https://github.com/esnet/iperf</a></p><p>Github 发布地址：<a href="https://github.com/esnet/iperf/releases" target="_blank" rel="noopener">https://github.com/esnet/iperf/releases</a></p><p>仓库里有最早的 2.0 （2007 年 8 月发布）到现在最新的 3.7 版本都有，我们以最新的 3.7 版本为例进行编译安装。</p><p>下载安装包并且解压</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">wget https:&#x2F;&#x2F;github.com&#x2F;esnet&#x2F;iperf&#x2F;archive&#x2F;3.7.tar.gz</span><br><span class="line">tar -zxf 3.7.tar.gz -C iperf</span><br></pre></td></tr></table></figure><p>编译</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">cd iperf</span><br><span class="line">.&#x2F;configure </span><br><span class="line">make</span><br></pre></td></tr></table></figure><p>到这里可以暂停一下，如果你只是一次性使用，那么就不需要继续了，你只要进入到 <code>iperf/src</code> 目录下，该目录下有一个 <code>iperf3</code> 的可执行文件，直接执行该文件，就可以运行 Iperf 并且进行测试。</p><p>如果你希望以后使用更方便，那么你需要接着上边的步骤把编译好的 Iperf 安装到系统中。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">make install</span><br></pre></td></tr></table></figure><p>这样你就可以在系统的任意位置运行 Iperf ，因为已经安装到了系统中。</p><h1 id="简单测试"><a href="#简单测试" class="headerlink" title="简单测试"></a>简单测试</h1><p>因为网络测试是两个点之间的网络，所以需要在两台机器上都部署 Iperf 。</p><p>我们的测试环境如下所示</p><p>node01 ：192.168.0.2 用作 Server<br>node02 ：192.168.0.3 用作 Client</p><p>在 Server 端启动 Server 服务</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">.&#x2F;iperf3 -s</span><br></pre></td></tr></table></figure><p>在 Client 端启动 Client ，并且指定 Server 的 IP 地址。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">.&#x2F;iperf3 -c 192.168.0.2</span><br></pre></td></tr></table></figure><p>下面是测试过程中服务端的显示</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line">[root@node01 src]# .&#x2F;iperf3 -s</span><br><span class="line">-----------------------------------------------------------</span><br><span class="line">Server listening on 5201</span><br><span class="line">-----------------------------------------------------------</span><br><span class="line">Accepted connection from 192.168.0.3, port 36406</span><br><span class="line">[  5] local 192.168.0.2 port 5201 connected to 192.168.0.3 port 36410</span><br><span class="line">[ ID] Interval           Transfer     Bitrate</span><br><span class="line">[  5]   0.00-1.00   sec  36.2 MBytes   304 Mbits&#x2F;sec</span><br><span class="line">[  5]   1.00-2.00   sec  47.6 MBytes   399 Mbits&#x2F;sec</span><br><span class="line">[  5]   2.00-3.00   sec  50.7 MBytes   425 Mbits&#x2F;sec</span><br><span class="line">[  5]   3.00-4.00   sec  47.4 MBytes   397 Mbits&#x2F;sec</span><br><span class="line">[  5]   4.00-5.00   sec  53.0 MBytes   444 Mbits&#x2F;sec</span><br><span class="line">[  5]   5.00-6.00   sec  45.8 MBytes   384 Mbits&#x2F;sec</span><br><span class="line">[  5]   6.00-7.00   sec  50.9 MBytes   427 Mbits&#x2F;sec</span><br><span class="line">[  5]   7.00-8.00   sec  53.4 MBytes   448 Mbits&#x2F;sec</span><br><span class="line">[  5]   8.00-9.00   sec  56.5 MBytes   474 Mbits&#x2F;sec</span><br><span class="line">[  5]   9.00-10.00  sec  47.8 MBytes   401 Mbits&#x2F;sec</span><br><span class="line">[  5]  10.00-10.29  sec  4.03 MBytes   118 Mbits&#x2F;sec</span><br><span class="line">- - - - - - - - - - - - - - - - - - - - - - - - -</span><br><span class="line">[ ID] Interval           Transfer     Bitrate</span><br><span class="line">[  5]   0.00-10.29  sec   493 MBytes   402 Mbits&#x2F;sec        receiver</span><br><span class="line">-----------------------------------------------------------</span><br><span class="line">Server listening on 5201</span><br><span class="line">-----------------------------------------------------------</span><br></pre></td></tr></table></figure><p>可以看到最后测试的结果是 402 Mbits/sec ，结果看 Bitrate 字段。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line">[root@node02 src]# .&#x2F;iperf3 -c 192.168.0.2</span><br><span class="line">Connecting to host 192.168.0.2, port 5201</span><br><span class="line">[  5] local 192.168.0.3 port 36410 connected to 192.168.0.2 port 5201</span><br><span class="line">[ ID] Interval           Transfer     Bitrate         Retr  Cwnd</span><br><span class="line">[  5]   0.00-1.00   sec  40.7 MBytes   341 Mbits&#x2F;sec  2239   4.47 MBytes</span><br><span class="line">[  5]   1.00-2.00   sec  48.8 MBytes   409 Mbits&#x2F;sec  1925   4.73 MBytes</span><br><span class="line">[  5]   2.00-3.00   sec  48.8 MBytes   409 Mbits&#x2F;sec  1683   4.47 MBytes</span><br><span class="line">[  5]   3.00-4.00   sec  47.5 MBytes   398 Mbits&#x2F;sec  2364   2.44 MBytes</span><br><span class="line">[  5]   4.00-5.00   sec  53.8 MBytes   451 Mbits&#x2F;sec  1492   5.02 MBytes</span><br><span class="line">[  5]   5.00-6.00   sec  45.0 MBytes   377 Mbits&#x2F;sec  2556   4.46 MBytes</span><br><span class="line">[  5]   6.00-7.00   sec  51.2 MBytes   430 Mbits&#x2F;sec  1766   4.75 MBytes</span><br><span class="line">[  5]   7.00-8.00   sec  52.5 MBytes   440 Mbits&#x2F;sec  2159   2.28 MBytes</span><br><span class="line">[  5]   8.00-9.00   sec  57.5 MBytes   482 Mbits&#x2F;sec  1424   5.00 MBytes</span><br><span class="line">[  5]   9.00-10.00  sec  47.5 MBytes   398 Mbits&#x2F;sec  2358   4.36 MBytes</span><br><span class="line">- - - - - - - - - - - - - - - - - - - - - - - - -</span><br><span class="line">[ ID] Interval           Transfer     Bitrate         Retr</span><br><span class="line">[  5]   0.00-10.00  sec   493 MBytes   414 Mbits&#x2F;sec  19966     sender</span><br><span class="line">[  5]   0.00-10.29  sec   493 MBytes   402 Mbits&#x2F;sec           receiver</span><br><span class="line"></span><br><span class="line">iperf Done.</span><br><span class="line">[root@node02 src]#</span><br></pre></td></tr></table></figure><p>从客户端来看，测试结果约是 400 Mbits/sec ，结果看 Bitrate 的值。</p><p>可以使用 <code>-P</code> 参数指定多个进程来压测带宽，使得达到该线路的极限。</p><p>服务端显示如下所示，</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br></pre></td><td class="code"><pre><span class="line">^@Accepted connection from 192.168.0.3, port 36434</span><br><span class="line">[  5] local 192.168.0.2 port 5201 connected to 192.168.0.3 port 36436</span><br><span class="line">[  8] local 192.168.0.2 port 5201 connected to 192.168.0.3 port 36438</span><br><span class="line">[ 10] local 192.168.0.2 port 5201 connected to 192.168.0.3 port 36440</span><br><span class="line">[ 12] local 192.168.0.2 port 5201 connected to 192.168.0.3 port 36442</span><br><span class="line">[ 14] local 192.168.0.2 port 5201 connected to 192.168.0.3 port 36444</span><br><span class="line">[ 16] local 192.168.0.2 port 5201 connected to 192.168.0.3 port 36446</span><br><span class="line">[ 18] local 192.168.0.2 port 5201 connected to 192.168.0.3 port 36448</span><br><span class="line">[ 20] local 192.168.0.2 port 5201 connected to 192.168.0.3 port 36450</span><br><span class="line">[ 22] local 192.168.0.2 port 5201 connected to 192.168.0.3 port 36452</span><br><span class="line">[ 24] local 192.168.0.2 port 5201 connected to 192.168.0.3 port 36454</span><br><span class="line">[ ID] Interval           Transfer     Bitrate</span><br><span class="line">[  5]   0.00-1.00   sec  8.06 MBytes  67.6 Mbits&#x2F;sec</span><br><span class="line">[  8]   0.00-1.00   sec  7.84 MBytes  65.7 Mbits&#x2F;sec</span><br><span class="line">[ 10]   0.00-1.00   sec  9.01 MBytes  75.6 Mbits&#x2F;sec</span><br><span class="line">[ 12]   0.00-1.00   sec  8.68 MBytes  72.8 Mbits&#x2F;sec</span><br><span class="line">[ 14]   0.00-1.00   sec  8.65 MBytes  72.6 Mbits&#x2F;sec</span><br><span class="line">[ 16]   0.00-1.00   sec  8.14 MBytes  68.2 Mbits&#x2F;sec</span><br><span class="line">[ 18]   0.00-1.00   sec  8.04 MBytes  67.5 Mbits&#x2F;sec</span><br><span class="line">[ 20]   0.00-1.00   sec  8.76 MBytes  73.5 Mbits&#x2F;sec</span><br><span class="line">[ 22]   0.00-1.00   sec  8.44 MBytes  70.8 Mbits&#x2F;sec</span><br><span class="line">[ 24]   0.00-1.00   sec  8.64 MBytes  72.5 Mbits&#x2F;sec</span><br><span class="line">[SUM]   0.00-1.00   sec  84.3 MBytes   707 Mbits&#x2F;sec</span><br><span class="line">- - - - - - - - - - - - - - - - - - - - - - - - -</span><br><span class="line">省略部分测试过程。</span><br><span class="line">- - - - - - - - - - - - - - - - - - - - - - - - -</span><br><span class="line">[  5]  10.00-10.26  sec  2.71 MBytes  86.5 Mbits&#x2F;sec</span><br><span class="line">[  8]  10.00-10.26  sec  2.76 MBytes  88.2 Mbits&#x2F;sec</span><br><span class="line">[ 10]  10.00-10.26  sec  2.63 MBytes  84.1 Mbits&#x2F;sec</span><br><span class="line">[ 12]  10.00-10.26  sec  3.56 MBytes   113 Mbits&#x2F;sec</span><br><span class="line">[ 14]  10.00-10.26  sec  1.43 MBytes  45.7 Mbits&#x2F;sec</span><br><span class="line">[ 16]  10.00-10.26  sec  1.50 MBytes  47.8 Mbits&#x2F;sec</span><br><span class="line">[ 18]  10.00-10.26  sec  3.54 MBytes   113 Mbits&#x2F;sec</span><br><span class="line">[ 20]  10.00-10.26  sec  3.79 MBytes   121 Mbits&#x2F;sec</span><br><span class="line">[ 22]  10.00-10.26  sec   645 KBytes  20.1 Mbits&#x2F;sec</span><br><span class="line">[ 24]  10.00-10.26  sec  2.92 MBytes  93.2 Mbits&#x2F;sec</span><br><span class="line">[SUM]  10.00-10.26  sec  25.5 MBytes   813 Mbits&#x2F;sec</span><br><span class="line">- - - - - - - - - - - - - - - - - - - - - - - - -</span><br><span class="line">[ ID] Interval           Transfer     Bitrate</span><br><span class="line">[  5]   0.00-10.26  sec   107 MBytes  87.3 Mbits&#x2F;sec        receiver</span><br><span class="line">[  8]   0.00-10.26  sec   107 MBytes  87.6 Mbits&#x2F;sec        receiver</span><br><span class="line">[ 10]   0.00-10.26  sec   107 MBytes  87.8 Mbits&#x2F;sec        receiver</span><br><span class="line">[ 12]   0.00-10.26  sec   113 MBytes  92.2 Mbits&#x2F;sec        receiver</span><br><span class="line">[ 14]   0.00-10.26  sec   108 MBytes  88.6 Mbits&#x2F;sec        receiver</span><br><span class="line">[ 16]   0.00-10.26  sec   106 MBytes  86.6 Mbits&#x2F;sec        receiver</span><br><span class="line">[ 18]   0.00-10.26  sec   110 MBytes  90.0 Mbits&#x2F;sec        receiver</span><br><span class="line">[ 20]   0.00-10.26  sec   111 MBytes  91.0 Mbits&#x2F;sec        receiver</span><br><span class="line">[ 22]   0.00-10.26  sec   107 MBytes  87.1 Mbits&#x2F;sec        receiver</span><br><span class="line">[ 24]   0.00-10.26  sec   112 MBytes  91.2 Mbits&#x2F;sec        receiver</span><br><span class="line">[SUM]   0.00-10.26  sec  1.06 GBytes   889 Mbits&#x2F;sec        receiver</span><br><span class="line">-----------------------------------------------------------</span><br><span class="line">Server listening on 5201</span><br><span class="line">-----------------------------------------------------------</span><br><span class="line">^Ciperf3: interrupt - the server has terminated</span><br></pre></td></tr></table></figure><p>在服务端可以看到在使用 10 个进程压测以后，总带宽是 889 Mbits/sec ，已经比较接近千兆网线的物理极限了。测试结果看最后的 SUM 行，Bitrate 的值。</p><p>客户端的显示如下所示。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br></pre></td><td class="code"><pre><span class="line">[root@node02 src]# .&#x2F;iperf3 -c 192.168.0.2 -P 10</span><br><span class="line">Connecting to host 192.168.0.2, port 5201</span><br><span class="line">[  5] local 192.168.0.3 port 36436 connected to 192.168.0.2 port 5201</span><br><span class="line">[  7] local 192.168.0.3 port 36438 connected to 192.168.0.2 port 5201</span><br><span class="line">[  9] local 192.168.0.3 port 36440 connected to 192.168.0.2 port 5201</span><br><span class="line">[ 11] local 192.168.0.3 port 36442 connected to 192.168.0.2 port 5201</span><br><span class="line">[ 13] local 192.168.0.3 port 36444 connected to 192.168.0.2 port 5201</span><br><span class="line">[ 15] local 192.168.0.3 port 36446 connected to 192.168.0.2 port 5201</span><br><span class="line">[ 17] local 192.168.0.3 port 36448 connected to 192.168.0.2 port 5201</span><br><span class="line">[ 19] local 192.168.0.3 port 36450 connected to 192.168.0.2 port 5201</span><br><span class="line">[ 21] local 192.168.0.3 port 36452 connected to 192.168.0.2 port 5201</span><br><span class="line">[ 23] local 192.168.0.3 port 36454 connected to 192.168.0.2 port 5201</span><br><span class="line">[ ID] Interval           Transfer     Bitrate         Retr  Cwnd</span><br><span class="line">[  5]   0.00-1.00   sec  11.6 MBytes  97.7 Mbits&#x2F;sec  308    718 KBytes</span><br><span class="line">[  7]   0.00-1.00   sec  10.4 MBytes  86.9 Mbits&#x2F;sec  260    696 KBytes</span><br><span class="line">[  9]   0.00-1.00   sec  11.6 MBytes  97.3 Mbits&#x2F;sec  313    749 KBytes</span><br><span class="line">[ 11]   0.00-1.00   sec  11.6 MBytes  97.3 Mbits&#x2F;sec  304    673 KBytes</span><br><span class="line">[ 13]   0.00-1.00   sec  12.4 MBytes   104 Mbits&#x2F;sec  308    662 KBytes</span><br><span class="line">[ 15]   0.00-1.00   sec  11.5 MBytes  96.6 Mbits&#x2F;sec  309    650 KBytes</span><br><span class="line">[ 17]   0.00-1.00   sec  11.3 MBytes  94.9 Mbits&#x2F;sec  307    634 KBytes</span><br><span class="line">[ 19]   0.00-1.00   sec  11.4 MBytes  95.4 Mbits&#x2F;sec  352    650 KBytes</span><br><span class="line">[ 21]   0.00-1.00   sec  11.6 MBytes  97.3 Mbits&#x2F;sec  289    724 KBytes</span><br><span class="line">[ 23]   0.00-1.00   sec  11.5 MBytes  96.7 Mbits&#x2F;sec  410    650 KBytes</span><br><span class="line">[SUM]   0.00-1.00   sec   115 MBytes   964 Mbits&#x2F;sec  3160</span><br><span class="line">- - - - - - - - - - - - - - - - - - - - - - - - -</span><br><span class="line">  省略部分测试过程。</span><br><span class="line">- - - - - - - - - - - - - - - - - - - - - - - - -</span><br><span class="line">[  5]   9.00-10.00  sec  10.0 MBytes  83.9 Mbits&#x2F;sec  212    707 KBytes</span><br><span class="line">[  7]   9.00-10.00  sec  11.2 MBytes  94.4 Mbits&#x2F;sec  248   1.04 MBytes</span><br><span class="line">[  9]   9.00-10.00  sec  10.0 MBytes  83.9 Mbits&#x2F;sec  252   5.66 KBytes</span><br><span class="line">[ 11]   9.00-10.00  sec  12.5 MBytes   105 Mbits&#x2F;sec  169   1.10 MBytes</span><br><span class="line">[ 13]   9.00-10.00  sec  10.0 MBytes  83.9 Mbits&#x2F;sec  201   5.66 KBytes</span><br><span class="line">[ 15]   9.00-10.00  sec  11.2 MBytes  94.4 Mbits&#x2F;sec  203   5.66 KBytes</span><br><span class="line">[ 17]   9.00-10.00  sec  12.5 MBytes   105 Mbits&#x2F;sec  217   1.36 MBytes</span><br><span class="line">[ 19]   9.00-10.00  sec  12.5 MBytes   105 Mbits&#x2F;sec  195   1.24 MBytes</span><br><span class="line">[ 21]   9.00-10.00  sec  11.2 MBytes  94.4 Mbits&#x2F;sec  222   5.66 KBytes</span><br><span class="line">[ 23]   9.00-10.00  sec  11.2 MBytes  94.4 Mbits&#x2F;sec  247   1.21 MBytes</span><br><span class="line">[SUM]   9.00-10.00  sec   112 MBytes   944 Mbits&#x2F;sec  2166</span><br><span class="line">- - - - - - - - - - - - - - - - - - - - - - - - -</span><br><span class="line">[ ID] Interval           Transfer     Bitrate         Retr</span><br><span class="line">[  5]   0.00-10.00  sec   108 MBytes  90.5 Mbits&#x2F;sec  2700      sender</span><br><span class="line">[  5]   0.00-10.26  sec   107 MBytes  87.3 Mbits&#x2F;sec           receiver</span><br><span class="line">[  7]   0.00-10.00  sec   108 MBytes  90.5 Mbits&#x2F;sec  2914      sender</span><br><span class="line">[  7]   0.00-10.26  sec   107 MBytes  87.6 Mbits&#x2F;sec           receiver</span><br><span class="line">[  9]   0.00-10.00  sec   108 MBytes  90.5 Mbits&#x2F;sec  2697      sender</span><br><span class="line">[  9]   0.00-10.26  sec   107 MBytes  87.8 Mbits&#x2F;sec           receiver</span><br><span class="line">[ 11]   0.00-10.00  sec   113 MBytes  94.7 Mbits&#x2F;sec  2427      sender</span><br><span class="line">[ 11]   0.00-10.26  sec   113 MBytes  92.2 Mbits&#x2F;sec           receiver</span><br><span class="line">[ 13]   0.00-10.00  sec   110 MBytes  92.2 Mbits&#x2F;sec  2674      sender</span><br><span class="line">[ 13]   0.00-10.26  sec   108 MBytes  88.6 Mbits&#x2F;sec           receiver</span><br><span class="line">[ 15]   0.00-10.00  sec   108 MBytes  90.4 Mbits&#x2F;sec  2719      sender</span><br><span class="line">[ 15]   0.00-10.26  sec   106 MBytes  86.6 Mbits&#x2F;sec           receiver</span><br><span class="line">[ 17]   0.00-10.00  sec   110 MBytes  92.3 Mbits&#x2F;sec  2908      sender</span><br><span class="line">[ 17]   0.00-10.26  sec   110 MBytes  90.0 Mbits&#x2F;sec           receiver</span><br><span class="line">[ 19]   0.00-10.00  sec   111 MBytes  93.4 Mbits&#x2F;sec  2650      sender</span><br><span class="line">[ 19]   0.00-10.26  sec   111 MBytes  91.0 Mbits&#x2F;sec           receiver</span><br><span class="line">[ 21]   0.00-10.00  sec   109 MBytes  91.5 Mbits&#x2F;sec  2616      sender</span><br><span class="line">[ 21]   0.00-10.26  sec   107 MBytes  87.1 Mbits&#x2F;sec           receiver</span><br><span class="line">[ 23]   0.00-10.00  sec   112 MBytes  93.6 Mbits&#x2F;sec  3176      sender</span><br><span class="line">[ 23]   0.00-10.26  sec   112 MBytes  91.2 Mbits&#x2F;sec           receiver</span><br><span class="line">[SUM]   0.00-10.00  sec  1.07 GBytes   920 Mbits&#x2F;sec  27481     sender</span><br><span class="line">[SUM]   0.00-10.26  sec  1.06 GBytes   889 Mbits&#x2F;sec           receiver</span><br><span class="line"></span><br><span class="line">iperf Done.</span><br><span class="line">[root@node02 src]#</span><br></pre></td></tr></table></figure><p>看最后的测试结果，可以发现，网络带宽在 900 Mbits/sec ,其中 sender 的带宽是 920 Mbits/sec ，receiver 带宽是 889 Mbits/sec 。测试结果看 SUM 行，Bitrate 的值。</p><blockquote><p>说明：<br>该测试只测试了 TCP 的网络带宽，更多详细的测试请关注本博客，后续会放出。<br>通过 Server 端和 Client 的测试结果来看，两者的结果一致，只要关注 Client 的结果即可。</p></blockquote><h1 id="附录-help-参数"><a href="#附录-help-参数" class="headerlink" title="附录 -help 参数"></a>附录 -help 参数</h1><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br></pre></td><td class="code"><pre><span class="line">[root@node01 src]$ .&#x2F;iperf3 -h</span><br><span class="line">Usage: iperf3 [-s|-c host] [options]</span><br><span class="line">       iperf3 [-h|--help] [-v|--version]</span><br><span class="line"></span><br><span class="line">Server or Client:</span><br><span class="line">  -p, --port      #         server port to listen on&#x2F;connect to</span><br><span class="line">  -f, --format   [kmgtKMGT] format to report: Kbits, Mbits, Gbits, Tbits</span><br><span class="line">  -i, --interval  #         seconds between periodic throughput reports</span><br><span class="line">  -F, --file name           xmit&#x2F;recv the specified file</span><br><span class="line">  -A, --affinity n&#x2F;n,m      set CPU affinity</span><br><span class="line">  -B, --bind      &lt;host&gt;    bind to the interface associated with the address &lt;host&gt;</span><br><span class="line">  -V, --verbose             more detailed output</span><br><span class="line">  -J, --json                output in JSON format</span><br><span class="line">  --logfile f               send output to a log file</span><br><span class="line">  --forceflush              force flushing output at every interval</span><br><span class="line">  -d, --debug               emit debugging output</span><br><span class="line">  -v, --version             show version information and quit</span><br><span class="line">  -h, --help                show this message and quit</span><br><span class="line">Server specific:</span><br><span class="line">  -s, --server              run in server mode</span><br><span class="line">  -D, --daemon              run the server as a daemon</span><br><span class="line">  -I, --pidfile file        write PID file</span><br><span class="line">  -1, --one-off             handle one client connection then exit</span><br><span class="line">  --rsa-private-key-path    path to the RSA private key used to decrypt</span><br><span class="line">                            authentication credentials</span><br><span class="line">  --authorized-users-path   path to the configuration file containing user</span><br><span class="line">                            credentials</span><br><span class="line">Client specific:</span><br><span class="line">  -c, --client    &lt;host&gt;    run in client mode, connecting to &lt;host&gt;</span><br><span class="line">  -u, --udp                 use UDP rather than TCP</span><br><span class="line">  --connect-timeout #       timeout for control connection setup (ms)</span><br><span class="line">  -b, --bitrate #[KMG][&#x2F;#]  target bitrate in bits&#x2F;sec (0 for unlimited)</span><br><span class="line">                            (default 1 Mbit&#x2F;sec for UDP, unlimited for TCP)</span><br><span class="line">                            (optional slash and packet count for burst mode)</span><br><span class="line">  --pacing-timer #[KMG]     set the timing for pacing, in microseconds (default 1000)</span><br><span class="line">  --fq-rate #[KMG]          enable fair-queuing based socket pacing in</span><br><span class="line">                            bits&#x2F;sec (Linux only)</span><br><span class="line">  -t, --time      #         time in seconds to transmit for (default 10 secs)</span><br><span class="line">  -n, --bytes     #[KMG]    number of bytes to transmit (instead of -t)</span><br><span class="line">  -k, --blockcount #[KMG]   number of blocks (packets) to transmit (instead of -t or -n)</span><br><span class="line">  -l, --length    #[KMG]    length of buffer to read or write</span><br><span class="line">                            (default 128 KB for TCP, dynamic or 1460 for UDP)</span><br><span class="line">  --cport         &lt;port&gt;    bind to a specific client port (TCP and UDP, default: ephemeral port)</span><br><span class="line">  -P, --parallel  #         number of parallel client streams to run</span><br><span class="line">  -R, --reverse             run in reverse mode (server sends, client receives)</span><br><span class="line">  --bidir                   run in bidirectional mode.</span><br><span class="line">                            Client and server send and receive data.</span><br><span class="line">  -w, --window    #[KMG]    set window size &#x2F; socket buffer size</span><br><span class="line">  -C, --congestion &lt;algo&gt;   set TCP congestion control algorithm (Linux and FreeBSD only)</span><br><span class="line">  -M, --set-mss   #         set TCP&#x2F;SCTP maximum segment size (MTU - 40 bytes)</span><br><span class="line">  -N, --no-delay            set TCP&#x2F;SCTP no delay, disabling Nagle&#39;s Algorithm</span><br><span class="line">  -4, --version4            only use IPv4</span><br><span class="line">  -6, --version6            only use IPv6</span><br><span class="line">  -S, --tos N               set the IP type of service, 0-255.</span><br><span class="line">                            The usual prefixes for octal and hex can be used,</span><br><span class="line">                            i.e. 52, 064 and 0x34 all specify the same value.</span><br><span class="line">  --dscp N or --dscp val    set the IP dscp value, either 0-63 or symbolic.</span><br><span class="line">                            Numeric values can be specified in decimal,</span><br><span class="line">                            octal and hex (see --tos above).</span><br><span class="line">  -L, --flowlabel N         set the IPv6 flow label (only supported on Linux)</span><br><span class="line">  -Z, --zerocopy            use a &#39;zero copy&#39; method of sending data</span><br><span class="line">  -O, --omit N              omit the first n seconds</span><br><span class="line">  -T, --title str           prefix every output line with this string</span><br><span class="line">  --extra-data str          data string to include in client and server JSON</span><br><span class="line">  --get-server-output       get results from server</span><br><span class="line">  --udp-counters-64bit      use 64-bit counters in UDP test packets</span><br><span class="line">  --repeating-payload       use repeating pattern in payload, instead of</span><br><span class="line">                            randomized payload (like in iperf2)</span><br><span class="line">  --username                username for authentication</span><br><span class="line">  --rsa-public-key-path     path to the RSA public key used to encrypt</span><br><span class="line">                            authentication credentials</span><br><span class="line"></span><br><span class="line">[KMG] indicates options that support a K&#x2F;M&#x2F;G suffix for kilo-, mega-, or giga-</span><br><span class="line"></span><br><span class="line">iperf3 homepage at: https:&#x2F;&#x2F;software.es.net&#x2F;iperf&#x2F;</span><br><span class="line">Report bugs to:     https:&#x2F;&#x2F;github.com&#x2F;esnet&#x2F;iperf</span><br><span class="line">[root@node01 src]$</span><br></pre></td></tr></table></figure><p>ok ,结束。</p><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p><p><img src="https://erdong.site/images/erdongxtnew.jpg" alt="微信公众号"></p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;QDS （Quick Deployment Series）快速的部署一个软件。这次我们来部署 Iperf 。&lt;/p&gt;
&lt;p&gt;Iperf 是一个网络性能测试工具。Iperf 可以测试最大 TCP 和 UDP 带宽性能，具有多种参数和 UDP 特性，可以根据需要调整，可以报告带宽、延迟抖动和数据包丢失。&lt;/p&gt;
    
    </summary>
    
    
      <category term="QDS" scheme="https://erdong.site/categories/QDS/"/>
    
    
      <category term="QDS" scheme="https://erdong.site/tags/QDS/"/>
    
      <category term="Iperf" scheme="https://erdong.site/tags/Iperf/"/>
    
  </entry>
  
  <entry>
    <title>Prometheus 发布 LTS 长期支持版本啦</title>
    <link href="https://erdong.site/Prometheus/New-Features/prometheus-lts-release.html"/>
    <id>https://erdong.site/Prometheus/New-Features/prometheus-lts-release.html</id>
    <published>2022-07-23T05:41:39.000Z</published>
    <updated>2022-07-21T05:45:35.478Z</updated>
    
    <content type="html"><![CDATA[<p>最近翻看 Prometheus 的发布记录，发现在 2022.07.14 发布了新的版本 v2.37.0 ，这个版本的新特性更新和 BUG 修复我们下篇文章再讲，这个版本和其他版本有一个最大的不同，那就是这个版本是 Prometheus 的第一个 LTS 版本。</p><a id="more"></a><p>LTS ，Long Time Support ，长期支持版本，这是 Prometheus 的第一个长期支持版本，这个版本会支持到 2023.01.31 ，按照 Prometheus 之前的发版频率，大约会横跨 4 个版本，直到 v2.41.0 ，个人预计 v2.42.0 或者 v2.43.0 会是下一个长期支持版本。</p><p>Prometheus 开发组一直按照每 6 周发布一个新的 Prometheus 小版本的节奏在发版，在过去的 6 周里，小版本通常不再接收 BUG 修复。如果用户在某一个小版本中受到 BUG 的影响，他们通常需要升级到最新的 Prometheus 版本。</p><p>由于 Prometheus Server 的 API 稳定性保证，升级 Prometheus 是很快捷和方便的。但是新增的功能特性和功能增加也会增加出现的问题的风险，导致需要再次升级。</p><p>Prometheus 的长期支持版本 对会进行 BUG 修复、安全性修复和文档的错误更正。这使得依赖于 Prometheus 的公司能够对版本升级的风险在可以控制的范围内，同时也可以让社区开发者继续开发维护 Prometheus 服务。</p><h1 id="LTS-版本的局限性"><a href="#LTS-版本的局限性" class="headerlink" title="LTS 版本的局限性"></a>LTS 版本的局限性</h1><p>针对长期支持版本的 Prometheus ，有一些功能是被排除在 LTS 之外的，</p><ul><li>API 的稳定性保证中被列为不稳定的接口</li><li>实验性质的功能</li><li>对 OpenBSD 的支持</li></ul><p>上边列出的这些功能是不被 LTS 支持的。</p><p>所以在使用 Prometheus 长期支持版本的时候要做好评估，在稳定性和新功能之间做好平衡。</p><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p><p><img src="https://erdong.site/images/erdongxtnew.jpg" alt="微信公众号"></p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;最近翻看 Prometheus 的发布记录，发现在 2022.07.14 发布了新的版本 v2.37.0 ，这个版本的新特性更新和 BUG 修复我们下篇文章再讲，这个版本和其他版本有一个最大的不同，那就是这个版本是 Prometheus 的第一个 LTS 版本。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="New-Features" scheme="https://erdong.site/categories/Prometheus/New-Features/"/>
    
    
      <category term="Prometheus" scheme="https://erdong.site/tags/Prometheus/"/>
    
      <category term="release" scheme="https://erdong.site/tags/release/"/>
    
  </entry>
  
  <entry>
    <title>远程办公三部曲 - 如何合理安排时间</title>
    <link href="https://erdong.site/telecommuting/telecommuting01-how-to-manage-your-time.html"/>
    <id>https://erdong.site/telecommuting/telecommuting01-how-to-manage-your-time.html</id>
    <published>2022-06-26T12:17:11.000Z</published>
    <updated>2022-06-26T14:33:16.801Z</updated>
    
    <content type="html"><![CDATA[<p>自从 2019 年十二月疫情开始，将近 3 年的时候，远程办公的频率也越来越多。疫情之前，远程办公还只是少数组织或者公司为了更灵活的人员安排而采取的一种方式，疫情当下，已经是一种必要的工作方式的补充。</p><a id="more"></a><p>在远程办公的时候，如何合理的安排时间也是一个需要斟酌考虑的方面，远程办公和在公司固定场所还是有很大区别的。</p><p>首先远程办公按照不同办公区域可以分为同时区的办公和跨时区两个场景。针对不同的场景，会略有不同。</p><h1 id="同时区办公场景"><a href="#同时区办公场景" class="headerlink" title="同时区办公场景"></a>同时区办公场景</h1><p>首先对于同时区的办公场景，比如大家都在同一个城市，只是由于疫情的原因而采取了居家办公的方式，或者都在国内，分处不同城市的分公司等等。在同时区的办公场景下，大家的作息时间基本一致，安排起来其实相对简单。</p><p>我们假定每天上午 9 点上班，中午休息 1.5 小时到 2 小时，下午大约 6 点到 7 点下班。针对这个工作时间，建议的作息时间是：<br>7:00 起床<br>8:00 早餐<br>9:00 开始上班<br>12:00 准备午餐<br>13:30 or 14:00 休息结束<br>18:30 下班<br>19:30  晚饭<br>23:00 准备睡觉</p><h2 id="早上"><a href="#早上" class="headerlink" title="早上"></a>早上</h2><p>早上 7 点起床以后，到 9 点开始上班，这中间有 2 个小时，这两个小时用来起床洗漱、制作早餐或者购买早餐，吃早餐，在楼下活动二十分钟到半个小时，打开电脑，接好水杯里的水然后开始工作。早上起来按时吃早餐可以保证一上午的精力充沛，在楼下进行早间的活动可以保证 9 点钟的时候已经是元气满满的工作状态，而不是刚起床的睡眼朦胧，这个活动可以是走路、慢跑或者任何运动量较小的活动。打开电脑接好水则像一个固定仪式一样，告诉我们，我要开始工作了。</p><p>9 点开始工作以后，尽量在半个小时以内梳理好今天的工作内容，是否需要其他同事配合你的工作，是否有会议要参加，然后联系对应的同事进行沟通，展开一天的工作。</p><h2 id="中午"><a href="#中午" class="headerlink" title="中午"></a>中午</h2><p>中午 12 点的时候要准备午饭了，如果中午有 2 小时的休息时间，那么时间还比较宽裕，如果只有 1.5 小时，那么就有些紧张了。午饭尽量在 12:00 ~ 12:40 这 40 分钟之间完成，包含做饭、吃饭、洗碗这些事项，然后 12:40 ~ 13:00 站起来走一走，13:00~13:30 午休，小憩一会儿，下午精力会更好。但是 40 分钟包含做饭、洗碗其实挺难的，可以尝试外卖或者提前做好预处理的菜品，比如早上就切好中午要做的菜。当然如果和家人同住，家人可以做饭的话是最好的，自己单独居住的话就需要多考虑了。</p><h2 id="下午"><a href="#下午" class="headerlink" title="下午"></a>下午</h2><p>下午开始工作以后注意多喝水，在下班前尽量留十几分钟，用来总结今天的工作进度和遇到的问题，以及明天的工作安排。整理好以后下班。下班以后晚上的时间相对丰富一些，可以做一些自己喜欢吃的菜，可以躺着刷剧看视频，和朋友打打游戏，可以做任何自己喜欢的事情，这是休闲放松的时间，然后在大约 23:00 的时候准备上床休息。</p><p>这样的时间安排是比较理想的，根据每个人的工作时间可以自行调节，比如有的朋友是上午 10 点开始上班，那么起床时间、下班时间往后推一个小时就可以。如果是 8 点上班，那评估一下往前调一个小时能不能接受，有些早上的事情是不是可以挪到下班后进行。这样适当的调整会更合适一些。</p><p>还有就是加班问题，遇到加班问题只能是牺牲晚上的娱乐时间了。如果遇到突发问题，那么只能紧急处理了。</p><h1 id="跨时区办公场景"><a href="#跨时区办公场景" class="headerlink" title="跨时区办公场景"></a>跨时区办公场景</h1><p>其次对于跨时区的办公场景，一般是全球化的业务，比如你在中国，有合作的同事在欧洲或者美洲，或者是在其他州有客户的问题需要支持。</p><p>在跨时区的办公场景中，自身的作息时间也可以参照上边的作息时间来安排，和同时区的办公场景最大的不同就是要兼顾其他时区的同事，和同事的沟通都尽量安排在大家共同的工作时间内，其他时间做一些可以独立完成的工作。</p><h1 id="时间安排的原则"><a href="#时间安排的原则" class="headerlink" title="时间安排的原则"></a>时间安排的原则</h1><p>在远程办公场景下，时间安排遵循以下规则可以更好的平衡生活和工作，提高工作效率。</p><p>保证合理的休息、睡眠时间。只有休息好，才有精力工作，休息不好，工作时间犯困，会严重降低工作效率，而且会出错。<br>保证每天的三餐按时食用。吃的好，保持长期的营养均衡，可以打造一个强壮的身体，身体才是革命的本钱。<br>保证每天有一定量的运动。适当的运动可以保持我们的身体健康，长期久坐容易出现各种问题，我们还是要关注自己的健康状态。<br>保证每天水分的摄入。不知道大家是什么情况，我长时间坐在电脑面前经常忘记喝水，所以，一定要经常站起来去接杯水，然后喝水。<br>保留一定的休闲娱乐时间。除了上述的原则，我们也要休闲娱乐，也需要放松，休息好以后才能更好 的工作。</p><p>以上原则是我认为比较重要的一些点，大家在安排时间的时候可以把自己认为重要的点添加进去，比如陪伴家人，参与孩子的活动等等。</p><h1 id="远程办公的自律能力"><a href="#远程办公的自律能力" class="headerlink" title="远程办公的自律能力"></a>远程办公的自律能力</h1><p>远程办公是需要一定的自律能力的，自律能力差的人远程办公的效率会变低，从时间安排角度来看，在时间安排好以后，需要在预定的时间内，完成自己计划的事情，这样才能享受时间安排带来的便利。自律能力差、执行力差会导致在既定的时间内没有完成任务，进而拖延的下一个时间段的计划，久而久之，安排的任务都不能完成，会对自信心造成打击，怀疑自己的能力，厌恶时间安排这个事情，认为计划造成了束缚，开始破罐破摔，丧失信心。</p><p>在一定的自律能力下，合理的安排时间和任务，按照计划执行，发现时间不够或者其他问题以后立即进行调整，然后重新安排时间和任务，形成一个正向的循环，远程办公的时间效率越来越高，最后工作效率也越来越高。</p><p>本文收录于远程办公三部曲：</p><p><a href="https://erdong.site/telecommuting/telecommuting01-how-to-manage-your-time.html">远程办公三部曲 - 如何合理安排时间</a><br><a href="https://erdong.site/telecommuting/telecommuting02-how-to-imporove-communication-efficiency.html">远程办公三部曲 - 如何提高沟通效率</a><br><a href="https://erdong.site/telecommuting/telecommuting03-how-to-imporove-work-efficiency.html">远程办公三部曲 - 如何提高工作效率</a></p><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p><p><img src="https://erdong.site/images/erdongxtnew.jpg" alt="微信公众号"></p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;自从 2019 年十二月疫情开始，将近 3 年的时候，远程办公的频率也越来越多。疫情之前，远程办公还只是少数组织或者公司为了更灵活的人员安排而采取的一种方式，疫情当下，已经是一种必要的工作方式的补充。&lt;/p&gt;
    
    </summary>
    
    
      <category term="telecommuting" scheme="https://erdong.site/categories/telecommuting/"/>
    
    
      <category term="telecommuting" scheme="https://erdong.site/tags/telecommuting/"/>
    
      <category term="manage time" scheme="https://erdong.site/tags/manage-time/"/>
    
  </entry>
  
  <entry>
    <title>Prometheus 2.35.0 新特性</title>
    <link href="https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-35-0.html"/>
    <id>https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-35-0.html</id>
    <published>2022-06-26T12:16:16.000Z</published>
    <updated>2022-06-26T14:22:51.513Z</updated>
    
    <content type="html"><![CDATA[<p>Prometheus <a href="https://github.com/prometheus/prometheus/releases/tag/v2.35.0" target="_blank" rel="noopener">2.35.0</a> 现在(2022.04.21)已经发布，在上个月的 <a href="http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-34-0.html">2.34.0</a> 之后又进行了很多的修复和改进。</p><a id="more"></a><p>这次更新新增了很多的特性，并且修复一些 BUG 。</p><p>Prometheus 这次发行使用了 Go 1.18 版本进行构建，包含两个与TLS相关的显著更改:</p><p>客户端默认禁用TLS 1.0和1.1协议。Prometheus 用户可以使用 tls_config 的 min_version 参数来覆盖它。如果使用 SHA-1 哈希函数签名的证书将被拒绝，这样不适用于自签名的根证书。</p><h1 id="PromQL-amp-promtool"><a href="#PromQL-amp-promtool" class="headerlink" title="PromQL &amp; promtool"></a>PromQL &amp; promtool</h1><p>Promtool 工具新增了一个参数 <code>--lint</code> ，这个参数用来检查规则和检查配置，导致检查错误的退出码是 （3），该参数默认是开启的。</p><p>PromQL 查询语句使用查询中的样本总数和峰值数量扩展统计信息。<br>此外，在查询 API 中使用 <code>--enable-feature=promql-per-step-stats</code> 和使用 <code>stats=all</code> 可以获得每一步的统计信息。可以使用 <code>--enable-feature=per-step-stats</code> 。</p><h1 id="TSDB"><a href="#TSDB" class="headerlink" title="TSDB"></a>TSDB</h1><p>时序数据库有一个变化，当启动 Prometheus 的时候会删除 *.tmp 的 WAL 文件。时序数据库在启动读 WAL 的可以更有效的排序和分类。</p><h1 id="SD"><a href="#SD" class="headerlink" title="SD"></a>SD</h1><p>Azure 服务发现添加了一个指标去跟踪 Azure 服务发现的失败，还增加了一个 resource_group 的配置选项。</p><p>首先 K8s 服务发现允许将节点元数据附加到发现的 pods 上。其次 K8s 支持 discovery.k8s.io/v1 的 EndpointSlice ，以前只有discovery.k8s.io/v1beta1 EndpointSlice 被支持。</p><p>K8s 服务发现这次修复了一个 BUG，显式包含来自 k8s.io 的 gcp 认证。</p><h1 id="UI"><a href="#UI" class="headerlink" title="UI"></a>UI</h1><p>UI 方面修复了获取指标间隔和持续时间的工具提示不显示在 Target 页面上的问题。</p><h1 id="Prometheus-Agent"><a href="#Prometheus-Agent" class="headerlink" title="Prometheus Agent"></a>Prometheus Agent</h1><p>Prometheus Agent 修复了加载一个包含多个分段的WAL时ID冲突的问题。</p><h1 id="Remote-write"><a href="#Remote-write" class="headerlink" title="Remote-write"></a>Remote-write</h1><p>远程写方面修复了批处理和刷新队列之间的死锁问题。</p><h1 id="Other"><a href="#Other" class="headerlink" title="Other"></a>Other</h1><p>Prometheus 支持自动将变量 GOMAXPROCS 设置为容器 CPU 限制，使用 <code>--enable-feature=auto-gomaxprocs</code> 参数开启。</p><p>Prometheus 修复了 OpenMetrics 解析器以正确排序大写标签。</p><p>Tracing 和 GRPC 方面仅 <code>insecure</code> 为 false 时设置 TLS 的认证凭据。</p><p>OAuth2方面 Prometheus 这次更新以后支持使用代理URL来获取OAuth2令牌</p><p>配置方面，Prometheus 新增了添加禁用 HTTP2 的能力，而且支持覆盖最小TLS版本。</p><p>详细的发行注记可以查看 <a href="https://github.com/prometheus/prometheus/releases/tag/v2.35.0" target="_blank" rel="noopener">release notes</a> 。</p><h1 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h1><ul><li><a href="https://github.com/prometheus/prometheus/releases/tag/v2.35.0" target="_blank" rel="noopener">https://github.com/prometheus/prometheus/releases/tag/v2.35.0</a> ，By prombot of GitHub</li></ul><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p><p><img src="https://erdong.site/images/erdongxtnew.jpg" alt="微信公众号"></p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Prometheus &lt;a href=&quot;https://github.com/prometheus/prometheus/releases/tag/v2.35.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2.35.0&lt;/a&gt; 现在(2022.04.21)已经发布，在上个月的 &lt;a href=&quot;http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-34-0.html&quot;&gt;2.34.0&lt;/a&gt; 之后又进行了很多的修复和改进。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="New-Features" scheme="https://erdong.site/categories/Prometheus/New-Features/"/>
    
    
      <category term="Prometheus" scheme="https://erdong.site/tags/Prometheus/"/>
    
      <category term="Features" scheme="https://erdong.site/tags/Features/"/>
    
      <category term="release" scheme="https://erdong.site/tags/release/"/>
    
  </entry>
  
  <entry>
    <title>Prometheus 2.36.0 新特性</title>
    <link href="https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-36-0.html"/>
    <id>https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-36-0.html</id>
    <published>2022-06-26T12:16:16.000Z</published>
    <updated>2022-06-28T14:45:49.578Z</updated>
    
    <content type="html"><![CDATA[<p>Prometheus <a href="https://github.com/prometheus/prometheus/releases/tag/v2.36.0" target="_blank" rel="noopener">2.36.0</a> 现在(2022.05.30)已经发布，在上个月的 <a href="http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-35-0.html">2.35.0</a> 之后又进行了很多的修复和改进。</p><a id="more"></a><p>这次更新的 Prometheus  版本使用的是 Go 1.18 ，之后的版本在构建的时候需要最小使用 Go 1.17 的版本，其他 Go 版本将不能在用来构建 Prometheus 。</p><p>这次更新的内容相对以往的版本少一些。</p><p>首先新增了一个添加小写和大写的重新标记动作的功能。</p><p>第二还新增了 stripDomain 的模板函数功能。</p><p>第三，对于 Agent 模式添加了一个标识符。</p><p>对于 UI 方面，这次新增了一个开关，打开后可以主动搜索掉线的 Target。</p><p>对于服务发现这部分，这次新增了 2 种，分别是 IONOS Cloud 和 Vultr ，另外这次新增了 Linode 服务发现失败计数的 指标。</p><p>对于 Promtool 工具这次支持在查询 Label 值的时候使用匹配器。</p><p>接下来就是 BUG 修复了。</p><ul><li><ol><li>将 TotalQueryableSamples 从 int 更改为了 int 64 </li></ol></li><li><ol start="2"><li>TSDB 以及 Agent 会忽略重复的 Exemplar。</li></ol></li><li><ol start="3"><li>TSDB 修复了在变化的 rate 的时候数据块溢出以的问题</li></ol></li><li><ol start="4"><li>在 TSDB 停止之前会先停止规则管理器</li></ol></li></ul><p>后来更新了 2.36.1 ，Promtool 工具新了一个 <code>--lint-fatal</code> 选项。</p><p>再后来更新了 2.36.2 ，修复了字体和图表等一些静态资源的问题。</p><p>这个版本更新的内容不太多，感觉开发团队是不是在憋大招呀，大家可以等等下一个版本，如果没有什么需求的话，可以等下一个版本再升级。</p><p>Prometheus 在 V2 这个版本已经发布了 36 个版本，差不多快赶上 0.x 和1.x 的总和了。我们期待一下，看看什么时候进入 3.0 ，以及会有什么更大的变化。</p><p>详细的发行注记可以查看 <a href="https://github.com/prometheus/prometheus/releases/tag/v2.36.0" target="_blank" rel="noopener">release notes</a> 。</p><h1 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h1><ul><li><a href="https://github.com/prometheus/prometheus/releases/tag/v2.36.0" target="_blank" rel="noopener">https://github.com/prometheus/prometheus/releases/tag/v2.36.0</a> ，By prombot of GitHub</li></ul><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p><p><img src="https://erdong.site/images/erdongxtnew.jpg" alt="微信公众号"></p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Prometheus &lt;a href=&quot;https://github.com/prometheus/prometheus/releases/tag/v2.36.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2.36.0&lt;/a&gt; 现在(2022.05.30)已经发布，在上个月的 &lt;a href=&quot;http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-35-0.html&quot;&gt;2.35.0&lt;/a&gt; 之后又进行了很多的修复和改进。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="New-Features" scheme="https://erdong.site/categories/Prometheus/New-Features/"/>
    
    
      <category term="Prometheus" scheme="https://erdong.site/tags/Prometheus/"/>
    
      <category term="Features" scheme="https://erdong.site/tags/Features/"/>
    
      <category term="release" scheme="https://erdong.site/tags/release/"/>
    
  </entry>
  
  <entry>
    <title>远程办公三部曲 - 如何提高沟通效率</title>
    <link href="https://erdong.site/telecommuting/telecommuting02-how-to-imporove-communication-efficiency.html"/>
    <id>https://erdong.site/telecommuting/telecommuting02-how-to-imporove-communication-efficiency.html</id>
    <published>2022-06-26T12:16:16.000Z</published>
    <updated>2022-06-26T14:33:31.830Z</updated>
    
    <content type="html"><![CDATA[<p>前边我们聊了如何安排时间，没有看的朋友可以去看 <a href="https://erdong.site/telecommuting/telecommuting02-how-to-imporove-communication-efficiency.html">远程办公三部曲 - 如何合理安排时间</a> 。远程办公的和固定工作场所办公有很多区别，其中比较重要的一点就是沟通。那么远程办公的沟通效率怎么样呢，有没有办法提高呢。</p><a id="more"></a><h1 id="固定场所的沟通方式"><a href="#固定场所的沟通方式" class="headerlink" title="固定场所的沟通方式"></a>固定场所的沟通方式</h1><p>在公司办公的时候，在沟通上有一点，那就是方便。不论是和身边的同事沟通简单的问题，还是比较复杂的项目沟通，都可以很快速的完成。<br>这个时候的沟通方式有<br>1、即时通讯工具图文沟通<br>2、小问题两三个人面对面沟通<br>3、大型项目或者复杂问题通过会议面对面沟通<br>4、通过工具进行语音沟通。<br>这些沟通方式中，面对面沟通基本占了大头，超过 60%的沟通都是面对面解决的，这是在固定场所集体办公的优势。而且小问题几个人面对面的讨论更容易梳理问题，表达思想描述事情的信息损耗是最小的。面对复杂问题需要更多人处理的时候，召开会议，面对面进行沟通也能很快的解决问题。在这种场景下，使用即时通讯工具进行基础事情的沟通的次数反而变少。</p><h1 id="远程办公的沟通方式"><a href="#远程办公的沟通方式" class="headerlink" title="远程办公的沟通方式"></a>远程办公的沟通方式</h1><p>当脱离了固定场所办公，远程办公一般是在家里居家办公，个别情况下会有租赁共享办公室之类的现象，在这种情况下，和异地的同事进行沟通，大概有这么几种方式</p><p>1、即时通讯工具图文沟通<br>2、通过工具进行语音沟通。<br>3、使用会议软件进行沟通</p><p>在这种场景下，从面对面为主的沟通变成了打电话为主的语音沟通或者图文沟通，这样会有两个变化，第一个是增加了沟通时间，第二是降低了沟通的效率，大家需要谨慎的确认对方是否真的理解了要表达的内容。</p><h1 id="如何提高沟通效率"><a href="#如何提高沟通效率" class="headerlink" title="如何提高沟通效率"></a>如何提高沟通效率</h1><p>对于远程办公的沟通效率较低的问题，我们可以尝试通过一些方法来解决，比如：<br>1、事先准备<br>2、条理清晰<br>3、善用工具<br>4、做好记录</p><p>首先，我们应该在沟通之前做好准备，准备好这次要沟通的内容，需要参与沟通的人员，最后需要得出哪个方向的结论，不要设置漫无目的讨论，这样会大量的浪费时间，</p><p>其次在沟通过程中要做到条理清晰，发起人介绍完事情背景以后要把控整个沟通的节奏，一条一条的进行讨论得出结果，并且记录，防止出现沟通偏离主题的现象。</p><p>第三要善用各种工具，包括沟通的语音或者会议工具，记录的文档系统，跟进的系统等等。由于是远程，首先需要一个稳定的沟通工具，这个大家根据自己的实际情况选择就好，一定要保证可以容纳当前会议的人数，并且保证语言传输稳定且清晰。</p><p>第四点就是做好沟通记录，沟通过程中大家对每一条达成的结论，最后由谁负责，中间需要哪个团队来配合，需要什么资源，在什么时间完成，这些都要记录清楚，并且同步在场的每一个人。</p><h1 id="如何确保沟通结果"><a href="#如何确保沟通结果" class="headerlink" title="如何确保沟通结果"></a>如何确保沟通结果</h1><p>沟通结束以后，其实并不代表事情已经结束，我们还需要对这个事情进行跟踪，确保落实，否则还需要重新进行沟通，不节约资源。对于确保沟通结果可以尝试以下方法<br>1、记录到文档内<br>2、发送给所有参与者<br>3、定期检查进度，<br>4、出现问题及时沟通处理。</p><p>首先我们要保证所有沟通的内容都已经记录下来了，记录在一个文档中，这个文档描述了谁负责那件事情，中间需要哪个团队来配合，需要什么资源，在什么时间完成。</p><p>其次我们通过邮件发给每个人，或者组建一个所有参与者都在的沟通群，将这个文档放在这群里。</p><p>第三就是一定要定期检查进度，看看是否遇到了什么困难，要怎么处理，是否需要新的资源加入进来。</p><p>综上所述，对于沟通我们一定要做好沟通前的准备，沟通时的条理，沟通后的保障，这样才能在远程办公的情况下，提高沟通效率。</p><p>本文收录于远程办公三部曲：<br><a href="https://erdong.site/telecommuting/telecommuting01-how-to-manage-your-time.html">远程办公三部曲 - 如何合理安排时间</a><br><a href="https://erdong.site/telecommuting/telecommuting02-how-to-imporove-communication-efficiency.html">远程办公三部曲 - 如何提高沟通效率</a><br><a href="https://erdong.site/telecommuting/telecommuting03-how-to-imporove-work-efficiency.html">远程办公三部曲 - 如何提高工作效率</a></p><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p><p><img src="https://erdong.site/images/erdongxtnew.jpg" alt="微信公众号"></p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;前边我们聊了如何安排时间，没有看的朋友可以去看 &lt;a href=&quot;https://erdong.site/telecommuting/telecommuting02-how-to-imporove-communication-efficiency.html&quot;&gt;远程办公三部曲 - 如何合理安排时间&lt;/a&gt; 。远程办公的和固定工作场所办公有很多区别，其中比较重要的一点就是沟通。那么远程办公的沟通效率怎么样呢，有没有办法提高呢。&lt;/p&gt;
    
    </summary>
    
    
      <category term="telecommuting" scheme="https://erdong.site/categories/telecommuting/"/>
    
    
      <category term="telecommuting" scheme="https://erdong.site/tags/telecommuting/"/>
    
      <category term="communication" scheme="https://erdong.site/tags/communication/"/>
    
  </entry>
  
  <entry>
    <title>远程办公三部曲 - 如何提高工作效率</title>
    <link href="https://erdong.site/telecommuting/telecommuting03-how-to-imporove-work-efficiency.html"/>
    <id>https://erdong.site/telecommuting/telecommuting03-how-to-imporove-work-efficiency.html</id>
    <published>2022-06-26T12:16:16.000Z</published>
    <updated>2022-06-26T14:34:09.084Z</updated>
    
    <content type="html"><![CDATA[<p>作为远程办公三部曲，我前边分别聊了 <a href="(https://erdong.site/telecommuting/telecommuting01-how-to-manage-your-time.html">远程办公三部曲 - 如何合理安排时间</a> 和 <a href="https://erdong.site/telecommuting/telecommuting02-how-to-imporove-communication-efficiency.html">远程办公三部曲 - 如何提高沟通效率</a>，那么今天我们聊聊最后的一个话题，如何提高工作效率。</p><a id="more"></a><h1 id="工作的仪式感"><a href="#工作的仪式感" class="headerlink" title="工作的仪式感"></a>工作的仪式感</h1><p>远程办公的时候一般是在家里，在家里经常会有一种生活和工作混淆的感觉，没有了严格的界限，有时候太随意导致工作效率下降。其实我们可以通过增加一些工作的仪式感来通过潜意识告诉自己，我要开始工作了，以及我今天的工作结束了，我下班了，要开始准备生活的部分了。</p><p>第一点，上班前有一个小的活动，让自己的身体苏醒过来，告诉自己，我要开始上班了，不要刚起床就打开电脑办公。</p><p>第二点，在家里远程办公的时候，在开始办公之前，可以给自己更换一下衣服，换成每天出门要穿的衣服，不要穿着家居服就开始办公。更换衣服可以起到很好的仪式作用，告诉自己，我要开始办公了，下班以后更换自己的家居服，告诉自己，我下班了。这个通过一个更换衣服的动作，来给自己的生活和工作分隔开来，更专注高效的完成工作。</p><p>第三点，可以在办公的桌子上放一面小镜子，时不时的通过镜子看一眼自己的状态，看看自己是不是处于一个工作的状态，还是处于休闲的状态。如果是处于休闲的状态，那么告诉自己，我现在是需要工作的，我工作到一定时间了才可以休息。很多客服之前用桌面放镜子的方式来检查自己的状态，我觉得用在远程办公的场景下，也很不错。</p><p>第四点，工作的时候，坐在电脑前，不工作休息的时候，去其他地方，把电脑周围有意识的塑造成一个办公的区域。</p><p>通过上述 4 个方面来增强自己办公的仪式感，告诉自己，我在工作，专注于工作，这样可以提高工作的效率。</p><h1 id="合理的办公环境"><a href="#合理的办公环境" class="headerlink" title="合理的办公环境"></a>合理的办公环境</h1><p>除了上边提到的仪式感以外，一个合理的办公环境也是必不可少的。最好能拥有如下条件：<br>1、 尽量隔离的单人空间<br>2、单独的办公桌子和椅子<br>3、合理的通风、光线布局<br>4、网络质量良好的网络环境</p><p>就单独的个人空间来说，最好是自己有一个单独的书房用来办公，这样环境安静、空间宽敞是最好不过了。最不建议的位置是在卧室的床边，这样第一是生活和工作没有完全隔离开来，看着床铺，总想着躺着休息一下，不利于专心工作。我目前的办公环境是在客厅的一角，我也没有单独的书房，但是我把客厅的一角布置成了办公的样子，专门放置了桌子和椅子。从空间角度确实不如单独的书房好，但是权衡以后比卧室好很多，单独的桌子和椅子也提供了很大的便利。之前居家办公的时候，有同事在餐桌上办公，餐桌的高度和餐椅的高度都不适合办公使用。后来很多同事都专门买了办公的椅子，椅子因为长时间坐了，建议购买人体工学椅，不建议购置休闲椅和电竞椅，这两个类型都不利于长期办公。</p><p>另外就是办公区域的通风和光线非常重要，通风不好，工作时间久了会觉得头晕，闷闷沉沉的，之前见过一个 UP 主为了光线的布置导致屋里空气流通不畅，他最后的解决方式是防止了一个空气质量检测仪，实时监测办公桌上的 二氧化碳浓度，一旦过高，就打开窗户进行通风。另外一个就是光线了，良好的光线环境可以缓解视觉疲劳，不要过分刺眼的阳台环境，也不要过于昏暗的角落，保持正常的光线环境，有利于视力的保护，天暗了以后的灯具选择也很重要，建议选择适合办公的灯具，比如办公的台灯或者屏幕挂灯。</p><p>最后就是网络环境了，网络环境可以说是远程办公的基础，网络环境太差对于工作的影响太大了，根据不同的工作场景选择对应的网络带宽和网络设备，合理的使用有线或者无线可以创造良好的办公网络环境。如果没有经验，也可以找专人来搭建。</p><h1 id="一些设备和工具"><a href="#一些设备和工具" class="headerlink" title="一些设备和工具"></a>一些设备和工具</h1><p>在办公过程中，有很多的设备和工具是可以提高办公效率的，比如前边提到的办公桌子和人体工学椅。除了这些以外，还有很多的设备和工具可以来提高工作效率。</p><p>1、鼠标和键盘<br>2、番茄钟以及类似产品<br>3、视频会议软件<br>4、显示器<br>5、屏幕挂灯<br>6、升降桌</p><p>首先，作为输入设备和生产力工具，键盘和鼠标是排在第一位的，合适、顺手的键盘鼠标可以不止一倍的提升工作效率。比如视频剪辑工作者的剪辑键盘，文字编辑工作者的键盘，选择一个适合自己的办公场景的鼠标键盘是重要的，比如我经常打字，我经常使用的就是一把 cherry 的青轴机械键盘，自己用的很开心，效率也很好，就是在多人办公的情况下，青轴不太友好，不过自己在家办公就无所谓了。</p><p>第二就是为了让自己的工作和中间休息合理搭配的番茄钟，这样可以工作 40 分钟，休息 10 分钟这样轮换着来。当然，有人需要一个实体的物件来提醒自己，有些人不需要，以及有些朋友是不使用番茄工作法来进行工作。我们可以使用任何自己觉得合适的方法以及工具来平衡工作时间内的工作和休息，适合自己就好。</p><p>第三是远程视频会议软件，作为远程工作和其他同事交流的重要工具，一个好的不卡顿、无故障的视频会议软件太重要了，这可以极大的提高沟通效率和工作效率。</p><p>剩下的基本都是可选项，基于我们的办公内容选自一个合适的显示器，以及改变工作桌上光线布局的屏幕挂灯，比如我现在打字，长长的带鱼屏显示器就非常适合我，可以一边查资料一边写内容，都不用切换窗口布局。晚上打字的时候，打开屏幕挂灯，调节好亮度和色温，比屋里的顶灯好用太多了。如果觉得久坐不好，也可以选择升降桌来进行站坐交替的办公形式。</p><p>总之，在远程办公的场景下，让自己的办公过程具有仪式感，并且布置合理的办公场景，加上一些合适个设备和工具，是可以极大的提供自己的工作效率的。</p><p>本文收录于远程办公三部曲：<br><a href="https://erdong.site/telecommuting/telecommuting01-how-to-manage-your-time.html">远程办公三部曲 - 如何合理安排时间</a><br><a href="https://erdong.site/telecommuting/telecommuting02-how-to-imporove-communication-efficiency.html">远程办公三部曲 - 如何提高沟通效率</a><br><a href="https://erdong.site/telecommuting/telecommuting03-how-to-imporove-work-efficiency.html">远程办公三部曲 - 如何提高工作效率</a></p><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p><p><img src="https://erdong.site/images/erdongxtnew.jpg" alt="微信公众号"></p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;作为远程办公三部曲，我前边分别聊了 &lt;a href=&quot;(https://erdong.site/telecommuting/telecommuting01-how-to-manage-your-time.html&quot;&gt;远程办公三部曲 - 如何合理安排时间&lt;/a&gt; 和 &lt;a href=&quot;https://erdong.site/telecommuting/telecommuting02-how-to-imporove-communication-efficiency.html&quot;&gt;远程办公三部曲 - 如何提高沟通效率&lt;/a&gt;，那么今天我们聊聊最后的一个话题，如何提高工作效率。&lt;/p&gt;
    
    </summary>
    
    
      <category term="telecommuting" scheme="https://erdong.site/categories/telecommuting/"/>
    
    
      <category term="telecommuting" scheme="https://erdong.site/tags/telecommuting/"/>
    
      <category term="work" scheme="https://erdong.site/tags/work/"/>
    
  </entry>
  
  <entry>
    <title>漫谈公网网络延迟</title>
    <link href="https://erdong.site/Linux/public-network-latency.html"/>
    <id>https://erdong.site/Linux/public-network-latency.html</id>
    <published>2022-06-25T15:44:49.000Z</published>
    <updated>2022-06-22T01:41:16.049Z</updated>
    
    <content type="html"><![CDATA[<p>互联网发展至今，网络可以说是基础，所有的数据、内容都跑在网络上，今天和同事在沟通工作的过程中，发现很多人对公网的网络延迟是没有概念的。</p><a id="more"></a><p>我们知道网络延迟是指数据在传输介质中传输所用的时间，即从报文开始进入网络到它开始离开网络之间的时间。针对这个延迟我们可以使用 Ping 命令基于 ICMP 协议来进行测试。比如我们 Ping 百度的域名。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">Erdong@Erdong-Test # ping baidu.com            </span><br><span class="line">PING baidu.com (220.181.38.251): 56 data bytes</span><br><span class="line">64 bytes from 220.181.38.251: icmp_seq&#x3D;0 ttl&#x3D;50 time&#x3D;12.563 ms</span><br><span class="line">64 bytes from 220.181.38.251: icmp_seq&#x3D;1 ttl&#x3D;50 time&#x3D;9.514 ms</span><br><span class="line">64 bytes from 220.181.38.251: icmp_seq&#x3D;2 ttl&#x3D;50 time&#x3D;9.023 ms</span><br><span class="line">64 bytes from 220.181.38.251: icmp_seq&#x3D;3 ttl&#x3D;50 time&#x3D;9.192 ms</span><br><span class="line">64 bytes from 220.181.38.251: icmp_seq&#x3D;4 ttl&#x3D;50 time&#x3D;17.045 ms</span><br><span class="line">64 bytes from 220.181.38.251: icmp_seq&#x3D;5 ttl&#x3D;50 time&#x3D;11.408 ms</span><br><span class="line">64 bytes from 220.181.38.251: icmp_seq&#x3D;6 ttl&#x3D;50 time&#x3D;13.894 ms</span><br><span class="line">64 bytes from 220.181.38.251: icmp_seq&#x3D;7 ttl&#x3D;50 time&#x3D;10.504 ms</span><br><span class="line">64 bytes from 220.181.38.251: icmp_seq&#x3D;8 ttl&#x3D;50 time&#x3D;10.980 ms</span><br><span class="line">64 bytes from 220.181.38.251: icmp_seq&#x3D;9 ttl&#x3D;50 time&#x3D;15.370 ms</span><br><span class="line">64 bytes from 220.181.38.251: icmp_seq&#x3D;10 ttl&#x3D;50 time&#x3D;10.628 ms</span><br><span class="line">^C</span><br><span class="line">--- baidu.com ping statistics ---</span><br><span class="line">11 packets transmitted, 11 packets received, 0.0% packet loss</span><br><span class="line">round-trip min&#x2F;avg&#x2F;max&#x2F;stddev &#x3D; 9.023&#x2F;11.829&#x2F;17.045&#x2F;2.501 ms</span><br></pre></td></tr></table></figure><p>上边显示整个过程发送了 11 个数据包，平均延迟是 11.829ms ，这个就是我当前电脑本地到百度最近的服务的延迟，这个延迟相对来说是很好的了。</p><p>对于公网来说，网络延迟是和地理位置强相关的一个指标。假设我们在北京部署了一个站点，从深圳访问的时候，这个延迟大概要 40ms ，基本不会低于 30ms。那么这延迟是怎么来的，为什么是这个数值，能不能减少呢？</p><p>我们都知道，网络传输是通过传输介质来进行的，常见的传输介质就是双绞网线和光纤，另外还有其他类型的线材。短距离一般是双绞网线，普通场景下的网络延迟基本可以忽略不计，长距离和超长距离一般是光纤光缆，这个时候迟延就非常明显。</p><p>我们已知光在真空中传播，折射率为 1，其光速约为 c=30 万公里/秒，当光在其他介质里来面传播，其介质折射自率为 n,光在其中的速度就降为 v=c/n，光纤的材料是二氧化硅，其折射率 n 为 1.44 左右，计算延迟的时候，可以近似认为 1.5，我们通过计算可以得出光纤中的光传输速度近似为 v=c/1.5= 20 万公里/秒。</p><p>以北京和深圳为例，直线距离 1920 公里，接近 2000 公里，传输介质如果使用光纤光缆，那么延迟时间 t=L/v = 0.2 万公里/20 万公里/秒=10ms ，也就是说从北京到深圳拉一根 2000 公里的光缆，单纯的距离延迟就要 10ms ，实际上是没有这么长的光缆的，中间是需要通过基站来进行中继，并且当光功率损耗到一定值以后，需要通过转换器加强功率以后继续传输，这个中转也是要消耗时间的。另外数据包在网络中长距离传输的时候是会经过多次的封包和拆包，这个也会消耗时间。</p><p>综合考虑各种情况以后，以北京到深圳为例，总的公网延迟大约在 40ms 左右，北京到上海的公网延迟大约在 30ms ，同城的情况下，公网延迟大约在 10ms ~ 15ms ，基本维持在 20ms 以内。如果数据出国的话，延迟会更大，比如中国到美国，延迟一般在 150ms ~ 200ms 左右，因为要经过太平洋的海底光缆过去的。</p><p>现在我们对于公网的延迟有了一个基本的概念，也理解了为什么自己附近的网站打开会快一些，越远的网站打开会越慢。那么回到开头 Ping 百度域名的例子里，有没有人想过为什么 Ping 百度的域名总是很快，好像全国各地差别并不大？</p><p>这个其实是百度在全国很多城市都有放置服务器，我们每个人访问的百度都是离自己最近的服务器，并不会出现，人在北京，访问了一台深圳的服务器的情况。所以访问会快很多。</p><p>好了，今天就聊这么多。</p><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;互联网发展至今，网络可以说是基础，所有的数据、内容都跑在网络上，今天和同事在沟通工作的过程中，发现很多人对公网的网络延迟是没有概念的。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Linux" scheme="https://erdong.site/categories/Linux/"/>
    
    
      <category term="Network" scheme="https://erdong.site/tags/Network/"/>
    
  </entry>
  
  <entry>
    <title>Prometheus 2.33.0 新特性</title>
    <link href="https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-33-0.html"/>
    <id>https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-33-0.html</id>
    <published>2022-06-25T12:17:11.000Z</published>
    <updated>2022-06-26T09:36:13.668Z</updated>
    
    <content type="html"><![CDATA[<p>Prometheus <a href="https://github.com/prometheus/prometheus/releases/tag/v2.33.0" target="_blank" rel="noopener">2.33.0</a> 现在(2022.01.29)已经发布，在上个月的 <a href="http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-32-0.html">2.32.0</a> 之后又进行了很多的修复和改进。</p><a id="more"></a><p>这次更新新增了很多的特性，并且修复一些 BUG 。</p><h1 id="PromQL-amp-Promtool"><a href="#PromQL-amp-Promtool" class="headerlink" title="PromQL &amp; Promtool"></a>PromQL &amp; Promtool</h1><p>这次的更新 PromQL 查询语句中为了稳定性，增加了负方向的便宜和 @ 的修饰。在 Promtool 工具中新增了通过基数分析来检查指标的功能，这个功能需要使用 <code>--extended</code> 参数来开启。另外 Promtool 工具修复了 2 个 BUG，一个是统一执行后的退出码，另外一个是修复检测 rule 规则的一个漏洞。</p><h1 id="Web"><a href="#Web" class="headerlink" title="Web"></a>Web</h1><p>针对 Web 这块这次将 <code>remote-write-receiver</code> 升级的了稳定状态。<br>Web 这次新增了一个功能，在 rule 规则 API 中添加了一个限制字段，可以限制返回的最大指标数量，防止大查询违反服务器端 URL 字符限制。</p><h1 id="UI"><a href="#UI" class="headerlink" title="UI"></a>UI</h1><p>这次针对 UI 界面有 2 点优化，第一个是在服务发现页面增加了搜索栏，第二额是在 Target 页面增加了搜索栏，这样就可以进行搜索了。</p><p>另外 这次修复了 3 个 BUG 。第一个是当表达式为空的时候自动补全的问题，第二个是在 Target 页面的不健康状态的过滤器，实际上只显示不健康的 Target 。第三个是修复了告警状态复选框上点击目标重叠的问题。</p><h1 id="TSDB"><a href="#TSDB" class="headerlink" title="TSDB"></a>TSDB</h1><p>对于时序数据库，这次修复 3 个 BUG，并且进行了 4 处优化。</p><p>首先使用更简单的映射键来提高范例摄取性能，其次提高了 label 的匹配性能，第三是使 chunk 写入的时候不阻塞，避免远程写入中的延迟峰值。</p><p>时序数据库修复了 GC 和写入同时发生的死锁问题，修复了范例日志存储的容量大小问题，修复了压缩块元数据应该在重叠块产生正确的最大最小值。</p><h1 id="Remote-write"><a href="#Remote-write" class="headerlink" title="Remote-write"></a>Remote-write</h1><p>远程写这次优化了通过具体结构而不是接口来避免分配，而且优化了记录远程写入接收器中无序样本的时间序列细节日志，并且当积压时更多地分片。</p><p>这次修复了当写不可恢复失败时更新<code>prometheus_remote_storage_queue_highest_sent_timestamp_seconds</code> 这个指标的值。</p><h1 id="SD"><a href="#SD" class="headerlink" title="SD"></a>SD</h1><p>服务发现这次新增了 2 个功能点，一个是在 K8s 的命名空间中支持开启 Target 的发现。另外是 K8s 的服务发现提供了 label 的 ID。</p><h1 id="Other"><a href="#Other" class="headerlink" title="Other"></a>Other</h1><p>在 Config 中增加了 stripPort 的模板功能。</p><h1 id="后续"><a href="#后续" class="headerlink" title="后续"></a>后续</h1><p>在 2.33.1 中修复了 1 个 BUG：<br>在 K8s 的服务发现中，修复了当没有运行在 K8s 里的时候出现的 <code>no such file or directory</code> 问题。</p><p>在 2.33.2 修复了 2 个 BUG：<br>Azure 的服务发现中修复了 IP 地址未设置的问题。<br>远程写中修复了停止分片时的死锁问题。</p><p>在 2.33.3 中修复了 1 个 BUG：<br>Azure 的服务发现中修复了公共 IP 地址未设置时的回归问题。</p><p>在 2.33.4 中修复了 1 个 BUG：<br>时序数据库修复 m-mapping head 块到磁盘的问题。</p><p>在 2.33.5 中修复了 1 个 BUG：<br>与本版本一起发布的二进制文件是使用 Go1.17.8 构建的，以避免 CVE-2022-24921 的安全问题。另外远程写修复添加队列和获取批处理之间的死锁。</p><p>这大概是目前 Prometheus 版本里发小版本数量最多的一次，出到了第 5 个版本，共计修复了 6 个功能 BUG，1 个安全 BUG。</p><p>详细的发行注记可以查看 <a href="https://github.com/prometheus/prometheus/releases/tag/v2.33.0" target="_blank" rel="noopener">release notes</a> 。</p><h1 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h1><ul><li><a href="https://github.com/prometheus/prometheus/releases/tag/v2.33.0" target="_blank" rel="noopener">https://github.com/prometheus/prometheus/releases/tag/v2.33.0</a> ，By prombot of GitHub</li></ul><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p><p><img src="https://erdong.site/images/erdongxtnew.jpg" alt="微信公众号"></p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Prometheus &lt;a href=&quot;https://github.com/prometheus/prometheus/releases/tag/v2.33.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2.33.0&lt;/a&gt; 现在(2022.01.29)已经发布，在上个月的 &lt;a href=&quot;http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-32-0.html&quot;&gt;2.32.0&lt;/a&gt; 之后又进行了很多的修复和改进。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="New-Features" scheme="https://erdong.site/categories/Prometheus/New-Features/"/>
    
    
      <category term="Prometheus" scheme="https://erdong.site/tags/Prometheus/"/>
    
      <category term="Features" scheme="https://erdong.site/tags/Features/"/>
    
      <category term="release" scheme="https://erdong.site/tags/release/"/>
    
  </entry>
  
  <entry>
    <title>Prometheus 2.34.0 新特性</title>
    <link href="https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-34-0.html"/>
    <id>https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-34-0.html</id>
    <published>2022-06-25T12:17:11.000Z</published>
    <updated>2022-06-26T09:36:55.309Z</updated>
    
    <content type="html"><![CDATA[<p>Prometheus <a href="https://github.com/prometheus/prometheus/releases/tag/v2.34.0" target="_blank" rel="noopener">2.34.0</a> 现在(2022.03.15)已经发布，在上个月的 <a href="http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-33-0.html">2.33.0</a> 之后又进行了很多的修复和改进。</p><a id="more"></a><p>这次更新新增了很多的特性，并且修复一些 BUG 。</p><h1 id="UI"><a href="#UI" class="headerlink" title="UI"></a>UI</h1><p>Prometheus 这次的版本更新把之前的旧的 UI 界面移除了，只剩下了新的 UI 界面。这次优化了告警页面并且添加了一个搜索栏。优化了一些不太容易观察到的图形的颜色。<br>修复了将输入范围设置为分辨率的BUG。</p><h1 id="PromQL"><a href="#PromQL" class="headerlink" title="PromQL"></a>PromQL</h1><p>PromQL 查询语句这次修复了一次 BUG，当指标具有相同的标签集时会正确地从 histogram_quantile 返回错误信息。</p><h1 id="TSDB"><a href="#TSDB" class="headerlink" title="TSDB"></a>TSDB</h1><p>时序数据库这次在默认情况下禁用了块写入队列，并允许使用参数  <code>--storage.tsdb.head-chunks-write-queue-size</code> 来进行配置，这个参数是实验性的参数。</p><h1 id="SD"><a href="#SD" class="headerlink" title="SD"></a>SD</h1><p>对于服务发现，这次 HTTP 服务发现新增了一个记录失败信息的计数器。Azure 服务发现可以在请求的时候设置 Prometheus User-agent  。 Uyuni 服务发现减少了登陆 Uyuni 的次数。</p><h1 id="Scrape"><a href="#Scrape" class="headerlink" title="Scrape"></a>Scrape</h1><p>对于 Prometheus 从 Exporter 拉取数据的时候如果遇到无效的 media 类型时会记录日志，另外 <code>application/openmetrics-text</code> 除了接收 0.0.1 版本以外也接收 1.0.0 版本。另外修复了一个 BUG，修复了 label 限制更改不生效的问题。</p><h1 id="Remote-read"><a href="#Remote-read" class="headerlink" title="Remote-read"></a>Remote-read</h1><p>远程读添加了一个不使用外部标签作为远程读取选择器的选项。</p><h1 id="Other"><a href="#Other" class="headerlink" title="Other"></a>Other</h1><p>Parser修复了在元数据解析器错误中指定类型的问题。</p><p>配置方面当使用带有外部标签的环境变量时，允许使用 <code>$</code> 或者 <code>$$</code> 转义。</p><p>Tracing 方面有一个变化，从 Jaeger 迁移到 OpenTelemetry 的跟踪，</p><p>详细的发行注记可以查看 <a href="https://github.com/prometheus/prometheus/releases/tag/v2.34.0" target="_blank" rel="noopener">release notes</a> 。</p><h1 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h1><ul><li><a href="https://github.com/prometheus/prometheus/releases/tag/v2.34.0" target="_blank" rel="noopener">https://github.com/prometheus/prometheus/releases/tag/v2.34.0</a> ，By prombot of GitHub</li></ul><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p><p><img src="https://erdong.site/images/erdongxtnew.jpg" alt="微信公众号"></p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Prometheus &lt;a href=&quot;https://github.com/prometheus/prometheus/releases/tag/v2.34.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2.34.0&lt;/a&gt; 现在(2022.03.15)已经发布，在上个月的 &lt;a href=&quot;http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-33-0.html&quot;&gt;2.33.0&lt;/a&gt; 之后又进行了很多的修复和改进。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="New-Features" scheme="https://erdong.site/categories/Prometheus/New-Features/"/>
    
    
      <category term="Prometheus" scheme="https://erdong.site/tags/Prometheus/"/>
    
      <category term="Features" scheme="https://erdong.site/tags/Features/"/>
    
      <category term="release" scheme="https://erdong.site/tags/release/"/>
    
  </entry>
  
  <entry>
    <title>Prometheus 2.32.0 新特性</title>
    <link href="https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-32-0.html"/>
    <id>https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-32-0.html</id>
    <published>2021-12-25T12:17:11.000Z</published>
    <updated>2021-12-24T03:26:10.387Z</updated>
    
    <content type="html"><![CDATA[<p>Prometheus <a href="https://github.com/prometheus/prometheus/releases/tag/v2.32.0" target="_blank" rel="noopener">2.32.0</a> 现在(2021.12.09)已经发布，在上个月的 <a href="http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-31-0.html">2.31.0</a> 之后又进行了很多的修复和改进。</p><a id="more"></a><p>这次更新新增了很多的特性，并且修复一些 BUG 。</p><p>该版本引入了 Prometheus Agent，这是 Prometheus 的一种新的操作模式，专为远程写场景而优化。在这种模式下，Prometheus 不会在本地文件系统上生成块，也不能在本地进行查询。使用 <code>--enable-feature=agent</code> 参数可以打开这个功能，关于 Prometheus Agent 后边找时间我专门聊一下。</p><p>对于远程写这块，<code>remote write</code> 将最大重试时间从 100ms 修改成 5s ，并且对重用内存进行了编组。</p><p>对于 Promtool 工具，之前只有配置文件和告警规则的检查，这次添加了检查服务发现的命令 <code>promtool check service-discovery</code>。另外也可以提高测试输出的可读性，可以展示更多人类可读的 <code>got/exp</code> 输出。Promtool 可以使用 kahan 求和来获取更好的数值稳定性，另外修复了 <code>authorization.credentials_file</code> 和 <code>bearer_token_file</code> 的检查。</p><p>对于 UI 界面来说，这次在指标下拉菜单中新增了搜索功能，修复了展现包含 <code>Zone ID</code> 的IPv6地址的目标的链接的问题。在自动完成的 rate 比 rad, delta 比 deg, and count 比 cos 。</p><p>对于 Templates 在模板函数中 添加了 parseDuration ，另外支持 int 和 uint 作为模板格式化的数据类型</p><p>对于获取数据，使用 <code>--enable-feature=extra-scrape-metrics</code> 参数以后添加了 <code>scrape_body_size_bytes</code> 指标。</p><p>对于 PromQL 查询语句，修复了 deriv() 为常量序列返回零值。<br>对于 Prometheus TSDB ，这些有增强了 2 项功能，修复了多个 BUG 。首先增强了对 Windows arm64 的支持，通过跳过TSDB中不需要的排序来优化查询。这次修复了 4 个 BUG，第一个是在索引中写入单独的部分时增加更多的大小检查，第二个是修复了检查点目录为空时的恐慌，第三个是修复了 WAL 重放时的告警，，第四个是修复快照重播失败后的查询。</p><p>对于服务发现，这次增强了 Linode 的服务发现，并且对 Uyni 服务发现进行了故障修复，修复初始化过程中的空指针异常。</p><p>详细的发行注记可以查看 <a href="https://github.com/prometheus/prometheus/releases/tag/v2.32.0" target="_blank" rel="noopener">release notes</a> 。</p><h1 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h1><ul><li><h1 id="https-github-com-prometheus-prometheus-releases-tag-v2-32-0-，By-prombot-of-GitHub"><a href="#https-github-com-prometheus-prometheus-releases-tag-v2-32-0-，By-prombot-of-GitHub" class="headerlink" title="https://github.com/prometheus/prometheus/releases/tag/v2.32.0 ，By prombot of GitHub"></a><a href="https://github.com/prometheus/prometheus/releases/tag/v2.32.0" target="_blank" rel="noopener">https://github.com/prometheus/prometheus/releases/tag/v2.32.0</a> ，By prombot of GitHub</h1>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</li></ul><p>======================<br>Erdong, A Linux user !</p><p><img src="https://erdong.site/images/erdongxtnew.jpg" alt="微信公众号"></p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Prometheus &lt;a href=&quot;https://github.com/prometheus/prometheus/releases/tag/v2.32.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2.32.0&lt;/a&gt; 现在(2021.12.09)已经发布，在上个月的 &lt;a href=&quot;http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-31-0.html&quot;&gt;2.31.0&lt;/a&gt; 之后又进行了很多的修复和改进。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="New-Features" scheme="https://erdong.site/categories/Prometheus/New-Features/"/>
    
    
      <category term="Prometheus" scheme="https://erdong.site/tags/Prometheus/"/>
    
      <category term="Features" scheme="https://erdong.site/tags/Features/"/>
    
      <category term="release" scheme="https://erdong.site/tags/release/"/>
    
  </entry>
  
  <entry>
    <title>Prometheus 2.31.0 新特性</title>
    <link href="https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-31-0.html"/>
    <id>https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-31-0.html</id>
    <published>2021-11-13T12:17:11.000Z</published>
    <updated>2021-11-20T15:50:46.579Z</updated>
    
    <content type="html"><![CDATA[<p>Prometheus <a href="https://github.com/prometheus/prometheus/releases/tag/v2.31.0" target="_blank" rel="noopener">2.31.0</a> 现在(2021.11.02)已经发布，在上个月的 <a href="http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-30-0.html">2.30.0</a> 之后又进行了很多的修复和改进。</p><a id="more"></a><p>这次更新新增了很多的特性，并且修复一些 BUG 。</p><p>对于 UI 方面，删除了标准的 PromQL 编辑器，该用基于 codemirror 的编辑器。这个我还没有试用，用过了看看到底是个什么样子。UI 这次更新取消时间范围设置更改。UI 修复了一个 BUG，对所有的告警类型使用同样的页边距。</p><p>对于 PromQL 增加了三角函数，并且新增了 <code>atan2</code> 的二进制操作符。atan2是一个函数，在 C 语言里返回的是指方位角，C 语言中 atan2 的函数原型为 double atan2(double y, double x) ，返回以弧度表示的 y/x 的反正切。y 和 x 的值的符号决定了正确的象限。也可以理解为计算复数 x+yi 的辐角，计算时atan2 比 atan 稳定。文档还没更新这些新函数的用法，等等吧。</p><p>对于服务发现，这次新增了 PuppetDB 和 Uyuni 的服务发现。并且 Azure 服务发现和 Kubernetes 服务发现也有了更新，Azure 服务发现增加了 <code>proxy_url</code>， <code>follow_redirects</code>， <code>tls_config</code>，Kubernetes 服务发现如果终端数量超过限制，警告用户。对于服务发现新增了一个实验性的服务发现管理器，以避免重新加载时重新启动，默认是关闭的，需要使用 <code>--enable-feature=new-service-discovery-manager</code> 参数来打开。</p><p>对于远程写 ，在远程写接收方端点中添加对 exemplar 的支持。</p><p>对于 HTTP 来说重新打开了 <code>HTTP/2</code> ， 并且在 Web 页面支持 <code>security-related</code> 的 HTTP header 。</p><p>在 Promtool 工具中有一项改进，在 <code>promtool create-blocks-from</code> 规则中添加 <code>--max-block-duration</code>。</p><p>对于身份认证的 OAuth2 ，在请求的 Token 中添加了 TLS 的配置 。</p><p>这次更新还修复了一些 BUG，一个是解决了多个导出的标签前缀之间的冲突 。另外当 <code>__scrape_interval__</code> 被更改时重新启动获取数据的循环。</p><p>最重要的是这次修改了 TSDB 样例删除时遇到的内存泄漏问题。</p><p>详细的发行注记可以查看 <a href="https://github.com/prometheus/prometheus/releases/tag/v2.31.0" target="_blank" rel="noopener">release notes</a> 。</p><h1 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h1><ul><li><a href="https://github.com/prometheus/prometheus/releases/tag/v2.31.0" target="_blank" rel="noopener">https://github.com/prometheus/prometheus/releases/tag/v2.31.0</a> ，By prombot of GitHub</li></ul><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p><p><img src="https://erdong.site/images/erdongxtnew.jpg" alt="微信公众号"></p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Prometheus &lt;a href=&quot;https://github.com/prometheus/prometheus/releases/tag/v2.31.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2.31.0&lt;/a&gt; 现在(2021.11.02)已经发布，在上个月的 &lt;a href=&quot;http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-30-0.html&quot;&gt;2.30.0&lt;/a&gt; 之后又进行了很多的修复和改进。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="New-Features" scheme="https://erdong.site/categories/Prometheus/New-Features/"/>
    
    
      <category term="Prometheus" scheme="https://erdong.site/tags/Prometheus/"/>
    
      <category term="Features" scheme="https://erdong.site/tags/Features/"/>
    
      <category term="release" scheme="https://erdong.site/tags/release/"/>
    
  </entry>
  
  <entry>
    <title>Prometheus 2.30.0 新特性</title>
    <link href="https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-30-0.html"/>
    <id>https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-30-0.html</id>
    <published>2021-09-25T12:17:11.000Z</published>
    <updated>2021-11-20T15:49:59.705Z</updated>
    
    <content type="html"><![CDATA[<p>Prometheus <a href="https://github.com/prometheus/prometheus/releases/tag/v2.30.0" target="_blank" rel="noopener">2.30.0</a> 现在(2021.09.14)已经发布，在上个月的 <a href="http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-29-0.html">2.29.0</a> 之后又进行了很多的修复和改进。</p><a id="more"></a><p>本次 Prometheus 针对时序数据库 TSDB 新增了一个实验性质的特性，使用 <code>--enable-feature=memory-snapshot-on-shutdown</code> 在关闭时对内存块进行快照，以更快地重新启动 Prometheus 。还有就是对于 Scrape 也新增了一个实验性的特性，<code>__scrape_interval__</code> 和 <code>__scrape_timeout__</code> ，使用这两个label 进行重新标记，配置指标采集时间和采集超时。</p><p>另外对于获取指标 scrape 新增了 <code>scrape_timeout_seconds</code> 和<code>scrape_sample_limit</code> 两个指标，使用 <code>--enable-feature=extra-scrape-metrics</code> 参数可以在默认情况下避免额外的基数。</p><p>对于 scrape 进行了优化， 当使用 <code>--scrape.adjust-timestamps</code> 启动时，使用 <code>-scrape.timestamp-tolerance</code> 来调整scrape 时间戳的公差。另外在 在解析指标时减少分配。</p><p>对于 docker 的服务发现，这次开始支持 host 的网络模式。</p><p>这次增对远程写进行了优化，提高发送示例时的吞吐量。</p><p>对于时序数据库 TSDB 进行了一些改进，通过移除额外的 map 和缓存来优化 WAL 文件的加载。</p><p>对于 promtool 工具也进行了优化，会加速检查重复的规则。</p><p>接下来是一些 BUG 的修复</p><p>对于 exemplars 调整示例存储从 0 到非 0 变化引起的问题。<br>对于 时序数据库 TSDB ，当追加没有样本，正确减少prometheus_tsdb_head_active_appenders。<br>对于 promtool 工具的 rules backfill ，如果 backfill 不成功，返回1。并且避免了创建重叠块。</p><p>对于 config，修复了用空的重标签操作重新加载配置时的问题。</p><p>详细的发行注记可以查看 <a href="https://github.com/prometheus/prometheus/releases/tag/v2.30.0" target="_blank" rel="noopener">release notes</a> 。</p><h1 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h1><ul><li><a href="https://github.com/prometheus/prometheus/releases/tag/v2.30.0" target="_blank" rel="noopener">https://github.com/prometheus/prometheus/releases/tag/v2.30.0</a> ，By prombot of GitHub</li></ul><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p><p><img src="https://erdong.site/images/erdongxtnew.jpg" alt="微信公众号"></p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Prometheus &lt;a href=&quot;https://github.com/prometheus/prometheus/releases/tag/v2.30.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2.30.0&lt;/a&gt; 现在(2021.09.14)已经发布，在上个月的 &lt;a href=&quot;http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-29-0.html&quot;&gt;2.29.0&lt;/a&gt; 之后又进行了很多的修复和改进。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="New-Features" scheme="https://erdong.site/categories/Prometheus/New-Features/"/>
    
    
      <category term="Prometheus" scheme="https://erdong.site/tags/Prometheus/"/>
    
      <category term="Features" scheme="https://erdong.site/tags/Features/"/>
    
      <category term="release" scheme="https://erdong.site/tags/release/"/>
    
  </entry>
  
  <entry>
    <title>Prometheus 2.29.0 新特性</title>
    <link href="https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-29-0.html"/>
    <id>https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-29-0.html</id>
    <published>2021-08-21T12:17:11.000Z</published>
    <updated>2021-11-20T15:49:13.421Z</updated>
    
    <content type="html"><![CDATA[<p>Prometheus <a href="https://github.com/prometheus/prometheus/releases/tag/v2.29.0" target="_blank" rel="noopener">2.29.0</a> 现在(2021.08.11)已经发布，在上个月的 <a href="http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-28-0.html">2.28.0</a> 之后又进行了很多的修复和改进。</p><a id="more"></a><p>这次感觉更新了很多内容。<br>macOS用户需要注意一下: 由于即将发布的 Go 1.17的变化，这是支持macOS 10.12 Sierra 的最后一个 Prometheus 版本。</p><p>Prometheus 的 <code>--storage.tsdb.allow-overlapping-blocks</code> 和 <code>--storage.tsdb.retention.size</code> 的 tag 从 experimental 变成了 stable，</p><p>对于服务发现，这次新增了 Kuma 的服务发现，另外 GCE 的服务发现新增了 一个 <code>__meta_gce_interface_ipv4_&lt;name&gt;</code> 的 元数据 label，EC2 的服务发现新增了一个 <code>__meta_ec2_availability_zone_id</code> 元数据 label ，Azure 服务发现新增了一个 <code>__meta_azure_machine_computer_name</code> 元数据 label ，Hetzner  服务发现新增了一个 <code>__meta_hetzner_hcloud_labelpresent_&lt;labelname&gt;</code> 元数据 label 。</p><p>PromQL 增加了 <code>present_over_time</code> 函数功能。</p><p>Prometheus 允许通过文件配置示例存储，并使其可重新加载。这次更新提高了 write-ahead-log 的解码性能。另外 Prometheus 通过减少互斥锁的使用来提高 TSDB 的追加性能。允许配置 <code>max_samples_per_send</code> 用于远程写元数据。</p><p>对于 UI 方面，这次更新以后允许鼠标拖动选择时间范围，在 flags 页面中添加排序和过滤功能，另外优化提高了警报页面的呈现性能。</p><p>另外 Promtool 工具这次也更新了一些功能，首先新增了一个 <code>--enable-feature</code> 用来添加一些特性。其次支持添加 file_sd 文件验证。另外优化了 promtool tsdb分析报告的压缩效率。允许通过 <code>--max-block-duration</code> 标志配置最大阻塞持续时间</p><p>接下来是一个 BUG 修复，Prometheus 当总的 symbol 大小超过 2^32 bytes 时会导致压缩失败，并跳过压缩并且记录日志。<br>修正 <code>target_limit</code> 重新加载 0 值的错误。</p><p>修复了 head GC 和 pending reader 竞争条件。 </p><p>修复了 OpenMetrics 解析器中的时间戳处理问题。 </p><p>修复指定多个匹配器时 <code>/federate</code> 端点中可能存在的重复指标 </p><p>修复服务器配置和通过客户端证书验证的验证</p><p>详细的发行注记可以查看 <a href="https://github.com/prometheus/prometheus/releases/tag/v2.29.0" target="_blank" rel="noopener">release notes</a> 。</p><h1 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h1><ul><li><a href="https://github.com/prometheus/prometheus/releases/tag/v2.29.0" target="_blank" rel="noopener">https://github.com/prometheus/prometheus/releases/tag/v2.29.0</a> ，By prombot of GitHub</li></ul><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p><p><img src="https://erdong.site/images/erdongxtnew.jpg" alt="微信公众号"></p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Prometheus &lt;a href=&quot;https://github.com/prometheus/prometheus/releases/tag/v2.29.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2.29.0&lt;/a&gt; 现在(2021.08.11)已经发布，在上个月的 &lt;a href=&quot;http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-28-0.html&quot;&gt;2.28.0&lt;/a&gt; 之后又进行了很多的修复和改进。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="New-Features" scheme="https://erdong.site/categories/Prometheus/New-Features/"/>
    
    
      <category term="Prometheus" scheme="https://erdong.site/tags/Prometheus/"/>
    
      <category term="Features" scheme="https://erdong.site/tags/Features/"/>
    
      <category term="release" scheme="https://erdong.site/tags/release/"/>
    
  </entry>
  
  <entry>
    <title>Prometheus 2.28.0 新特性</title>
    <link href="https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-28-0.html"/>
    <id>https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-28-0.html</id>
    <published>2021-07-01T12:17:11.000Z</published>
    <updated>2021-11-20T15:48:22.364Z</updated>
    
    <content type="html"><![CDATA[<p>Prometheus <a href="https://github.com/prometheus/prometheus/releases/tag/v2.28.0" target="_blank" rel="noopener">2.28.0</a> 现在(2021.06.21)已经发布，在上个月的 <a href="http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-27-0.html">2.27.0</a> 之后又进行了很多的修复和改进。</p><a id="more"></a><p>本次更新主要集中在 UI 、服务发现和时序数据库方面，其他方面的更新内容较少。</p><p>对于 UI 这次更新将新的实验性 PromQL 编辑器设为了默认编辑器。这次也在图形界面中添加范例显示支持。这次的 UI 还有一个优化的点，我觉得很友好，当你重启 Prometheus 但是数据库还在加载数据没有准备好的时候，以前访问 UI 页面会报错，这次会有一个带有进度条的启动页面，这样可以知道大概还有多久能好。这次的 UI 修复了一个 BUG，在实验性的PromQL编辑器中，修复了特殊浮点值的自动完成和解析，并改进了系列元数据获取。</p><p>对于服务发现这次新增了 Linode 服务发现，也新增了基于 HTTP 的服务发现。对于 Kubernetes 的服务发现，现在允许通过 kubecconfig 文件配置 API Server 访问，添加了 ingress 类名称 label 标签用于 ingress 发现。对于 Consul  服务发现，为Consul Enterprise添加命名空间支持，另外还支持从文件中读取 TOKEN。</p><p>针对服务发现，修复了使用多个服务发现时 <code>prometheus_sd_discovered_targets</code> 度量的计算问题。另外添加目标创建失败计数器 <code>prometheus_target_sync_failed_total</code>，改进目标创建失败的处理。</p><p>对于时序数据库 TSDB ，改进范例标签集长度的验证。添加一个<code>prometheus_tsdb_clean_start</code> 指标，表示上一次运行的 TSDB 锁文件在启动时是否仍然存在。当 TSDB 合并块时，如果结果块包含超过120个样本，则拆分。</p><p>对于 Promtool 工具有一处改进，这个版本开始允许在 导入/ 回填数据时静默输出。</p><p>对于告警的规则添加一个新的 <code>.ExternalURL</code> 警告字段模板变量，包含Prometheus Server 的 external URL。</p><p>详细的发行注记可以查看 <a href="https://github.com/prometheus/prometheus/releases/tag/v2.28.0" target="_blank" rel="noopener">release notes</a> 。</p><h1 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h1><ul><li><a href="https://github.com/prometheus/prometheus/releases/tag/v2.28.0" target="_blank" rel="noopener">https://github.com/prometheus/prometheus/releases/tag/v2.28.0</a> ，By prombot of GitHub</li></ul><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p><p><img src="https://erdong.site/images/erdongxtnew.jpg" alt="微信公众号"></p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Prometheus &lt;a href=&quot;https://github.com/prometheus/prometheus/releases/tag/v2.28.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2.28.0&lt;/a&gt; 现在(2021.06.21)已经发布，在上个月的 &lt;a href=&quot;http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-27-0.html&quot;&gt;2.27.0&lt;/a&gt; 之后又进行了很多的修复和改进。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="New-Features" scheme="https://erdong.site/categories/Prometheus/New-Features/"/>
    
    
      <category term="Prometheus" scheme="https://erdong.site/tags/Prometheus/"/>
    
      <category term="Features" scheme="https://erdong.site/tags/Features/"/>
    
      <category term="release" scheme="https://erdong.site/tags/release/"/>
    
  </entry>
  
  <entry>
    <title>Prometheus 2.27.0 新特性</title>
    <link href="https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-27-0.html"/>
    <id>https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-27-0.html</id>
    <published>2021-05-22T12:17:11.000Z</published>
    <updated>2021-11-20T15:47:31.620Z</updated>
    
    <content type="html"><![CDATA[<p>Prometheus <a href="https://github.com/prometheus/prometheus/releases/tag/v2.27.0" target="_blank" rel="noopener">2.27.0</a> 现在(2021.05.12)已经发布，在上个月的 <a href="http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-26-0.html">2.26.0</a> 之后又进行了很多的修复和改进。</p><a id="more"></a><p>本次更新对于 Promtool 新增了追溯性规则评估功能。</p><p>对于 Prometheus 的配置新增了外部标签的环境变量扩展，使用 <code>--enable-feature = expand-external-labels</code> 标签就可以了。</p><p>针对时序数据库 TSDB 本次新增了 1 个新功能和 2 个 BUG 修复。新增了一个 控制参数 <code>--storage.tsdb.max-block-chunk-segment-size</code> 来控制小的Prometheus 实例的块文件 chunk file 最大文件的大小。两个 BUG 修复分别是 针对写大数据量的内容到 WAL 时防止日志出现 <code>panic: snappy: decoded block is too large</code> 。 以及在文件关闭后使用 mmap 内存时不要 </p><p>对于 UI 方面，在这个版本新增了黑暗主题，当前有白色和黑色两个主题，并且可以设置跟随时间来进行自动切换。另外有一处优化的地方，页面增加了 16w 和 26w 时间范围步骤。另外就是在 TSDB 的状态页提供错误而不是空白页。</p><p>本次更新在服务发现方面变化挺多的，首先新增了 AWS Lightsail 的服务发现，其次增加了 Docker Service 的服务发现。对于 Digital Ocean 新增了 <code>__meta_digitalocean_vpc</code> 的 label 标签。对于 Scaleway 服务发现优化了从文件中读取 Scaleway secret 的方式。对于 Consul 服务发现，配置更新没有目标后不再需要重新启动 。</p><p>对于 OAuth 允许在任何使用 HTTP 客户端的地方使用 OAuth 2.0。</p><p>详细的发行注记可以查看 <a href="https://github.com/prometheus/prometheus/releases/tag/v2.27.0" target="_blank" rel="noopener">release notes</a> 。</p><h1 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h1><ul><li><a href="https://github.com/prometheus/prometheus/releases/tag/v2.27.0" target="_blank" rel="noopener">https://github.com/prometheus/prometheus/releases/tag/v2.27.0</a> ，By prombot of GitHub</li></ul><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p><p><img src="https://erdong.site/images/erdongxtnew.jpg" alt="微信公众号"></p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Prometheus &lt;a href=&quot;https://github.com/prometheus/prometheus/releases/tag/v2.27.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2.27.0&lt;/a&gt; 现在(2021.05.12)已经发布，在上个月的 &lt;a href=&quot;http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-26-0.html&quot;&gt;2.26.0&lt;/a&gt; 之后又进行了很多的修复和改进。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="New-Features" scheme="https://erdong.site/categories/Prometheus/New-Features/"/>
    
    
      <category term="Prometheus" scheme="https://erdong.site/tags/Prometheus/"/>
    
      <category term="Features" scheme="https://erdong.site/tags/Features/"/>
    
      <category term="release" scheme="https://erdong.site/tags/release/"/>
    
  </entry>
  
  <entry>
    <title>Prometheus 2.26.0 新特性</title>
    <link href="https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-26-0.html"/>
    <id>https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-26-0.html</id>
    <published>2021-04-10T12:17:11.000Z</published>
    <updated>2021-11-20T15:46:44.934Z</updated>
    
    <content type="html"><![CDATA[<p>Prometheus <a href="https://github.com/prometheus/prometheus/releases/tag/v2.26.0" target="_blank" rel="noopener">2.26.0</a> 现在(2021.03.31)已经发布，在上个月的 <a href="http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-25-0.html">2.25.0</a> 之后又进行了很多的修复和改进。</p><a id="more"></a><p>Prometheus 现在已经构建并支持 Go 1.16 版本。这将恢复Go 1.12中添加的内存释放模式。这使得常见的 RSS 使用指标能够更准确的显示 Prometheus 使用的实际内存。</p><p>注意，在这个版本中，Prometheus 默认使用 Alertmanager v2 版本。</p><p>现在的 Prometheus 和 Promtool  二进制文件打印帮助信息和使用信息时会输出到 stdout，而不是 stderr ，这个结果是在开发峰会上达成一致的。</p><p>当使用 <code>--enable-feature=exemplar-storage</code> 参数以后会在内存中存储样本数据。</p><p>对于远程部分，对 <code>remote_writ</code> 增加了 AWS SigV4 认证方法的支持。 允许对<code>remote_write</code> 的 HTTP 429 响应代码进行重试，但是重试这个动作在默认情况下禁用。另外允许为 <code>remote_read</code> 配置自定义 header 头。有这些变更的详细信息，请参阅配置文档。</p><p>这次新增了基于 Scaleway 的服务发现 ，Scaleway 的口号是 “The Cloud that makes sense” 。</p><p>对于之前的 Digital Ocean 服务发现，新增了一个 label <code>__meta_digitalocean_image</code>。</p><p>对于 PromQL 语法，在使用 <code>--enable-feature=promql-negative-offset</code> 参数以后允许数据发送负偏移。另外这次版本新增了 <code>last_over_time</code>, <code>sgn</code>, <code>clamp</code> 函数 ，并且解析器支持特殊字符，比如 <code>炬</code> 等等。</p><p>对于 UI 方面，这次更新以后在页面输入查询语句的时候可以实现自动完成，语法高亮和检测。 而且每按一次回车键就会触发一次新的查询。对于页面上 <code>/rules</code> 和 <code>/targets</code> 的长规则和名称也进行了一次优化，可以更好的查询，点击 <code>/targets</code> 下的 <code>Collapse All</code> 可以折叠所有的 Target 点击 <code>Expand All</code> 可以展开所有的 Target。</p><p>对于时序数据库 TSDB ，每次压缩时都都会快速删除可删除的块，这样可以节省磁盘的空间使用。</p><p>详细的发行注记可以查看 <a href="https://github.com/prometheus/prometheus/releases/tag/v2.26.0" target="_blank" rel="noopener">release notes</a> 。</p><h1 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h1><ul><li><a href="https://github.com/prometheus/prometheus/releases/tag/v2.26.0" target="_blank" rel="noopener">https://github.com/prometheus/prometheus/releases/tag/v2.26.0</a> ，By prombot of GitHub</li></ul><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p><p><img src="https://erdong.site/images/erdongxtnew.jpg" alt="微信公众号"></p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Prometheus &lt;a href=&quot;https://github.com/prometheus/prometheus/releases/tag/v2.26.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2.26.0&lt;/a&gt; 现在(2021.03.31)已经发布，在上个月的 &lt;a href=&quot;http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-25-0.html&quot;&gt;2.25.0&lt;/a&gt; 之后又进行了很多的修复和改进。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="New-Features" scheme="https://erdong.site/categories/Prometheus/New-Features/"/>
    
    
      <category term="Prometheus" scheme="https://erdong.site/tags/Prometheus/"/>
    
      <category term="Features" scheme="https://erdong.site/tags/Features/"/>
    
      <category term="release" scheme="https://erdong.site/tags/release/"/>
    
  </entry>
  
  <entry>
    <title>攻城狮周刊：第49期</title>
    <link href="https://erdong.site/weekly/weekly49.html"/>
    <id>https://erdong.site/weekly/weekly49.html</id>
    <published>2021-03-20T15:50:59.000Z</published>
    <updated>2021-03-21T00:10:08.502Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="工具"><a href="#工具" class="headerlink" title="工具"></a>工具</h1><h2 id="1-MobaXterm"><a href="#1-MobaXterm" class="headerlink" title="1. MobaXterm"></a>1. <a href="https://mobaxterm.mobatek.net/" target="_blank" rel="noopener">MobaXterm</a></h2><p>MobaXterm是一款多功能远程控制工具，支持创建SSH,Telnet,Rsh,Xdmc,RDP,VNC,FTP,SFTP,串口(Serial COM),本地Shell,Mosh,Aws,WSL(微软子系统)等超多连接功能。MobaXterm 提供了人性化的操作界面，支持与主流的操作系统连接进行控制和管理操作，功能十分强大。</p><p>secureCRT其实也是一款很强大的终端工具，但是它是收费软件，<br>而Putty，它非常小巧，虽然免费，不支持标签，开多个会话的话就需要开多个窗口，窗口切换也很不方便。</p><h2 id="2-Goland-使用教程"><a href="#2-Goland-使用教程" class="headerlink" title="2.Goland 使用教程"></a>2.<a href="https://www.jetbrains.com/help/go/2020.3/quick-start-guide-goland.html" target="_blank" rel="noopener">Goland 使用教程</a></h2><p>Goland 是 jebrains 推出的 Golang IDE ，该教程是官方的使用教程。</p><h2 id="3-filebrowser"><a href="#3-filebrowser" class="headerlink" title="3. filebrowser"></a>3. <a href="https://filebrowser.org/" target="_blank" rel="noopener">filebrowser</a></h2><p>文件共享软件，可以部署在多个平台上提供文件下载功能，支持多用户和权限控制。比较简单，可以满足小型的文件共享需求。</p><h2 id="4-GitHub-镜像网站"><a href="#4-GitHub-镜像网站" class="headerlink" title="4. GitHub 镜像网站"></a>4. <a href="">GitHub 镜像网站</a></h2><p>GitHub 镜像网站:</p><ul><li><a href="https://github.com.cnpmjs.org" target="_blank" rel="noopener">https://github.com.cnpmjs.org</a></li><li><a href="https://hub.fastgit.org" target="_blank" rel="noopener">https://hub.fastgit.org</a></li></ul><p>当 GitHub 无法访问的时候，可以临时访问镜像网站来查资料。</p><h2 id="5-GitHub520"><a href="#5-GitHub520" class="headerlink" title="5. GitHub520"></a>5. <a href="https://github.com/521xueweihan/GitHub520" target="_blank" rel="noopener">GitHub520</a></h2><p>本项目无需安装任何程序，通过修改本地 hosts 文件，试图解决：</p><p>GitHub 访问速度慢的问题<br>GitHub 项目中的图片显示不出的问题<br>花 5 分钟时间，让你”爱”上 GitHub。</p><p>仓库列出了 GitHub 域名的 IP 地址，每 2 个小时更新一次 Hosts 文件列表。可以手动更新，也可以通过 SwitchHosts 工具来自动更新。</p><h1 id="资源"><a href="#资源" class="headerlink" title="资源"></a>资源</h1><h2 id="1-Awesome-Profile-README-templates"><a href="#1-Awesome-Profile-README-templates" class="headerlink" title="1. Awesome-Profile-README-templates"></a>1. <a href="https://github.com/kautukkundan/Awesome-Profile-README-templates" target="_blank" rel="noopener">Awesome-Profile-README-templates</a></h2><p>Awesome-Profile-README-templates 收录了全世界有意思的 README，如果你要只做你的专属 GitHub 简介，不妨参考下。</p><h2 id="2-GitHub-Readme-Stats"><a href="#2-GitHub-Readme-Stats" class="headerlink" title="2. GitHub Readme Stats"></a>2. <a href="https://github.com/anuraghazra/github-readme-stats" target="_blank" rel="noopener">GitHub Readme Stats</a></h2><p>GitHub Readme Stats 是一个可在你的 README 中获取动态生成的 GitHub 统计信息的小工具。目前支持 dark、radical、merko、gruvbox、tokyonight、onedark、cobalt, synthwave、highcontrast、dracula 等多个主题。</p><p>用法很简单将这行代码复制到你的 markdown 文件中，简单如此！更改 ?username= 的值为你的 GitHub 用户名。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[![Anurag&#39;s github stats](https:&#x2F;&#x2F;github-readme-stats.vercel.app&#x2F;api?username&#x3D;anuraghazra &quot;![Anurag&#39;s github stats&quot;)](https:&#x2F;&#x2F;github.com&#x2F;anuraghazra&#x2F;github-readme-stats)</span><br></pre></td></tr></table></figure><h2 id="3-emoji-表情查询网址"><a href="#3-emoji-表情查询网址" class="headerlink" title="3. emoji 表情查询网址"></a>3. <a href="https://www.emojiall.com/en/zh" target="_blank" rel="noopener">emoji 表情查询网址</a></h2><p>有很多的表情可供选择，可以让文章或者互动变的更有趣。</p><h1 id="文章"><a href="#文章" class="headerlink" title="文章"></a>文章</h1><h2 id="1-The-right-way-to-turn-off-your-old-APIs"><a href="#1-The-right-way-to-turn-off-your-old-APIs" class="headerlink" title="1. The right way to turn off your old APIs"></a>1. <a href="https://httptoolkit.tech/blog/how-to-turn-off-your-old-apis/" target="_blank" rel="noopener">The right way to turn off your old APIs</a></h2><p>本文讲述如何将一个老旧的 API 下线。</p><h2 id="2-在-GitHub-上构建一个看上去正规的-Golang-项目"><a href="#2-在-GitHub-上构建一个看上去正规的-Golang-项目" class="headerlink" title="2. 在 GitHub 上构建一个看上去正规的 Golang 项目"></a>2. <a href="https://developer.aliyun.com/article/710165" target="_blank" rel="noopener">在 GitHub 上构建一个看上去正规的 Golang 项目</a></h2><p>在 GitHub 上开源 Golang 语言的仓库的一个基础知识点教学，简单介绍了 Goland 的配置、Travis CI 的使用、GoReleaser 用来进行 release 的发布。</p><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复&gt;。<br>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
      <category term="weekly" scheme="https://erdong.site/tags/weekly/"/>
    
  </entry>
  
  <entry>
    <title>Prometheus 2.25.0 新特性</title>
    <link href="https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-25-0.html"/>
    <id>https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-25-0.html</id>
    <published>2021-02-27T12:17:11.000Z</published>
    <updated>2021-11-20T15:45:42.651Z</updated>
    
    <content type="html"><![CDATA[<p>Prometheus <a href="https://github.com/prometheus/prometheus/releases/tag/v2.25.0" target="_blank" rel="noopener">2.25.0</a> 现在(2021.02.17)已经发布，在上个月的 <a href="http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-24-0.html">2.24.0</a> 之后又进行了很多的修复和改进。</p><a id="more"></a><p>这个版本包含了一个新的参数 <code>--enable-feature=</code> 来启用实验功能，而这些特性在未来可能会被更改或删除。</p><p>在下一个小版本(2.26)中，Prometheus 将使用 Alertmanager API v2。它将通过默认的 <code>alertmanager_config.api_version</code> 来启动 v2 版本。Alertmanager API v2 接口在 Alertmanager v0.16.0(1月份发布)中发布已经发布过了，使用 AlertManager 0.16 版本以上即可，建议使用最新版本。</p><p>对于 UI 方面 ，在 TSDB 统计页面的头部显示标签对的数量。另外修复了 <code>/targets</code> 页面上重复的键，修复了 label 名称泄漏到 class 名称的问题。</p><p>对于远程 remote 方面，这次更新允许传递自定义的 <code>remote_write</code> HTTP 报头。这次更新还有 2 个 BUG 修复，分别是修复远程写中删除的系列的垃圾收集和将可恢复的远程写错误记录为警告。</p><p>对于时序数据库 TSDB 来说，这次增加了压缩持续时间的桶的数量的监控指标。另外每分钟重新加载块，以检测新的块并更频繁地执行保留策略。这次修复了一个 BUG，在启动时移除2.21之前版本产生的临时块，及<code>xxx.tmp</code>文件，可以节约本地的存储空间。</p><p>对于 API 方面，这次新增了一个实验 API，可以接受 remote_write 请求，<code>--enable-feature=remote-write-receiver</code> 参数后的值可以被接受使用。另外修复了一个 BUG，修复外部地址没有端口时会变成全局 URL 的问题。</p><p>对于 Kubernetes 服务发现，新增了 endpoint 标签的元数据。</p><p>另外这次更新在图形页面的 React 面板中添加警告。</p><p>详细的发行注记可以查看 <a href="https://github.com/prometheus/prometheus/releases/tag/v2.25.0" target="_blank" rel="noopener">release notes</a> 。</p><p>Brian Brazil 大佬的博客（<a href="https://www.robustperception.io）最近不更新了。最后一次更新时间是" target="_blank" rel="noopener">https://www.robustperception.io）最近不更新了。最后一次更新时间是</a> 2020.12.28 。最后一篇文章是 《Monitoring is a means, not an end》，确实，监控是一种手段，不是目的，也不是终点。共勉。</p><h1 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h1><ul><li><a href="https://github.com/prometheus/prometheus/releases/tag/v2.25.0" target="_blank" rel="noopener">https://github.com/prometheus/prometheus/releases/tag/v2.25.0</a> ，By prombot of GitHub</li></ul><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p><p><img src="https://erdong.site/images/erdongxtnew.jpg" alt="微信公众号"></p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Prometheus &lt;a href=&quot;https://github.com/prometheus/prometheus/releases/tag/v2.25.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2.25.0&lt;/a&gt; 现在(2021.02.17)已经发布，在上个月的 &lt;a href=&quot;http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-24-0.html&quot;&gt;2.24.0&lt;/a&gt; 之后又进行了很多的修复和改进。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="New-Features" scheme="https://erdong.site/categories/Prometheus/New-Features/"/>
    
    
      <category term="Prometheus" scheme="https://erdong.site/tags/Prometheus/"/>
    
      <category term="Features" scheme="https://erdong.site/tags/Features/"/>
    
      <category term="release" scheme="https://erdong.site/tags/release/"/>
    
  </entry>
  
  <entry>
    <title>攻城狮周刊：第48期</title>
    <link href="https://erdong.site/weekly/weekly48.html"/>
    <id>https://erdong.site/weekly/weekly48.html</id>
    <published>2021-01-17T15:50:59.000Z</published>
    <updated>2021-01-17T12:34:24.942Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="新闻"><a href="#新闻" class="headerlink" title="新闻"></a>新闻</h1><h2 id="1-尼康显微镜大赛"><a href="#1-尼康显微镜大赛" class="headerlink" title="1. 尼康显微镜大赛"></a>1. <a href="https://www.nikonsmallworld.com/galleries/photomicrography-competition" target="_blank" rel="noopener">尼康显微镜大赛</a></h2><h1 id="工具"><a href="#工具" class="headerlink" title="工具"></a>工具</h1><h2 id="1-fanyi"><a href="#1-fanyi" class="headerlink" title="1. fanyi"></a>1. <a href="https://github.com/afc163/fanyi" target="_blank" rel="noopener">fanyi</a></h2><p>一个命令行的中英文翻译工具，翻译数据来自 iciba.com 和 fanyi.youdao.com</p><h2 id="2-阿禅的公众号排版工具"><a href="#2-阿禅的公众号排版工具" class="headerlink" title="2. 阿禅的公众号排版工具"></a>2. <a href="https://knb.im/mp/" target="_blank" rel="noopener">阿禅的公众号排版工具</a></h2><p>这个排版器适合写长文的人使用，适合先用 Markdown 把文章一气呵成写完，然后一键转换格式的人来使用。</p><p>原本，这是阿禅自己用的排版器。</p><h1 id="资源"><a href="#资源" class="headerlink" title="资源"></a>资源</h1><h2 id="1-advanced-java"><a href="#1-advanced-java" class="headerlink" title="1. advanced-java"></a>1. <a href="https://github.com/doocs/advanced-java" target="_blank" rel="noopener">advanced-java</a></h2><p>互联网 Java 工程师进阶知识完全扫盲：涵盖高并发、分布式、高可用、微服务、海量数据处理等领域知识，后端同学必看，前端同学也可学习。<br><a href="https://doocs.github.io/advanced-java" target="_blank" rel="noopener">https://doocs.github.io/advanced-java</a></p><h2 id="2-大屏数据展示模板"><a href="#2-大屏数据展示模板" class="headerlink" title="2. 大屏数据展示模板"></a>2. <a href="https://gitee.com/lvyeyou/DaShuJuZhiDaPingZhanShi" target="_blank" rel="noopener">大屏数据展示模板</a></h2><p> 大屏数据展示模板，大量的大屏展示模板可以供参考，或者后端提供对应的数据进行展示。</p><h2 id="3-用友网络大前端技术团队博客"><a href="#3-用友网络大前端技术团队博客" class="headerlink" title="3. 用友网络大前端技术团队博客"></a>3. <a href="https://github.com/iuap-design/blog" target="_blank" rel="noopener">用友网络大前端技术团队博客</a></h2><p> 用友网络大前端技术团队博客的地址，博客内容在 ISSUE 中，参考用来标识和导航到 ISSUE 中，学习前端的同学可以进行参考。</p><h2 id="4-SRE-学校"><a href="#4-SRE-学校" class="headerlink" title="4. SRE 学校"></a>4. <a href="https://linkedin.github.io/school-of-sre/" target="_blank" rel="noopener">SRE 学校</a></h2><p> Linkedin 工程团队专门写给小白的 SRE 教程，介绍了一个 SRE 工程师需要掌握的各种基础知识。</p><h1 id="文章"><a href="#文章" class="headerlink" title="文章"></a>文章</h1><h2 id="1-Excel-表格"><a href="#1-Excel-表格" class="headerlink" title="1. [Excel 表格]"></a>1. [Excel 表格]</h2><p>英国的新冠肺炎确诊病例数量，最近一天内暴增 16000 例。原因并非是这一天患病的人特别多，而是英国的病例统计报表使用了 Excel 的 xls 文件格式，导致前几天的统计遗漏了。</p><p>xls 格式的表最多只能有 65,536 行，多于该行数的数据源会被省略。操作人员将数据从 CSV 文件导入 Excel 时，没有发现多余的行被省略了，导致少统计了病例。</p><p>最简单的解决方法，就是将文件格式升级为 xlsx， 它的上限是 1,048,576 行。这件事告诉我们，如果你的数据集比较大，就不应该使用 Excel。</p><h2 id="2-Dockerfile-最佳实践"><a href="#2-Dockerfile-最佳实践" class="headerlink" title="2. Dockerfile 最佳实践"></a>2. <a href="https://cloudberry.engineering/article/dockerfile-security-best-practices/" target="_blank" rel="noopener">Dockerfile 最佳实践</a></h2><h2 id="3-《软件设计的哲学》中文翻译"><a href="#3-《软件设计的哲学》中文翻译" class="headerlink" title="3. 《软件设计的哲学》中文翻译"></a>3. <a href="https://github.com/inkydragon/A-Philosophy-of-Software-Design-zh" target="_blank" rel="noopener">《软件设计的哲学》中文翻译</a></h2><p>《软件设计的哲学》中文翻译</p><p>在线阅读：<a href="http://gdut_yy.gitee.io/doc-aposd/" target="_blank" rel="noopener">http://gdut_yy.gitee.io/doc-aposd/</a></p><p>斯坦福教授、Tcl 语言发明者 John Ousterhout 的著作《A Philosophy of Software Design》，自出版以来，好评如潮。按照 IT 图书出版的惯例，如果冠名为“实践”，书中内容关注的是某项技术的细节和技巧；冠名为“艺术”，内容可能是记录一件优秀作品的设计过程和经验；而冠名为“哲学”，则是一些通用的原则和方法论，这些原则方法论串起来，能够形成一个体系。正如”知行合一”、“世界是由原子构成的”、“我思故我在”，这些耳熟能详的句子能够一定程度上代表背后的人物和思想。用一句话概括《A Philosophy of Software Design》，软件设计的核心在于降低复杂性。</p><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复&gt;。<br>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
      <category term="weekly" scheme="https://erdong.site/tags/weekly/"/>
    
  </entry>
  
  <entry>
    <title>攻城狮周刊：第47期</title>
    <link href="https://erdong.site/weekly/weekly47.html"/>
    <id>https://erdong.site/weekly/weekly47.html</id>
    <published>2021-01-17T13:50:59.000Z</published>
    <updated>2021-01-17T12:34:31.508Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="工具"><a href="#工具" class="headerlink" title="工具"></a>工具</h1><h2 id="1-ZoomEye"><a href="#1-ZoomEye" class="headerlink" title="1. ZoomEye"></a>1. <a href="https://www.zoomeye.org" target="_blank" rel="noopener">ZoomEye</a></h2><p>钟馗之眼，<br>互联网安全厂商知道创宇开放了他们的海量数据库，对之前沉淀的数据进行了整合、整理，打造了一个名符其实的网络空间搜索引擎ZoomEye 。作为安全从业人员应当了解该搜索引擎。</p><h2 id="2-shodan"><a href="#2-shodan" class="headerlink" title="2. shodan"></a>2. <a href="https://www.shodan.io" target="_blank" rel="noopener">shodan</a></h2><p>在2009年举办的黑客大会DEFCON会上，一位名叫约翰·马瑟利的黑客发布了一款名为“Shodan”的搜索引擎。其名字取自风靡一时的电脑游戏System Shock中的邪恶主机 。<br>谷歌、百度等搜索引擎通过引用返回的内容进行检索，而Shodan则通过来自各种设备的HTTP header以及其它标志性信息进行检索。</p><p>Shodan可以收集这些设备的信息，并根据其所属国家、操作系统、品牌以及许多其它属性进行分类。可以大致把谷歌、百度看做是网站内容搜索，而把Shodan看做是网络设备搜索。</p><h1 id="资源"><a href="#资源" class="headerlink" title="资源"></a>资源</h1><h2 id="1-Font-Awesome"><a href="#1-Font-Awesome" class="headerlink" title="1. Font Awesome"></a>1. <a href="https://fontawesome.com" target="_blank" rel="noopener">Font Awesome</a></h2><p>Font Awesome 是一套绝佳的图标字体库和CSS框架。<br>Font Awesome 字体为您提供可缩放矢量图标,它可以被定制大小、颜色、阴影以及任何可以用CSS的样式。</p><p>菜鸟教程网站也提供了 Font Awesome 的使用教程。<br><a href="https://www.runoob.com/font-awesome/fontawesome-tutorial.html" target="_blank" rel="noopener">https://www.runoob.com/font-awesome/fontawesome-tutorial.html</a></p><h2 id="2-github-readme-stats"><a href="#2-github-readme-stats" class="headerlink" title="2. github-readme-stats"></a>2. <a href="https://github.com/anuraghazra/github-readme-stats/blob/master/docs/readme_cn.md" target="_blank" rel="noopener">github-readme-stats</a></h2><p>一个可以自己部署的服务，生成个人 GitHub 账户的统计，可以插在自述文件里面。</p><h2 id="3-IDC-Ping-Monitor"><a href="#3-IDC-Ping-Monitor" class="headerlink" title="3. IDC Ping Monitor"></a>3. <a href="https://github.com/wilsonchai8/idc_ping_monitor" target="_blank" rel="noopener">IDC Ping Monitor</a></h2><p>全国网络监控的一个解决方案思路。</p><h2 id="4-Prometheus官网的非官方中文手册"><a href="#4-Prometheus官网的非官方中文手册" class="headerlink" title="4. Prometheus官网的非官方中文手册"></a>4. <a href="https://github.com/1046102779/prometheus" target="_blank" rel="noopener">Prometheus官网的非官方中文手册</a></h2><p>Prometheus官网的非官方中文手册，旨在为大家提供一个比较容易入手的文档。最后</p><h1 id="杂谈"><a href="#杂谈" class="headerlink" title="杂谈"></a>杂谈</h1><h2 id=""><a href="#" class="headerlink" title=""></a></h2><p>2020 年后半年总是忙于各种事务，博客更新有些慢了。变成了一个咕咕星人。哈哈</p><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复&gt;。<br>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
      <category term="weekly" scheme="https://erdong.site/tags/weekly/"/>
    
  </entry>
  
  <entry>
    <title>Prometheus 2.24.0 新特性</title>
    <link href="https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-24-0.html"/>
    <id>https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-24-0.html</id>
    <published>2021-01-16T12:17:11.000Z</published>
    <updated>2021-11-20T15:44:58.099Z</updated>
    
    <content type="html"><![CDATA[<p>Prometheus <a href="https://github.com/prometheus/prometheus/releases/tag/v2.24.0" target="_blank" rel="noopener">2.24.0</a> 现在(2021.01.06)已经发布，在上个月的 <a href="http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-23-0.html">2.23.0</a> 之后又进行了很多的修复和改进。</p><a id="more"></a><p>promtool 这个工具在这个版本增加 <code>check web-config</code> 子命令，用来检查 web 配置文件。另外新增了添加 <code>tsdb create-blocks-from openmetrics</code> 子命令，从 <code>OpenMetrics</code> 文件中回填度量数据。在命令行上，增加URL方案检查和测试功能。</p><p>在这个版本，Prometheus 在 HTTP API 中添加了 TLS 和基本的认证功能。通过 HTTP API 访问匹配器为空的时候会快速失败，这样可以提高用户体验。HTTP API 支持标签 API 的匹配器。HTTP API 这次有一个修改，避免了通过 HTTP 多次退出时双关闭通道的问题。</p><p>对于时序数据库 TSDB 这次更新以后避免了压缩后运行不必要的GC。还有就是当压缩时间超过块时间范围时增加日志记录。</p><p>对于服务发现，EC2 的服务发现里新增了一个 IPv6 的 label，而且会重用 EC2 的客户端，减少请求证书的频率。</p><p>对于 DNS  的服务发现，会忽略无效的 CNAME 记录 以避免虚假的 <code>Invalid SRV record</code> 告警。<br>另外这个版本避免了 Kubernetes SD中由有效标签选择器触发的配置错误</p><p>详细的发行注记可以查看 <a href="https://github.com/prometheus/prometheus/releases/tag/v2.24.0" target="_blank" rel="noopener">release notes</a> 。</p><p>Brian Brazil 大佬的博客（<a href="https://www.robustperception.io）最近不更新了。最后一次更新时间是" target="_blank" rel="noopener">https://www.robustperception.io）最近不更新了。最后一次更新时间是</a> 2020.12.28 。最后一篇文章是 《Monitoring is a means, not an end》，确实，监控是一种手段，不是目的，也不是终点。共勉。</p><h1 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h1><ul><li><a href="https://github.com/prometheus/prometheus/releases/tag/v2.24.0" target="_blank" rel="noopener">https://github.com/prometheus/prometheus/releases/tag/v2.24.0</a> ，By prombot of GitHub</li></ul><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p><p><img src="https://erdong.site/images/erdongxtnew.jpg" alt="微信公众号"></p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Prometheus &lt;a href=&quot;https://github.com/prometheus/prometheus/releases/tag/v2.24.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2.24.0&lt;/a&gt; 现在(2021.01.06)已经发布，在上个月的 &lt;a href=&quot;http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-23-0.html&quot;&gt;2.23.0&lt;/a&gt; 之后又进行了很多的修复和改进。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="New-Features" scheme="https://erdong.site/categories/Prometheus/New-Features/"/>
    
    
      <category term="Prometheus" scheme="https://erdong.site/tags/Prometheus/"/>
    
      <category term="Features" scheme="https://erdong.site/tags/Features/"/>
    
      <category term="release" scheme="https://erdong.site/tags/release/"/>
    
  </entry>
  
  <entry>
    <title>Prometheus 2.23.0 新特性</title>
    <link href="https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-23-0.html"/>
    <id>https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-23-0.html</id>
    <published>2020-12-06T12:17:11.000Z</published>
    <updated>2021-11-20T15:44:05.849Z</updated>
    
    <content type="html"><![CDATA[<p>Prometheus <a href="https://github.com/prometheus/prometheus/releases/tag/v2.23.0" target="_blank" rel="noopener">2.23.0</a> 现在(2020.11.26)已经发布，在上个月的 <a href="http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-22-0.html">2.22.0</a> 之后又进行了很多的修复和改进。</p><a id="more"></a><p>React UI 作为 Web 的默认页面，老的页面仅会维持处于可用状态。</p><p>对 TSDB 进行了各种性能改进。在压缩过程中添加序列时缓存标签名称和最后值，这样压缩速度会更快，在 Prometheus 停止运行一段时间后重新启动后只会有一个检查点，并且 API 不再加载任何数据块。</p><p>PromQL 提高了哈希方法的性能，使查询速度更快。修正括号内向量选择器的timestamp()方法。在 PromQL 解析错误中不包含渲染表达式。</p><p>Promtool 现在可以列出 tsdb 块的大小，在每次执行 test 的时候会计算最大最小值。</p><p>修复了调用 <code>/-/quit/</code> 的时候执行 2 次 <code>close()</code> 的问题。</p><p>远程写现在可以发送元数据。这是一种有限的权宜之计，仅够实现指标元数据API，因为没有办法将特定的示例链接到它的元数据。对于Prometheus本身在/metrics上公开的远程写度量，也有无数的更改。</p><p>在远程写中删除/重命名了以下指标</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">prometheus_remote_storage_succeeded_samples_total  被移除了 prometheus_remote_storage_samples_total 介绍了所有发送的指标</span><br><span class="line"></span><br><span class="line">prometheus_remote_storage_sent_bytes_total 被移除了， 被 prometheus_remote_storage_samples_bytes_total 和 prometheus_remote_storage_metadata_bytes_total 替换了。</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">prometheus_remote_storage_failed_samples_total -&gt; prometheus_remote_storage_samples_failed_total .</span><br><span class="line">prometheus_remote_storage_retried_samples_total -&gt; prometheus_remote_storage_samples_retried_total.</span><br><span class="line">prometheus_remote_storage_dropped_samples_total -&gt; prometheus_remote_storage_samples_dropped_total.</span><br><span class="line">prometheus_remote_storage_pending_samples -&gt; prometheus_remote_storage_samples_pending.</span><br></pre></td></tr></table></figure><p>本次更新，引入了如下指标</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">prometheus_remote_storage_metadata_total</span><br><span class="line">prometheus_remote_storage_metadata_failed_total</span><br><span class="line">prometheus_remote_storage_metadata_retried_total prometheus_remote_storage_metadata_bytes_total</span><br><span class="line">prometheus_remote_storage_max_samples_per_send</span><br></pre></td></tr></table></figure><p>详细的发行注记可以查看 <a href="https://github.com/prometheus/prometheus/releases/tag/v2.23.0" target="_blank" rel="noopener">release notes</a> 。</p><h1 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h1><ul><li><a href="https://www.robustperception.io/new-features-in-prometheus-2-23-0" target="_blank" rel="noopener">https://www.robustperception.io/new-features-in-prometheus-2-23-0</a> ， By Brian Brazil</li><li><a href="https://github.com/prometheus/prometheus/releases/tag/v2.23.0" target="_blank" rel="noopener">https://github.com/prometheus/prometheus/releases/tag/v2.23.0</a> ，By prombot of GitHub</li></ul><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p><p><img src="https://erdong.site/images/erdongxtnew.jpg" alt="微信公众号"></p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Prometheus &lt;a href=&quot;https://github.com/prometheus/prometheus/releases/tag/v2.23.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2.23.0&lt;/a&gt; 现在(2020.11.26)已经发布，在上个月的 &lt;a href=&quot;http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-22-0.html&quot;&gt;2.22.0&lt;/a&gt; 之后又进行了很多的修复和改进。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="New-Features" scheme="https://erdong.site/categories/Prometheus/New-Features/"/>
    
    
      <category term="Prometheus" scheme="https://erdong.site/tags/Prometheus/"/>
    
      <category term="Features" scheme="https://erdong.site/tags/Features/"/>
    
      <category term="release" scheme="https://erdong.site/tags/release/"/>
    
  </entry>
  
  <entry>
    <title>Prometheus 2.22.0 新特性</title>
    <link href="https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-22-0.html"/>
    <id>https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-22-0.html</id>
    <published>2020-10-25T12:17:11.000Z</published>
    <updated>2021-11-20T15:41:45.326Z</updated>
    
    <content type="html"><![CDATA[<p>Prometheus <a href="https://github.com/prometheus/prometheus/releases/tag/v2.22.0" target="_blank" rel="noopener">2.22.0</a> 现在(2020.10.15)已经发布，在上个月的 <a href="http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-21-0.html">2.21.0</a> 之后又进行了很多的修复和改进。</p><a id="more"></a><p>有两个新的度量，<code>rule_group_last_evaluation_samples</code> 将帮助您跟踪规则组，<code>prometheus_tsdb_data_replay_duration_seconds</code> 将提供WAL在启动时重放的时间。</p><p>正如 2.21.0 发布说明中所宣布的，实验性的 gRPC API v2 已经移除，主要是因为 gRPC 导致维护问题。如果您正在使用它，那么您可以切换到 v1 API。</p><p>警报和目标页面的新UI有了改进，使当前的视图设置更明显，并允许崩溃的刮擦配置分别。</p><p>classic UI 模式下，在进行范围查询时会运行即时查询。</p><p>Prometheus 2.18切换到Go 1.14，其中包括对块大小有显著影响的性能回归。在这个版本中添加了一个临时的解决方案，这涉及到使刮擦时间戳稍微不那么准确。</p><p>这一个版本更新的内容相对较少，只有 12 个 ，有 5 个 BUG Fix ，还有 6 个 优化，下一个版本将会有更大的变化。</p><p>详细的发行注记可以查看 <a href="https://github.com/prometheus/prometheus/releases/tag/v2.22.0" target="_blank" rel="noopener">release notes</a> 。</p><h1 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h1><ul><li><a href="https://www.robustperception.io/new-features-in-prometheus-2-22-0" target="_blank" rel="noopener">https://www.robustperception.io/new-features-in-prometheus-2-22-0</a> ， By Brian Brazil</li><li><a href="https://github.com/prometheus/prometheus/releases/tag/v2.22.0" target="_blank" rel="noopener">https://github.com/prometheus/prometheus/releases/tag/v2.22.0</a> ，By prombot of GitHub</li></ul><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p><p><img src="https://erdong.site/images/erdongxtnew.jpg" alt="微信公众号"></p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Prometheus &lt;a href=&quot;https://github.com/prometheus/prometheus/releases/tag/v2.22.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2.22.0&lt;/a&gt; 现在(2020.10.15)已经发布，在上个月的 &lt;a href=&quot;http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-21-0.html&quot;&gt;2.21.0&lt;/a&gt; 之后又进行了很多的修复和改进。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="New-Features" scheme="https://erdong.site/categories/Prometheus/New-Features/"/>
    
    
      <category term="Prometheus" scheme="https://erdong.site/tags/Prometheus/"/>
    
      <category term="Features" scheme="https://erdong.site/tags/Features/"/>
    
      <category term="release" scheme="https://erdong.site/tags/release/"/>
    
  </entry>
  
  <entry>
    <title>Prometheus 2.21.0 新特性</title>
    <link href="https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-21-0.html"/>
    <id>https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-21-0.html</id>
    <published>2020-10-23T12:17:11.000Z</published>
    <updated>2021-11-20T15:40:26.023Z</updated>
    
    <content type="html"><![CDATA[<p>Prometheus <a href="https://github.com/prometheus/prometheus/releases/tag/v2.21.0" target="_blank" rel="noopener">2.21.0</a> 现在(2020.09.11)已经发布，在上个月的 <a href="http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-20-0.html">2.20.0</a> 之后又进行了很多的修复和改进。</p><a id="more"></a><p>这个版本使用了 Go 1.15 进行编译，不赞成在TLS证书验证中使用 X.509 CommonName 。</p><p>如果你正在使用 gRPC API v2(仅限于 TSDB 管理命令)，请注意，我们将在下一个次要版本2.22中删除这个实验API。</p><p>现在可以在PromQL、配置文件和命令行中使用 1m30s 这样的标识来表示持续时间。<code>target_limit</code> 是一个新的紧急安全阈值，如果一个刮擦配置有更多的目标，那么他们的刮擦将失败。</p><p>有两个新的服务发现，Eureka 和 Hetzner。Kubernetes SD现在支持EndpointSlices, Docker Swarm SD 支持 task &amp;services 而不需要发布端口，DNS SD 有更多 SRV 记录的元数据。</p><p>以前分离的tsdb命令行工具现在是promtool的一部分，您还可以指定何时由promtool评估即时查询。</p><p><code>query_log_file</code> 路径现在可以在配置文件中进行配置。</p><p>详细的发行注记可以查看 <a href="https://github.com/prometheus/prometheus/releases/tag/v2.21.0" target="_blank" rel="noopener">release notes</a> 。</p><p>如果和 Thanos 搭配使用，要求 Thanos 版本不得低于 v0.16.0 ，建议使用最新版本。</p><h1 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h1><ul><li><a href="https://www.robustperception.io/new-features-in-prometheus-2-21-0" target="_blank" rel="noopener">https://www.robustperception.io/new-features-in-prometheus-2-21-0</a> ， By Brian Brazil</li><li><a href="https://github.com/prometheus/prometheus/releases/tag/v2.21.0" target="_blank" rel="noopener">https://github.com/prometheus/prometheus/releases/tag/v2.21.0</a> ，By prombot of GitHub</li></ul><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p><p><img src="https://erdong.site/images/erdongxtnew.jpg" alt="微信公众号"></p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Prometheus &lt;a href=&quot;https://github.com/prometheus/prometheus/releases/tag/v2.21.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2.21.0&lt;/a&gt; 现在(2020.09.11)已经发布，在上个月的 &lt;a href=&quot;http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-20-0.html&quot;&gt;2.20.0&lt;/a&gt; 之后又进行了很多的修复和改进。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="New-Features" scheme="https://erdong.site/categories/Prometheus/New-Features/"/>
    
    
      <category term="Prometheus" scheme="https://erdong.site/tags/Prometheus/"/>
    
      <category term="Features" scheme="https://erdong.site/tags/Features/"/>
    
      <category term="release" scheme="https://erdong.site/tags/release/"/>
    
  </entry>
  
  <entry>
    <title>Prometheus 2.20.0 新特性</title>
    <link href="https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-20-0.html"/>
    <id>https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-20-0.html</id>
    <published>2020-08-09T15:17:11.000Z</published>
    <updated>2020-08-13T01:49:55.130Z</updated>
    
    <content type="html"><![CDATA[<p>Prometheus <a href="https://github.com/prometheus/prometheus/releases/tag/v2.20.0" target="_blank" rel="noopener">2.20.0</a> 现在(2020.07.22)已经发布，在上个月的 <a href="http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-19-0.html">2.19.0</a> 之后又进行了很多的修复和改进。</p><a id="more"></a><p>现在 Prometheus 会默认启动 WAL 压缩，之前的版本是可以选择是否启动 WAL 压缩。这样可以节省一些磁盘空间和 IOPS，降低因为 IOPS 一个小成本的 CPU。</p><p>WAL压缩将防止在不删除WAL的情况下降级到v2.10或更早版本，如果你需要降级，那么可以通过 <code>--no-storage.tsdb.wal-compression</code> 来关闭压缩</p><p>而且正则表达式的匹配器性能也得到的提高。并且提升了高聚合度label的查询性能</p><p>PromQL 新增了一个<code>group()</code>聚合器，可用于提高某些查询的可读性。</p><p>新增了 2 个服务发现，Docker Swarm和DigitalOcean。Openstack SD现在还可以查询备选端点，EC2有额外的AMI元数据。</p><p>远程读取指标得到了改进，UI的某些方面也得到了改进。</p><p>详细的发行注记可以查看 <a href="https://github.com/prometheus/prometheus/releases/tag/v2.20.0" target="_blank" rel="noopener">release notes</a> 。</p><h1 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h1><ul><li><a href="https://www.robustperception.io/new-features-in-prometheus-2-20-0" target="_blank" rel="noopener">https://www.robustperception.io/new-features-in-prometheus-2-20-0</a> ， By Brian Brazil</li><li><a href="https://github.com/prometheus/prometheus/releases/tag/v2.20.0" target="_blank" rel="noopener">https://github.com/prometheus/prometheus/releases/tag/v2.20.0</a> ，By prombot of GitHub</li></ul><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p><p><img src="https://erdong.site/images/erdongxtnew.jpg" alt="微信公众号"></p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Prometheus &lt;a href=&quot;https://github.com/prometheus/prometheus/releases/tag/v2.20.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2.20.0&lt;/a&gt; 现在(2020.07.22)已经发布，在上个月的 &lt;a href=&quot;http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-19-0.html&quot;&gt;2.19.0&lt;/a&gt; 之后又进行了很多的修复和改进。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="New-Features" scheme="https://erdong.site/categories/Prometheus/New-Features/"/>
    
    
      <category term="Prometheus" scheme="https://erdong.site/tags/Prometheus/"/>
    
      <category term="Features" scheme="https://erdong.site/tags/Features/"/>
    
      <category term="release" scheme="https://erdong.site/tags/release/"/>
    
  </entry>
  
  <entry>
    <title>K8S 中的 Grafana 数据持久化</title>
    <link href="https://erdong.site/Grafana/grafana-kubernetes-config-persistence.html"/>
    <id>https://erdong.site/Grafana/grafana-kubernetes-config-persistence.html</id>
    <published>2020-07-25T12:41:08.000Z</published>
    <updated>2020-07-25T01:39:39.658Z</updated>
    
    <content type="html"><![CDATA[<p>自从将 Grafana 部署到 K8S 中以后，带来了很多的便利性，但是也有一个问题一直困扰着我，那就是 Grafana 中的数据无法持久化，经常配置好的 Datasource 和 Dashboards 在运行一段时间后就丢失了，有时候刚要排查问题，结果什么都找不到了。我们都知道，Grafana 在启动后，数据会存储到数据库中，包括 datasource 的配置，Dashboards 的配置。要解决 Grafana 的数据持久化可以从 2 个方面来进行思考并且解决。</p><a id="more"></a><p>方案一：</p><p>Grafana 数据存储在数据库中，当前支持 MySQL 、sqlite3、Postgres 这三个，缺省情况下，Grafana 会在本地启动一个 Sqlite3 来存储数据，你也可以在 grafana.ini 配置文件中修改这个配置来切换数据库。</p><p>基于这个方式，第一种方案出来了。 当 Grafana 运行在 K8S 中时，数据库不使用自动启动的 Sqlite3 ，在 K8S 外启动一个关系数据库（可以是 MySQL 、sqlite3、Postgres 中的任何一个），修改 grafana.ini 文件，使得 Grafana 在启动时连接外部的数据库，这样数据就不会丢失了。</p><p>方案二：</p><p>Grafana 在 v5.0 之后引入了 provisioning 功能，可以将 Datasource 、Dashboards 这些内容，通过配置文件的方式在 Grafana 启动的时候加载。把这些文件放在 K8S 的配置映射中，然后挂载到 Grafana 容器中的指定路径即可。这样配置后在 Web UI 修改已经不会生效，只有在对应的配置文件中修改才会生效。</p><p>接下里我们看看方案二的怎么配置使用，我使用的 Grafana 版本是 v6.4.3。</p><p>首先需要在 Grafana 启动时添加相应的参数来打开 provisioning 功能，官方提供的 docker 镜像已经将该功能打开，缺省的路径是 <code>/etc/grafana/provisioning</code> ,这个路径下有 dashboards、datasources、notifiers 三个文件夹，相关的配置会放在这里。如果是自己构建的镜像，请参考文档或者官方的 dockerfile 把该功能打开。</p><p>其次我们需要解决数据源的持久化问题，我们准备 datasources.yaml 文件，用来配置数据源。datasources.yaml 文件内容如下：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br></pre></td><td class="code"><pre><span class="line"># config file version</span><br><span class="line">apiVersion: 1</span><br><span class="line"></span><br><span class="line"># list of datasources that should be deleted from the database</span><br><span class="line">deleteDatasources:</span><br><span class="line">  - name: Prometheus</span><br><span class="line">    orgId: 1</span><br><span class="line"></span><br><span class="line"># list of datasources to insert&#x2F;update depending</span><br><span class="line"># what&#39;s available in the database</span><br><span class="line">datasources:</span><br><span class="line">  # &lt;string, required&gt; name of the datasource. Required</span><br><span class="line">  - name: Prometheus</span><br><span class="line">    # &lt;string, required&gt; datasource type. Required</span><br><span class="line">    type: prometheus</span><br><span class="line">    # &lt;string, required&gt; access mode. proxy or direct (Server or Browser in the UI). Required</span><br><span class="line">    access: proxy</span><br><span class="line">    # &lt;int&gt; org id. will default to orgId 1 if not specified</span><br><span class="line">    orgId: 1</span><br><span class="line">    # &lt;string&gt; custom UID which can be used to reference this datasource in other parts of the configuration, if not specified will be generated automatically</span><br><span class="line">    uid: my_unique_uid</span><br><span class="line">    # &lt;string&gt; url</span><br><span class="line">    url: http:&#x2F;&#x2F;127.0.0.1:9090</span><br><span class="line">    # &lt;string&gt; Deprecated, use secureJsonData.password</span><br><span class="line">    password:</span><br><span class="line">    # &lt;string&gt; database user, if used</span><br><span class="line">    user:</span><br><span class="line">    # &lt;string&gt; database name, if used</span><br><span class="line">    database:</span><br><span class="line">    # &lt;bool&gt; enable&#x2F;disable basic auth</span><br><span class="line">    basicAuth:</span><br><span class="line">    # &lt;string&gt; basic auth username</span><br><span class="line">    basicAuthUser:</span><br><span class="line">    # &lt;string&gt; Deprecated, use secureJsonData.basicAuthPassword</span><br><span class="line">    basicAuthPassword:</span><br><span class="line">    # &lt;bool&gt; enable&#x2F;disable with credentials headers</span><br><span class="line">    withCredentials:</span><br><span class="line">    # &lt;bool&gt; mark as default datasource. Max one per org</span><br><span class="line">    isDefault:</span><br><span class="line">    # &lt;map&gt; fields that will be converted to json and stored in jsonData</span><br><span class="line">    jsonData:</span><br><span class="line">      graphiteVersion: &#39;1.1&#39;</span><br><span class="line">      tlsAuth: false</span><br><span class="line">      tlsAuthWithCACert: false</span><br><span class="line">    # &lt;string&gt; json object of data that will be encrypted.</span><br><span class="line">    secureJsonData:</span><br><span class="line">      tlsCACert: &#39;...&#39;</span><br><span class="line">      tlsClientCert: &#39;...&#39;</span><br><span class="line">      tlsClientKey: &#39;...&#39;</span><br><span class="line">      # &lt;string&gt; database password, if used</span><br><span class="line">      password:</span><br><span class="line">      # &lt;string&gt; basic auth password</span><br><span class="line">      basicAuthPassword:</span><br><span class="line">    version: 1</span><br><span class="line">    # &lt;bool&gt; allow users to edit datasources from the UI.</span><br><span class="line">    editable: false</span><br></pre></td></tr></table></figure><p>将该文件放在 K8S 的 config map 中，在容器中时添加数据卷，卷类型选<code>配置映射卷</code> ，选择 config map 中的 datasources.yaml 挂载到容器的 <code>/etc/grafana/provisioning/datasources</code> ,然后重启容器，让容器重新加载配置。</p><p>使用后在 Web UI 的数据源页面进行修改会提示 <code>This datasource was added by config and cannot be modified using the UI. Please contact your server admin to update this datasource.</code> 表示数据源的配置，在 Web UI 修改已经不会生效，只有在 datasources.yaml 文件中修改才会生效。</p><p>接下来解决 dashboards 的持久化问题，准备 <code>dashboards.yaml</code> 文件，用来指定之后的 dashboards 的 json 文件放在哪个目录。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line">apiVersion: 1</span><br><span class="line"></span><br><span class="line">providers:</span><br><span class="line">  # &lt;string&gt; an unique provider name. Required</span><br><span class="line">  - name: &#39;a unique provider name&#39;</span><br><span class="line">    # &lt;int&gt; Org id. Default to 1</span><br><span class="line">    orgId: 1</span><br><span class="line">    # &lt;string&gt; name of the dashboard folder.</span><br><span class="line">    folder: &#39;&#39;</span><br><span class="line">    # &lt;string&gt; folder UID. will be automatically generated if not specified</span><br><span class="line">    folderUid: &#39;&#39;</span><br><span class="line">    # &lt;string&gt; provider type. Default to &#39;file&#39;</span><br><span class="line">    type: file</span><br><span class="line">    # &lt;bool&gt; disable dashboard deletion</span><br><span class="line">    disableDeletion: false</span><br><span class="line">    # &lt;bool&gt; enable dashboard editing</span><br><span class="line">    editable: true</span><br><span class="line">    # &lt;int&gt; how often Grafana will scan for changed dashboards</span><br><span class="line">    updateIntervalSeconds: 10</span><br><span class="line">    # &lt;bool&gt; allow updating provisioned dashboards from the UI</span><br><span class="line">    allowUiUpdates: false</span><br><span class="line">    options:</span><br><span class="line">      # &lt;string, required&gt; path to dashboard files on disk. Required when using the &#39;file&#39; type</span><br><span class="line">      path: &#x2F;etc&#x2F;grafana&#x2F;dashboards-files</span><br></pre></td></tr></table></figure><p>将该文件放在 K8S 的 config map 中，在容器中时添加数据卷，卷类型选<code>配置映射卷</code> ，选择 config map 中的 dashboards.yaml 挂载到容器的 <code>/etc/grafana/provisioning/dashboards</code> ,然后重启容器，让容器重新加载配置。</p><p>接下来将准备好的 json 格式的 Dashboards 文件放到 <code>/etc/grafana/dashboards-files</code>,  重新加载这些 json 文件即可。</p><h1 id="参考链接："><a href="#参考链接：" class="headerlink" title="参考链接："></a>参考链接：</h1><ul><li><a href="https://grafana.com/docs/grafana/latest/administration/provisioning/#provisioning-grafana" target="_blank" rel="noopener">https://grafana.com/docs/grafana/latest/administration/provisioning/#provisioning-grafana</a> , By Provisioning Grafanan</li></ul><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;自从将 Grafana 部署到 K8S 中以后，带来了很多的便利性，但是也有一个问题一直困扰着我，那就是 Grafana 中的数据无法持久化，经常配置好的 Datasource 和 Dashboards 在运行一段时间后就丢失了，有时候刚要排查问题，结果什么都找不到了。我们都知道，Grafana 在启动后，数据会存储到数据库中，包括 datasource 的配置，Dashboards 的配置。要解决 Grafana 的数据持久化可以从 2 个方面来进行思考并且解决。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Grafana" scheme="https://erdong.site/categories/Grafana/"/>
    
    
      <category term="Grafana" scheme="https://erdong.site/tags/Grafana/"/>
    
  </entry>
  
  <entry>
    <title>攻城狮周刊：第46期</title>
    <link href="https://erdong.site/weekly/weekly46.html"/>
    <id>https://erdong.site/weekly/weekly46.html</id>
    <published>2020-07-19T15:50:59.000Z</published>
    <updated>2020-07-19T16:01:01.644Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="工具"><a href="#工具" class="headerlink" title="工具"></a>工具</h1><h2 id="1-windows-exporter"><a href="#1-windows-exporter" class="headerlink" title="1. windows_exporter"></a>1. <a href="https://github.com/prometheus-community/windows_exporter" target="_blank" rel="noopener">windows_exporter</a></h2><p>在 Windows 上运行的采集系统上基础信息提供给 Prometheus 的 exporter ，还没有使用过，在合适的场景感受一下。</p><h2 id="2-pap-er"><a href="#2-pap-er" class="headerlink" title="2.pap.er"></a>2.<a href="https://paper.meiyuan.in" target="_blank" rel="noopener">pap.er</a></h2><p>pap.er 是专为 Mac 设计的壁纸应用，可以一键设置图片为壁纸，有 2K 和 4K 壁纸可供选择。</p><h1 id="资源"><a href="#资源" class="headerlink" title="资源"></a>资源</h1><h2 id="1-Kubernetes-工具"><a href="#1-Kubernetes-工具" class="headerlink" title="1. Kubernetes 工具"></a>1. <a href="https://zhuanlan.zhihu.com/p/88340421" target="_blank" rel="noopener">Kubernetes 工具</a></h2><p>50 多种 Kubernetes 集群部署、监控、安全及测试等相关工具，在知乎发表的文章。</p><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复&gt;。<br>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
      <category term="weekly" scheme="https://erdong.site/tags/weekly/"/>
    
  </entry>
  
  <entry>
    <title>Prometheus 2.19.0 新特性</title>
    <link href="https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-19-0.html"/>
    <id>https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-19-0.html</id>
    <published>2020-06-21T15:17:11.000Z</published>
    <updated>2021-09-01T11:52:03.901Z</updated>
    
    <content type="html"><![CDATA[<p>Prometheus <a href="https://github.com/prometheus/prometheus/releases/tag/v2.19.0" target="_blank" rel="noopener">2.19.0</a> 现在(2020.06.15)已经发布，在上个月的 <a href="http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-18-0.html">2.18.0</a> 之后又进行了很多的修复和改进。</p><a id="more"></a><p>最大的一个特性就是 TSDB 的 head block 现在存储在 mmaped 中，而不是存储在  heap 中 。这样就减少了内存的需求，特别是高频的获取采集端的数据场景，而且可以在重启进程的时候可以变的更快。而且在隔离性上也有改进，减少了高负载的争用。</p><p>Triton 服务发现，现在支持全局空间。<br>增加告警重发延迟，可以容忍一些发送失败的场景。<br>增加了一个关于远程读的新的 Metric，<code>prometheus_remote_storage_remote_read_queries_total</code> ，是 count 类型。</p><p>在 API 中添加了 label name 和 label values 的时间范围参数</p><p>修正了TSDB配置远程读取时使用Prometheus时出现的不正确的查询结果的 BUG</p><p>在 2020 年 6 月 18 日，发布了 2.19.1 ，修复了 m-map 文件被截断导致的文件无序的 BUG 。</p><p>详细的发行注记可以查看 <a href="https://github.com/prometheus/prometheus/releases/tag/v2.19.0" target="_blank" rel="noopener">release notes</a> 。</p><h1 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h1><ul><li><p><a href="https://www.robustperception.io/new-features-in-prometheus-2-19-0" target="_blank" rel="noopener">https://www.robustperception.io/new-features-in-prometheus-2-19-0</a> ， By Brian Brazil</p></li><li><p><a href="https://github.com/prometheus/prometheus/releases/tag/v2.19.0" target="_blank" rel="noopener">https://github.com/prometheus/prometheus/releases/tag/v2.19.0</a> ，By prombot of GitHub</p></li></ul><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Prometheus &lt;a href=&quot;https://github.com/prometheus/prometheus/releases/tag/v2.19.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2.19.0&lt;/a&gt; 现在(2020.06.15)已经发布，在上个月的 &lt;a href=&quot;http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-18-0.html&quot;&gt;2.18.0&lt;/a&gt; 之后又进行了很多的修复和改进。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="New-Features" scheme="https://erdong.site/categories/Prometheus/New-Features/"/>
    
    
      <category term="Prometheus" scheme="https://erdong.site/tags/Prometheus/"/>
    
      <category term="Features" scheme="https://erdong.site/tags/Features/"/>
    
      <category term="release" scheme="https://erdong.site/tags/release/"/>
    
  </entry>
  
  <entry>
    <title>Prometheus 2.18.0 新特性</title>
    <link href="https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-18-0.html"/>
    <id>https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-18-0.html</id>
    <published>2020-05-31T15:17:11.000Z</published>
    <updated>2020-05-31T11:38:06.395Z</updated>
    
    <content type="html"><![CDATA[<p>Prometheus <a href="https://github.com/prometheus/prometheus/releases/tag/v2.18.0" target="_blank" rel="noopener">2.18.0</a> 现在(2020.05.05)已经发布，在上个月的 <a href="http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-17-0.html">2.17.0</a> 之后又进行了一些修正和改进。</p><a id="more"></a><p>这是一个相当轻的版本。最显著的变化是，WAL保存在磁盘上的时间已经减少了一半，从6个小时减少到3个小时，这是我为之前的一篇博客文章所做的研究得出的结论。</p><p>Federation 现在只查询本地TSDB，由于 read_recent 默认为 false，大多数远程读用户应该已经这样做了。</p><p>EC2服务发现现在新增了 architecture 元数据 label。</p><p>修复了一些 UI 和远程写的 BUG。</p><p>在 2020 年 5 月 7 日，发布了 2.18.1 TSDB 修复了一个快照 API 的 BUG。</p><p>详细的发行注记可以查看 <a href="https://github.com/prometheus/prometheus/releases/tag/v2.18.0" target="_blank" rel="noopener">release notes</a> 。</p><h1 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h1><ul><li><a href="https://www.robustperception.io/new-features-in-prometheus-2-18-0" target="_blank" rel="noopener">https://www.robustperception.io/new-features-in-prometheus-2-18-0</a> ， By Brian Brazil</li><li><a href="https://github.com/prometheus/prometheus/releases/tag/v2.18.0" target="_blank" rel="noopener">https://github.com/prometheus/prometheus/releases/tag/v2.18.0</a> ，By prombot of GitHub</li></ul><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Prometheus &lt;a href=&quot;https://github.com/prometheus/prometheus/releases/tag/v2.18.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2.18.0&lt;/a&gt; 现在(2020.05.05)已经发布，在上个月的 &lt;a href=&quot;http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-17-0.html&quot;&gt;2.17.0&lt;/a&gt; 之后又进行了一些修正和改进。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="New-Features" scheme="https://erdong.site/categories/Prometheus/New-Features/"/>
    
    
      <category term="Prometheus" scheme="https://erdong.site/tags/Prometheus/"/>
    
      <category term="Features" scheme="https://erdong.site/tags/Features/"/>
    
      <category term="release" scheme="https://erdong.site/tags/release/"/>
    
  </entry>
  
  <entry>
    <title>MAC OS 下 HomeBrew 使用</title>
    <link href="https://erdong.site/macos/macos-homebrew-introduction.html"/>
    <id>https://erdong.site/macos/macos-homebrew-introduction.html</id>
    <published>2020-05-31T11:46:10.000Z</published>
    <updated>2020-05-31T11:47:31.643Z</updated>
    
    <content type="html"><![CDATA[<p>Homebrew 是一个很方便的包管理器，主要用来管理 mac 操作系统的软件包，现在也支持 linux 操作系统的包管理以及 Windows 10 Subsystem for Linux。官网是 <a href="https://brew.sh" target="_blank" rel="noopener">https://brew.sh</a>  。</p><a id="more"></a><p>Homebrew 通过 Tap 方式定义源，官方默认提供了 brew、homebrew-core 、homebrew-cask 、homebrew-bottles 四个常用的源（仓库），用户也可以通过 Tap 定义自己的源。</p><p>在安装 brew 和使用 brew install 安装软件的过程中，经常会遇到安装缓慢、卡死的情况，这大多是由于 Homebrew 的默认安装源位于国外，国内访问速度慢造成的，解决这个问题的方法是将安装源替换为国内镜像，常用的国内镜像源可以使用中科大 LUG 源、清华 Tuna 源等。</p><h1 id="Brew-安装"><a href="#Brew-安装" class="headerlink" title="Brew 安装"></a>Brew 安装</h1><p>网上提供的安装方式都是之前的旧的安装方式，里边提到的都是使用 Ruby 脚本来安装的。现在 Brew 已经可以使用 Bash 来进行安装了，这是在 Github 的仓库 <a href="https://github.com/Homebrew/install" target="_blank" rel="noopener">Homebrew Install</a> 。</p><p>安装方式为 </p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&#x2F;bin&#x2F;bash -c &quot;$(curl -fsSL https:&#x2F;&#x2F;raw.githubusercontent.com&#x2F;Homebrew&#x2F;install&#x2F;master&#x2F;install.sh)&quot;</span><br></pre></td></tr></table></figure><p>这个脚本脚本中使用了 Brew 的默认源，源在国外，安装过程会非常缓慢，这个时候可以单独把 install.sh 脚本下载下来，修改其中的默认源为 中科大 LUG 源或者清华 Tuna 源。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">#默认源</span><br><span class="line">BREW_REPO&#x3D;&quot;https:&#x2F;&#x2F;github.com&#x2F;Homebrew&#x2F;brew&quot;</span><br></pre></td></tr></table></figure><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"># 中科大 LUG 源</span><br><span class="line">BREW_REPO&#x3D;&quot;https:&#x2F;&#x2F;mirrors.ustc.edu.cn&#x2F;brew.git&quot;</span><br><span class="line"># 清华 Tuna 源</span><br><span class="line">BREW_REPO&#x3D;&quot;https:&#x2F;&#x2F;mirrors.tuna.tsinghua.edu.cn&#x2F;git&#x2F;homebrew&#x2F;brew.git&quot;</span><br></pre></td></tr></table></figure><p>替换好以后，执行 <code>/bin/bash install.sh</code> 即可，速度会快很多。</p><p>如果需要卸载可以使用 </p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&#x2F;bin&#x2F;bash -c &quot;$(curl -fsSL https:&#x2F;&#x2F;raw.githubusercontent.com&#x2F;Homebrew&#x2F;install&#x2F;master&#x2F;uninstall.sh)&quot;</span><br></pre></td></tr></table></figure><h1 id="Brew-替换源"><a href="#Brew-替换源" class="headerlink" title="Brew 替换源"></a>Brew 替换源</h1><p>Homebrew 安装好以后，就可以使用 brew install 来安装软件了，这个时候会可以通过更换国内源的方式来加速安装。Brew 常用的是 4 个源，分别是 brew、<br>homebrew-core、homebrew-cask、homebrew-bottles 。<br>本文的编写目的是简单的介绍四个常用的源（源），以及如何更换为国内镜像实现快速安装软件。</p><h2 id="brew"><a href="#brew" class="headerlink" title="brew"></a>brew</h2><p>说明：Homebrew 源代码仓库。<br>默认地址：<a href="https://github.com/Homebrew/brew.git" target="_blank" rel="noopener">https://github.com/Homebrew/brew.git</a></p><h2 id="homebrew-core"><a href="#homebrew-core" class="headerlink" title="homebrew-core"></a>homebrew-core</h2><p>说明：Homebrew 核心源（仓库），它是 brew install 的默认安装源（仓库）。<br>默认地址：<a href="https://github.com/Homebrew/homebrew-core.git" target="_blank" rel="noopener">https://github.com/Homebrew/homebrew-core.git</a></p><h2 id="homebrew-cask"><a href="#homebrew-cask" class="headerlink" title="homebrew-cask"></a>homebrew-cask</h2><p>说明：homebrew-cask 源（仓库），提供 macOS 应用和大型二进制文件的安装。通常我们在 mac 操作系统上安装图形用户界面软件，系统都会提示“若要安装，请拖动此图标…”。homebrew-cask 扩展了Homebrew，为安装和管理 Atom 和 Google Chrome 之类的图形用户界面应用程序带来了优雅、简单和速度。</p><p>默认地址：<a href="https://github.com/Homebrew/homebrew-cask.git" target="_blank" rel="noopener">https://github.com/Homebrew/homebrew-cask.git</a></p><h2 id="homebrew-bottles"><a href="#homebrew-bottles" class="headerlink" title="homebrew-bottles"></a>homebrew-bottles</h2><p>说明：Homebrew 预编译二进制软件包。<br>默认地址：<a href="https://bintray.com/homebrew/bottles" target="_blank" rel="noopener">https://bintray.com/homebrew/bottles</a></p><p>了解了这个 4 个源以后，我们就可以对他们进行更新，主要是中科大 LUG 源、清华 Tuna 源，这样在其中一个故障的时候切换另外一个来正常使用。</p><p>替换中科大的默认源<br><a href="http://mirrors.ustc.edu.cn/help/homebrew-core.git.html" target="_blank" rel="noopener">http://mirrors.ustc.edu.cn/help/homebrew-core.git.html</a></p><p>替换中科大的 bottles<br><a href="http://mirrors.ustc.edu.cn/help/homebrew-bottles.html" target="_blank" rel="noopener">http://mirrors.ustc.edu.cn/help/homebrew-bottles.html</a></p><p>替换清华的默认源</p><p><a href="https://mirrors.tuna.tsinghua.edu.cn/help/homebrew/" target="_blank" rel="noopener">https://mirrors.tuna.tsinghua.edu.cn/help/homebrew/</a></p><p>替换清华的 bottles</p><p><a href="https://mirrors.tuna.tsinghua.edu.cn/help/homebrew-bottles/" target="_blank" rel="noopener">https://mirrors.tuna.tsinghua.edu.cn/help/homebrew-bottles/</a></p><p>替换 bottles 源的时候，如果你使用了 Zsh 等其他解释器，请更新对应的配置文件。</p><p>参考<br><a href="https://lug.ustc.edu.cn/wiki/mirrors/help/brew.git" target="_blank" rel="noopener">https://lug.ustc.edu.cn/wiki/mirrors/help/brew.git</a><br><a href="https://lug.ustc.edu.cn/wiki/mirrors/help/homebrew-bottles" target="_blank" rel="noopener">https://lug.ustc.edu.cn/wiki/mirrors/help/homebrew-bottles</a></p><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Homebrew 是一个很方便的包管理器，主要用来管理 mac 操作系统的软件包，现在也支持 linux 操作系统的包管理以及 Windows 10 Subsystem for Linux。官网是 &lt;a href=&quot;https://brew.sh&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://brew.sh&lt;/a&gt;  。&lt;/p&gt;
    
    </summary>
    
    
      <category term="macos" scheme="https://erdong.site/categories/macos/"/>
    
    
      <category term="macos" scheme="https://erdong.site/tags/macos/"/>
    
      <category term="brew" scheme="https://erdong.site/tags/brew/"/>
    
  </entry>
  
  <entry>
    <title>攻城狮周刊：第45期</title>
    <link href="https://erdong.site/weekly/weekly45.html"/>
    <id>https://erdong.site/weekly/weekly45.html</id>
    <published>2020-05-31T07:16:59.000Z</published>
    <updated>2020-05-31T11:44:15.322Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="教程"><a href="#教程" class="headerlink" title="教程"></a>教程</h1><h2 id="1"><a href="#1" class="headerlink" title="1. "></a>1. <a href="https://www.nginx.com/blog/help-the-world-by-healing-your-nginx-configuration/" target="_blank" rel="noopener"></a></h2><p>NGINX 官方的博客文章，教大家五个小技巧，通过改进配置来节省带宽、提高性能。</p><h1 id="工具"><a href="#工具" class="headerlink" title="工具"></a>工具</h1><h2 id="1-Consul-template"><a href="#1-Consul-template" class="headerlink" title="1. Consul-template"></a>1. <a href="https://github.com/hashicorp/consul-template" target="_blank" rel="noopener">Consul-template</a></h2><p>Consul template 是 Consul 周边的一个配置渲染的工具，和 confd 类似，可以从 Consul 的 kv 存储里读取数据，渲染成各种格式的文件来让 Prometheus、Nginx等等工具来读取。使用的文档可以参考：<br><a href="https://www.bookstack.cn/read/consul-guide/11_consul_template.md#使用" target="_blank" rel="noopener">https://www.bookstack.cn/read/consul-guide/11_consul_template.md#使用</a></p><h2 id="2-Confd"><a href="#2-Confd" class="headerlink" title="2. Confd"></a>2. <a href="https://github.com/kelseyhightower/confd" target="_blank" rel="noopener">Confd</a></h2><p>Confd 是一个使用模板来管理本地应用配置文件，可以从 consul 和 etcd 读取数据，和 consul-template 类似，使用模板渲染好配置文件后，也可以通过命令来重启或重载应用，使配置文件生效。但是该项目在 2018 年 7 月 16 日以后就没有新的代码提交。当前最新的版本是 v0.16.0 ，发布于 2018 年 5 月 5 日。</p><h2 id="3-Gossip"><a href="#3-Gossip" class="headerlink" title="3. Gossip"></a>3. <a href="https://pearmini.gitee.io/gossip/" target="_blank" rel="noopener">Gossip</a></h2><p>一个制作幻灯片的在线工具，只需要少量拖拽和对齐操作，就可以生成通过浏览器播放的幻灯片,比较炫酷。</p><h2 id="4-javaagent"><a href="#4-javaagent" class="headerlink" title="4. javaagent"></a>4. <a href="https://github.com/dingjs/javaagent" target="_blank" rel="noopener">javaagent</a></h2><p>基于javaagent开发的APM工具，收集方法的执行次数和执行时间，定时输出成json格式的日志。</p><h1 id="资源"><a href="#资源" class="headerlink" title="资源"></a>资源</h1><h2 id="1-阿里云藏经阁"><a href="#1-阿里云藏经阁" class="headerlink" title="1. 阿里云藏经阁"></a>1. <a href="https://developer.aliyun.com/topic/ebook" target="_blank" rel="noopener">阿里云藏经阁</a></h2><h1 id="阿里云开发者社区——藏经阁系列电子书，汇聚了一线大厂的技术沉淀精华，爆款不断。"><a href="#阿里云开发者社区——藏经阁系列电子书，汇聚了一线大厂的技术沉淀精华，爆款不断。" class="headerlink" title="阿里云开发者社区——藏经阁系列电子书，汇聚了一线大厂的技术沉淀精华，爆款不断。"></a>阿里云开发者社区——藏经阁系列电子书，汇聚了一线大厂的技术沉淀精华，爆款不断。</h1><p>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复&gt;。<br>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
      <category term="weekly" scheme="https://erdong.site/tags/weekly/"/>
    
  </entry>
  
  <entry>
    <title>Prometheus 2.17.0 新特性</title>
    <link href="https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-17-0.html"/>
    <id>https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-17-0.html</id>
    <published>2020-05-30T15:17:11.000Z</published>
    <updated>2020-05-31T11:42:52.324Z</updated>
    
    <content type="html"><![CDATA[<p>Prometheus <a href="https://github.com/prometheus/prometheus/releases/tag/v2.17.0" target="_blank" rel="noopener">2.17.0</a> 现在(2020.03.24)已经发布，在上个月的 <a href="http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-16-0.html">2.16.0</a> 之后又进行了一些修正和改进。</p><a id="more"></a><p>这个版本中最大的变化是将隔离添加到了tsdb中。API查询和记录规则保证只能看到完整的片段和完整的记录规则。这样在内存使用和 CPU 使用上会多一些，但是相对的，不会产生错误的结果，这样做是值得的。在查询过程中提高部分命中 head 的查询性能</p><p>现在可以并发地对多个端点进行远程读取。</p><p>PromQL解析器在幕后进行了一些更改。用户可以看到的惟一方面是，某些关键字现在也可以作为纯度量名称使用，但另一方面，我怀疑是否有人会命名一个名为count_values 的度量。</p><p>针对 Consul、EC2、OpenStack 和 Kubernetes 的服务发现获得了一些新的元数据。Kubernetes SD 还获得了对大量目标进行预过滤的能力，因为对大量目标进行重新标记是不现实的。</p><p>对于 Consul 服务发现，可以暴露服务健康作为meta标签。</p><p>对于 EC2 服务发现，将 EC2 的实例生命周期作为元标签公开。</p><p>在 React UI 方面，在 target 页面规范了本地主机 url 。</p><p>对于告警规则方面，在重新加载后将已删除的规则标记为旧的，过期的。</p><p>对于 PromQL，不要在查询日志中转义类似于 html 的字符</p><p>在 2020 年 3 月 26 日，发布了 2.17.1 ，修复了之前 CPU 和内存使用升高的问题。</p><p>在 2020 年 4 月 20 日，发布了 2.17.2 ，修复 Prometheus 启动一个空TSDB WAL时的内存泄漏，修复了删除一个正在计算的告警组的时候重载会卡住的问题，</p><p>建议使用最新的版本。</p><p>详细的发行注记可以查看 <a href="https://github.com/prometheus/prometheus/releases/tag/v2.17.0" target="_blank" rel="noopener">release notes</a> 。</p><h1 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h1><ul><li><a href="https://www.robustperception.io/new-features-in-prometheus-2-17-0" target="_blank" rel="noopener">https://www.robustperception.io/new-features-in-prometheus-2-17-0</a> ， By Brian Brazil</li><li><a href="https://github.com/prometheus/prometheus/releases/tag/v2.17.0" target="_blank" rel="noopener">https://github.com/prometheus/prometheus/releases/tag/v2.17.0</a> ，By prombot of GitHub </li></ul><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Prometheus &lt;a href=&quot;https://github.com/prometheus/prometheus/releases/tag/v2.17.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2.17.0&lt;/a&gt; 现在(2020.03.24)已经发布，在上个月的 &lt;a href=&quot;http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-16-0.html&quot;&gt;2.16.0&lt;/a&gt; 之后又进行了一些修正和改进。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="New-Features" scheme="https://erdong.site/categories/Prometheus/New-Features/"/>
    
    
      <category term="Prometheus" scheme="https://erdong.site/tags/Prometheus/"/>
    
      <category term="Features" scheme="https://erdong.site/tags/Features/"/>
    
      <category term="release" scheme="https://erdong.site/tags/release/"/>
    
  </entry>
  
  <entry>
    <title>Prometheus 2.16.0 新特性</title>
    <link href="https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-16-0.html"/>
    <id>https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-16-0.html</id>
    <published>2020-05-23T15:17:11.000Z</published>
    <updated>2020-05-23T14:49:55.169Z</updated>
    
    <content type="html"><![CDATA[<p>Prometheus <a href="https://github.com/prometheus/prometheus/releases/tag/v2.16.0" target="_blank" rel="noopener">2.16.0</a> 现在(2020.02.13)已经发布，在上个月的 <a href="http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-15-0.html">2.15.0</a> 之后又进行了一些修正和改进。</p><a id="more"></a><p>在这个版本中有很多的性能改进，如果你的查询只涉及最近几个小时的数值，会变的非常快，因为 Brian Brazil 删除了一些不必要的排序。在实际使用中，这会使得记录规则在处理 100 万个序列的高基数时快 1 秒。</p><p>现在可以配置 Prometheus 来记录它执行的所有 PromQL 查询。</p><p>PromQL 解析器已经被一个带有改进的错误消息的生成解析器所取代，这也会快一些。 还有一个新的 absent_over_time 函数，在没有任何变化的情况下，重新加载配置和告警规则配置的效率会更高。</p><p>有新的 prometheus_target_metadata_cache_* 来展示元数据占用的内存，还有针对 WAL 写失败的 prometheus_tsdb_wal_writes_failed_total 的指标。</p><p>新的 UI 支持本地时区，可以勾选 local timezone 。新增支持告警规则页面以及“Xs ago” 之前。</p><p>TSDB 提升了查询最近 2 小时内数据的查询性能。<br>promtool 工具支持显示无效规则的行号。</p><p>还有其他一些 BUG 修复。</p><p>详细的发行注记可以查看 <a href="https://github.com/prometheus/prometheus/releases/tag/v2.16.0" target="_blank" rel="noopener">release notes</a> 。</p><h1 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h1><ul><li><a href="https://www.robustperception.io/new-features-in-prometheus-2-16-0" target="_blank" rel="noopener">https://www.robustperception.io/new-features-in-prometheus-2-16-0</a> ， By Brian Brazil</li><li><a href="https://github.com/prometheus/prometheus/releases/tag/v2.16.0" target="_blank" rel="noopener">https://github.com/prometheus/prometheus/releases/tag/v2.16.0</a> ，By prombot of GitHub </li></ul><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Prometheus &lt;a href=&quot;https://github.com/prometheus/prometheus/releases/tag/v2.16.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2.16.0&lt;/a&gt; 现在(2020.02.13)已经发布，在上个月的 &lt;a href=&quot;http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-15-0.html&quot;&gt;2.15.0&lt;/a&gt; 之后又进行了一些修正和改进。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="New-Features" scheme="https://erdong.site/categories/Prometheus/New-Features/"/>
    
    
      <category term="Prometheus" scheme="https://erdong.site/tags/Prometheus/"/>
    
      <category term="Features" scheme="https://erdong.site/tags/Features/"/>
    
      <category term="release" scheme="https://erdong.site/tags/release/"/>
    
  </entry>
  
  <entry>
    <title>Prometheus 2.15.0 新特性</title>
    <link href="https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-15-0.html"/>
    <id>https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-15-0.html</id>
    <published>2020-05-23T14:17:11.000Z</published>
    <updated>2020-05-23T14:54:26.475Z</updated>
    
    <content type="html"><![CDATA[<p> <a href="https://github.com/prometheus/prometheus/releases/tag/v2.15.0" target="_blank" rel="noopener">2.15.0</a> 现在(2019.12.23)已经发布，在上个月的 <a href="http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-14-0.html">2.14.0</a> 之后又进行了一些修正和改进。</p><a id="more"></a><p>这个版本最大的改进是对块（block）和内存使用的压缩进行了优化，块不再将所有的 symbol/postings 放在对上，并且压缩过程也不将他们长期放在内存。比较显著的效果是减少了具有高基数/搅动的系统的内存使用量，压缩内存峰值现在基本上应该消失了。因为这是典型的RAM与CPU之间的折衷，所以压缩会慢一些。在WAL replay(即启动时间)方面也有了性能上的改进，并且WAL占用的空间现在可以基于存储空间大小进行保留，删除超出的数据。</p><p>有一个新的 Metric prometheus_sd_kubernetes_cache_* 已经被删除，</p><p>PromQL解析器的性能也得到了一些改进。</p><p>React UI的工作也在继续。实现了一些缺少的页面，比如 /targets , TSDB 的状态页面，以及其他的 fix 修复和性能提升。</p><p>在 API 方面，新增了 /metadata 接口，用来公开 metadata 数据。</p><p>在 v2.15.1 中修正了对相同数据的并发查询竞争的 Bug。<br>在 v2.15.2 中支持 Prometheus v2.1.0 之前的 TSDB block ；修复了 Windows 上的块压缩问题。</p><p>详细的发行注记可以查看 <a href="https://github.com/prometheus/prometheus/releases/tag/v2.15.0" target="_blank" rel="noopener">release notes</a> 。</p><h1 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h1><ul><li><a href="https://www.robustperception.io/new-features-in-prometheus-2-15-0" target="_blank" rel="noopener">https://www.robustperception.io/new-features-in-prometheus-2-15-0</a> ， By Brian Brazil</li><li><a href="https://github.com/prometheus/prometheus/releases/tag/v2.15.0" target="_blank" rel="noopener">https://github.com/prometheus/prometheus/releases/tag/v2.15.0</a> ，By prombot of GitHub  <a href="https://github.com/prometheus/prometheus/releases/tag/v2.14.0" target="_blank" rel="noopener">https://github.com/prometheus/prometheus/releases/tag/v2.14.0</a> ，By prombot of GitHub </li></ul><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt; &lt;a href=&quot;https://github.com/prometheus/prometheus/releases/tag/v2.15.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2.15.0&lt;/a&gt; 现在(2019.12.23)已经发布，在上个月的 &lt;a href=&quot;http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-14-0.html&quot;&gt;2.14.0&lt;/a&gt; 之后又进行了一些修正和改进。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="New-Features" scheme="https://erdong.site/categories/Prometheus/New-Features/"/>
    
    
      <category term="Prometheus" scheme="https://erdong.site/tags/Prometheus/"/>
    
      <category term="Features" scheme="https://erdong.site/tags/Features/"/>
    
      <category term="release" scheme="https://erdong.site/tags/release/"/>
    
  </entry>
  
  <entry>
    <title>攻城狮周刊：第44期</title>
    <link href="https://erdong.site/weekly/weekly44.html"/>
    <id>https://erdong.site/weekly/weekly44.html</id>
    <published>2020-05-23T07:16:59.000Z</published>
    <updated>2020-05-23T14:50:28.034Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="新闻"><a href="#新闻" class="headerlink" title="新闻"></a>新闻</h1><h2 id="1-CentOS-8-1-1911"><a href="#1-CentOS-8-1-1911" class="headerlink" title="1. CentOS 8.1 1911"></a>1. <a href="https://www.oschina.net/news/112846/centos-8-1-1911-released" target="_blank" rel="noopener">CentOS 8.1 1911</a></h2><p>CentOS 8.1 版本已经发布了。</p><h1 id="教程"><a href="#教程" class="headerlink" title="教程"></a>教程</h1><h2 id="1-leetcode-前-300-题"><a href="#1-leetcode-前-300-题" class="headerlink" title="1. leetcode 前 300 题"></a>1. <a href="https://leetcode.wang" target="_blank" rel="noopener">leetcode 前 300 题</a></h2><p>Leetcode 前 300 题，作者 wind-liang 对每道都进行了详细通俗的分析，并且提供多种思路解法.</p><h2 id="2-Go-语言示例教程"><a href="#2-Go-语言示例教程" class="headerlink" title="2. Go 语言示例教程"></a>2. <a href="https://github.com/inancgumus/learngo" target="_blank" rel="noopener">Go 语言示例教程</a></h2><p>该仓库是一个 Go 语言初学者教程的示例库，收集了1000多个示例、练习和问题。</p><h1 id="工具"><a href="#工具" class="headerlink" title="工具"></a>工具</h1><h2 id="1-spug"><a href="#1-spug" class="headerlink" title="1. spug"></a>1. <a href="https://github.com/openspug/spug" target="_blank" rel="noopener">spug</a></h2><p>开源运维平台：面向中小型企业设计的轻量级无Agent的自动化运维平台，整合了主机管理、主机批量执行、主机在线终端、应用发布部署、在线任务计划、配置中心、监控、报警等一系列功能。 <a href="https://spug.dev" target="_blank" rel="noopener">https://spug.dev</a></p><h2 id="2-NGINX-Config"><a href="#2-NGINX-Config" class="headerlink" title="2. NGINX Config"></a>2. <a href="https://www.digitalocean.com/community/tools/nginx" target="_blank" rel="noopener">NGINX Config</a></h2><p>Nginx 的图形配置界面，点几下鼠标，自动生成配置文件，可以上传到服务器。</p><h1 id="资源"><a href="#资源" class="headerlink" title="资源"></a>资源</h1><h2 id="1-阿里云云原生应用"><a href="#1-阿里云云原生应用" class="headerlink" title="1. 阿里云云原生应用"></a>1. <a href="https://github.com/cloudnativeapp" target="_blank" rel="noopener">阿里云云原生应用</a></h2><p>该组织是阿里云开发者社区维护的，有部分内容由阿里云提供。有一些参考价值。</p><h1 id="杂谈"><a href="#杂谈" class="headerlink" title="杂谈"></a>杂谈</h1><h2 id="1-开源程序员主题相声"><a href="#1-开源程序员主题相声" class="headerlink" title="1. 开源程序员主题相声"></a>1. <a href="https://github.com/koolob/programmer-crosstalk" target="_blank" rel="noopener">开源程序员主题相声</a></h2><p>有点意思，无聊的时候可以看看，或者表演节目的时候可以用上。</p><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复&gt;。<br>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
      <category term="weekly" scheme="https://erdong.site/tags/weekly/"/>
    
  </entry>
  
  <entry>
    <title>Prometheus 删除指定 Metric</title>
    <link href="https://erdong.site/Prometheus/guide/prometheus-delete-metrics.html"/>
    <id>https://erdong.site/Prometheus/guide/prometheus-delete-metrics.html</id>
    <published>2020-01-12T14:52:50.000Z</published>
    <updated>2022-07-21T05:48:14.014Z</updated>
    
    <content type="html"><![CDATA[<p>Prometheus 发布以后，很长的一段时间里，是无法删除指定的 Metric 。如果你在某次测试中，有一些 Metric 的名称或者值有问题，那么你没有任何办法及时处理，只能等待数据的时间到了以后自动删除。我一度以为直到现在也是这样，最近在翻看 Prometheus 的官方文档的时候发现，Prometheus 在 2.0 版本以后已经提供了一个简单的管理接口，可以用来删除这些坏 Metric 数据。</p><a id="more"></a><p>下面我们来一起看一下 Prometheus 的管理 API 接口，官方到现在一共提供了三个接口，对应的分别是快照功能、数据删除功能、数据清理功能，想要使用 API 需要先添加启动参数 <code>--web.enable-admin-api</code> 打开这个接口，默认这个接口是关闭的。</p><p>快速启动 Prometheus 可以使用如下命令 ，详细规范的启动方式可以参考之前的文章。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">.&#x2F;prometheus --web.enable-admin-api</span><br></pre></td></tr></table></figure><h1 id="数据删除"><a href="#数据删除" class="headerlink" title="数据删除"></a>数据删除</h1><p>使用数据删除接口可以删除一定时间范围内的 Metric 数据。实际的数据仍然存在于磁盘上，并在将来的压缩中清除，也可以通过数据清理接口显式地清除。</p><p>如果删除成功，会返回 204 。接口如下：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">POST &#x2F;api&#x2F;v1&#x2F;admin&#x2F;tsdb&#x2F;delete_series</span><br><span class="line">PUT &#x2F;api&#x2F;v1&#x2F;admin&#x2F;tsdb&#x2F;delete_series</span><br></pre></td></tr></table></figure><p>这个接口可以使用 3 个参数，分别如下：</p><ul><li>match[]=<series_selector> : Metric 的名称</li><li>start=&lt;rfc3339 | unix_timestamp&gt; : 开始的时间戳</li><li>end=&lt;rfc3339 | unix_timestamp&gt;  : 结束的时间戳</li></ul><p>如果没有指定开始和结束时间将清除数据库中匹配的所有数据。</p><p>接下来举几个例子</p><p> 删除指定 Metric 名称的全部数据</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curl -X POST -g &#39;http:&#x2F;&#x2F;127.0.0.1:9090&#x2F;api&#x2F;v1&#x2F;admin&#x2F;tsdb&#x2F;delete_series?match[]&#x3D;node_cpu_seconds_total&#39;</span><br></pre></td></tr></table></figure><p>删除指定 Metric 名称和特定 label 名称的全部数据</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curl -X POST -g &#39;http:&#x2F;&#x2F;127.0.0.1:9090&#x2F;api&#x2F;v1&#x2F;admin&#x2F;tsdb&#x2F;delete_series?match[]&#x3D;node_cpu_seconds_total&#123;mode&#x3D;&quot;idle&quot;&#125;&#39;</span><br></pre></td></tr></table></figure><p>删除指定时间范围内的 Metric 数据</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curl -X POST -g &#39;http:&#x2F;&#x2F;127.0.0.1:9090&#x2F;api&#x2F;v1&#x2F;admin&#x2F;tsdb&#x2F;delete_series?start&#x3D;1578301194&amp;end&#x3D;1578301694&amp;match[]&#x3D;node_cpu_seconds_total&#123;mode&#x3D;&quot;idle&quot;&#125;&#39;</span><br></pre></td></tr></table></figure><blockquote><p>linux 可以使用 <code>date  +%s</code> 获得当前的时间戳，可以使用 <code>date -d &quot;2019-12-22 00:00:00&quot; +%s</code> 将指定的日期转成时间戳。</p></blockquote><h1 id="数据清理"><a href="#数据清理" class="headerlink" title="数据清理"></a>数据清理</h1><p>数据清理会从磁盘删除已经被 <code>delete_series</code> 接口删除的数据，并清理现有的 tombstones。可以在使用 <code>delete_series</code> 接口删除数据之后使用它来释放空间。</p><p>如果清理成功，会返回 204 。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">POST &#x2F;api&#x2F;v1&#x2F;admin&#x2F;tsdb&#x2F;clean_tombstones</span><br><span class="line">PUT &#x2F;api&#x2F;v1&#x2F;admin&#x2F;tsdb&#x2F;clean_tombstones</span><br></pre></td></tr></table></figure><p>示例</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curl -X POST http:&#x2F;&#x2F;127.0.0.1:9090&#x2F;api&#x2F;v1&#x2F;admin&#x2F;tsdb&#x2F;clean_tombstones</span><br></pre></td></tr></table></figure><p>这个接口不需要参数。</p><h1 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h1><ul><li><a href="https://prometheus.io/docs/prometheus/latest/querying/api/#tsdb-admin-apis" target="_blank" rel="noopener">https://prometheus.io/docs/prometheus/latest/querying/api/#tsdb-admin-apis</a></li></ul><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Prometheus 发布以后，很长的一段时间里，是无法删除指定的 Metric 。如果你在某次测试中，有一些 Metric 的名称或者值有问题，那么你没有任何办法及时处理，只能等待数据的时间到了以后自动删除。我一度以为直到现在也是这样，最近在翻看 Prometheus 的官方文档的时候发现，Prometheus 在 2.0 版本以后已经提供了一个简单的管理接口，可以用来删除这些坏 Metric 数据。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="guide" scheme="https://erdong.site/categories/Prometheus/guide/"/>
    
    
      <category term="Prometheus" scheme="https://erdong.site/tags/Prometheus/"/>
    
  </entry>
  
  <entry>
    <title>攻城狮周刊：第43期</title>
    <link href="https://erdong.site/weekly/weekly43.html"/>
    <id>https://erdong.site/weekly/weekly43.html</id>
    <published>2020-01-12T07:16:59.000Z</published>
    <updated>2020-01-12T14:51:09.364Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="工具"><a href="#工具" class="headerlink" title="工具"></a>工具</h1><h2 id="1-dockerfile-lint"><a href="#1-dockerfile-lint" class="headerlink" title="1. dockerfile_lint"></a>1. <a href="https://github.com/projectatomic/dockerfile_lint" target="_blank" rel="noopener">dockerfile_lint</a></h2><p>截止到2019年12月底，社区比较出色的dockerfile扫描工具有：hadolint、dockerlint和红帽推出的dockerfile_lint。总体上来说这三个工具其实都不完善，基本上处于alpha之前的状态。</p><p>hadolint是目前为止成熟最高的一个工具，一共支持60多条的自带规则。而且hadolint还支持对Run命令中带的shell命令进行审计。这一点功能是目前其他竞品不具备的。不过hadolint使用Haskell语言编写，且目前不支持规则文件导入。<br>如果有新的规则需要编程实现。<br>dockerlint 使用coffee_script语言编写，自带规则数量小于hadolint；也不支持规则文件导入功能。<br>dockerfile_lint 红帽发布，使用node.js编写的一个dockerfile扫描工具。支持的规则数量小于hadolint，但是支持通过yaml文件方式导入用户自定义规则。</p><p>从以上分析来看，我认为dockerfile_lint其实更具潜力，因为dockerfile扫描规则其实是不固定的。每个用户都可以有自己的dockerfile扫描规范，所以通过脚本添加规则其实是一种刚需。 hadolint和dockerlint恰恰不具备这个能力，所以我最终选择了dockerfile_lint作为扫描工具。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
      <category term="weekly" scheme="https://erdong.site/tags/weekly/"/>
    
  </entry>
  
  <entry>
    <title>攻城狮周刊：第42期</title>
    <link href="https://erdong.site/weekly/weekly42.html"/>
    <id>https://erdong.site/weekly/weekly42.html</id>
    <published>2019-12-29T07:16:59.000Z</published>
    <updated>2019-12-29T15:37:02.105Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="新闻"><a href="#新闻" class="headerlink" title="新闻"></a>新闻</h1><h1 id="资源"><a href="#资源" class="headerlink" title="资源"></a>资源</h1><h2 id="1-chinese-poetry"><a href="#1-chinese-poetry" class="headerlink" title="1. chinese poetry"></a>1. <a href="https://github.com/chinese-poetry/chinese-poetry" target="_blank" rel="noopener">chinese poetry</a></h2><p>中文古诗的一个仓库，据作者介绍，唐宋两朝近一万四千古诗人, 接近5.5万首唐诗加26万宋诗. 两宋时期1564位词人，21050首词。 </p><h1 id="这么全的话用来做深度学习可能不错。"><a href="#这么全的话用来做深度学习可能不错。" class="headerlink" title="这么全的话用来做深度学习可能不错。"></a>这么全的话用来做深度学习可能不错。</h1><p>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
      <category term="weekly" scheme="https://erdong.site/tags/weekly/"/>
    
  </entry>
  
  <entry>
    <title>攻城狮周刊：第41期</title>
    <link href="https://erdong.site/weekly/weekly41.html"/>
    <id>https://erdong.site/weekly/weekly41.html</id>
    <published>2019-12-22T05:16:59.000Z</published>
    <updated>2019-12-22T15:04:14.249Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="新闻"><a href="#新闻" class="headerlink" title="新闻"></a>新闻</h1><h2 id="1-文言文編程語言"><a href="#1-文言文編程語言" class="headerlink" title="1. 文言文編程語言"></a>1. <a href="https://github.com/LingDong-/wenyan-lang" target="_blank" rel="noopener">文言文編程語言</a></h2><p>作者 LingDong-Huang，卡耐基梅隆大学大三学生，编写了该项目，仓库的 README 中有演示地址，有 IDE 支持，有在线体验网址。</p><h1 id="资源"><a href="#资源" class="headerlink" title="资源"></a>资源</h1><h2 id="1-图解-HTTP"><a href="#1-图解-HTTP" class="headerlink" title="1. 图解 HTTP"></a>1. <a href="https://item.jd.com/11449491.html?dist=jd" target="_blank" rel="noopener">图解 HTTP</a></h2><p>《图灵程序设计丛书：图解HTTP》对 HTTP 协议进行了全面系统的介绍。作者由HTTP 协议的发展历史娓娓道来，严谨细致地剖析了HTTP协议的结构，列举诸多常见通信场景及实战案例，最后延伸到Web安全、全新技术动向等方面。《图解HTTP》的特色为在讲解的同时，辅以大量生动形象的通信图例，更好地帮助读者深刻理解 HTTP 通信过程中客户端与服务器之间的交互情况。读者可通过《图灵程序设计丛书：图解 HTTP》快速了解并掌握 HTTP 协议的基础，前端工程师分析抓包数据，后端工程师实现 REST API、实现自己的 HTTP 服务器等过程中所需的 HTTP 相关知识点本书均有介绍。<br>　　《图灵程序设计丛书：图解HTTP》适合 Web 开发工程师，以及对 HTTP 协议感兴趣的各层次读者。<br>　　该书作者是上野·宣 ，OWASP 日本分会会长，TRICORDER株式会社董事长。主要从事安全咨询、风险评估、信息安全教育等工作。著有《今晚我们一起学习邮件协议》（今夜わかるメールプロトコル）、《今晚我们一起学习TCP/IP》（今夜わかるTCP/IP）、《今晚我们一起学习HTTP》（今夜わかるHTTP）。担任The Tangled Web：A Guide to Securing Modern Web Application日文版的审校工作。<br>　　<br>　　于均良（译者），上海交通大学硕士，高级软件工程师，马拉松跑者，四点网创始人。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
      <category term="weekly" scheme="https://erdong.site/tags/weekly/"/>
    
  </entry>
  
  <entry>
    <title>攻城狮周刊：第40期</title>
    <link href="https://erdong.site/weekly/weekly40.html"/>
    <id>https://erdong.site/weekly/weekly40.html</id>
    <published>2019-12-15T05:16:59.000Z</published>
    <updated>2019-12-22T15:04:50.460Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="资源"><a href="#资源" class="headerlink" title="资源"></a>资源</h1><h2 id="1-Mozilla-HTTP教程"><a href="#1-Mozilla-HTTP教程" class="headerlink" title="1. Mozilla HTTP教程"></a>1. <a href="https://developer.mozilla.org/zh-CN/docs/Web/HTTP" target="_blank" rel="noopener">Mozilla HTTP教程</a></h2><p>MDN Web Docs 是一个提供的 HTTP 教程，比较详细。</p><h2 id="2-Mozilla-Developer-Network"><a href="#2-Mozilla-Developer-Network" class="headerlink" title="2. Mozilla Developer Network"></a>2. <a href="https://developer.mozilla.org/zh-CN/" target="_blank" rel="noopener">Mozilla Developer Network</a></h2><p>MDN Web Docs 是一个提供 Web 技术和促进 Web 技术软件的不断发展的学习平台，包括：</p><ul><li>Web 标准（例如：CSS、HTML 和 JavaScript）</li><li>开放 Web 应用开发</li><li>Firefox 附加组件开发</li></ul><p>Mozilla 开发者网络（亦称作 Mozilla 开发者中心（MDC）或 Devmo）在2005年年初启动。那时 Mozilla 基金会 从 AOL 获得了许可协议，得以使用原创的 DevEdge 内容。DevEdge 内容的引入具有抛砖引玉之效，因此在那不久在社区志愿者的努力下它被迁移到了这个更易于更新与维护的 wiki 。</p><p>此后，这个项目不断发展，现在已经成为所有与关于 Mozilla 项目和开放网络技术的文档的核心一环。在2010年，该项目更名为Mozilla开发者网络（Mozilla Developer Network）。2011年，又添加了供web开发者分享与展示代码的 Demo Studio 与提供教程的 Learning 页面。（MDC 现在表示了”MDN文档中心（MDN Doc Center）”）现在，Mozilla开发者网络正向着成为供Web设计师、应用开发者、以及拓展、主题制作者们时常参考的资源的方向发展。</p><p>MDN 的使命很简单：为开发人员提供在开放的 Web 网络上轻松构建项目所必需的信息。如果它是一种暴露于 Web 网络上的开放技术，我们希望将其记录下来。</p><h2 id="3-面向信仰编程"><a href="#3-面向信仰编程" class="headerlink" title="3. 面向信仰编程"></a>3. <a href="https://draveness.me/" target="_blank" rel="noopener">面向信仰编程</a></h2><p>给 kubernetes 提交 pr 的大神的博客，里边有很多设计相关的内容，值得查看思考。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
      <category term="weekly" scheme="https://erdong.site/tags/weekly/"/>
    
  </entry>
  
  <entry>
    <title>攻城狮周刊：第39期</title>
    <link href="https://erdong.site/weekly/weekly39.html"/>
    <id>https://erdong.site/weekly/weekly39.html</id>
    <published>2019-12-08T05:16:59.000Z</published>
    <updated>2019-12-08T15:55:49.580Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="工具"><a href="#工具" class="headerlink" title="工具"></a>工具</h1><h2 id="1-根域名服务"><a href="#1-根域名服务" class="headerlink" title="1. 根域名服务"></a>1. <a href="https://root-servers.org" target="_blank" rel="noopener">根域名服务</a></h2><p>根域名服务相关的一些内容，比如 12 个运营服务商，13 个根域名服务，到 2019.12.06 共计有 1202 个根域名服务器。</p><h2 id="2-IANA"><a href="#2-IANA" class="headerlink" title="2. IANA"></a>2. <a href="https://www.iana.org" target="_blank" rel="noopener">IANA</a></h2><p>DNS根、IP寻址和其他 Internet 协议资源的全球协调是 IANA 来执行的。</p><h1 id="资源"><a href="#资源" class="headerlink" title="资源"></a>资源</h1><h2 id="1-云厂商官方文档汇总"><a href="#1-云厂商官方文档汇总" class="headerlink" title="1. 云厂商官方文档汇总"></a>1. <a href="">云厂商官方文档汇总</a></h2><p>云计算领域一些比较常用的工具和概念在云厂商的官方文档里都有介绍，可以当做快速入门的参考手册。<br>AWS： <a href="https://docs.aws.amazon.com">https://docs.aws.amazon.com</a><br>微乳云： <a href="https://docs.microsoft.com/zh-cn/azure/" target="_blank" rel="noopener">https://docs.microsoft.com/zh-cn/azure/</a><br>阿里云： <a href="https://help.aliyun.com" target="_blank" rel="noopener">https://help.aliyun.com</a><br>腾讯云： <a href="https://cloud.tencent.com/document/product" target="_blank" rel="noopener">https://cloud.tencent.com/document/product</a><br>华为云： <a href="https://support.huaweicloud.com/index.html" target="_blank" rel="noopener">https://support.huaweicloud.com/index.html</a></p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
      <category term="weekly" scheme="https://erdong.site/tags/weekly/"/>
    
  </entry>
  
  <entry>
    <title>发布一本用 GitBook 编辑的书</title>
    <link href="https://erdong.site/gitbook/gitbook-release-book.html"/>
    <id>https://erdong.site/gitbook/gitbook-release-book.html</id>
    <published>2019-12-01T15:12:40.000Z</published>
    <updated>2019-12-02T15:16:50.371Z</updated>
    
    <content type="html"><![CDATA[<p>在上一篇的文章里，我们已经写好了一本名叫 <code>erdong-first-book</code> 的书，但是在本地浏览很不方便，我们希望放到网络上，可以随时、方便的访问这个书籍。这个需求可以使用多种方式来实现，比如第一种，可以通过 GitBook 官网来发布这本书，GitBook 除了是一个电子书的工具以为，自身也有一个网址，在该网站注册成为会员后，可以发布自己的电子书，并且可以和 GitHub 进行关联。</p><p>除了使用 GitBook 官网以外，可以直接将电子书放在 GitHub 上，通过 GitHub Pages 来发布这本书。</p><a id="more"></a><h1 id="使用-GitHub-发布你的书籍"><a href="#使用-GitHub-发布你的书籍" class="headerlink" title="使用 GitHub 发布你的书籍"></a>使用 GitHub 发布你的书籍</h1><p>接下来我们看一下如何使用 GitHub Pages 来发布一本书。</p><p>首先你需要一个 GitHub 的账号，在你的账号下创建一个用来放置你书籍的仓库，这两个步骤在网络上有太多的资料，很容易就可以达成了。</p><p>创建好仓库以后，在仓库中创建一个 docs 文件夹，用来放置 GitBook 生成的静态文件。</p><p>打开 GitHub 仓库的设置页面，找到 GitHub Pages 选项，选择 <code>master branch /docs folder</code> 选项即可。</p><blockquote><p>注意：一定要先在仓库中创建 docs 文件夹，否则无法勾选该选项。</p></blockquote><p><img src="https://image.erdong.site/blog/2019/10/18/githubpagesdocs.jpg" alt="GithubPagesDocs"></p><p>做完上述步骤以后开始使用 Git 上传你写好的内容到 GitHub , 关键点是将 GitBook 生成的静态文件 <code>_book</code> 重命名为 <code>docs</code> 上传替换刚才创建的 docs 文件夹即可。</p><p>这个时候使用浏览器打开  <a href="http://your_github_id.github.io/your_github_gitbook" target="_blank" rel="noopener">http://your_github_id.github.io/your_github_gitbook</a>  这个地址即可。比如我的 GitBook 地址是<br> <a href="http://erdong.github.io/gitbook-notes-samples" target="_blank" rel="noopener">http://erdong.github.io/gitbook-notes-samples</a> ，大家在点击以后发现会自动跳转到 <a href="https://erdong.site/gitbook-notes-samples">https://erdong.site/gitbook-notes-samples</a>  是因为我做了域名绑定。</p><h1 id="本地-GitBook-迁移"><a href="#本地-GitBook-迁移" class="headerlink" title="本地 GitBook 迁移"></a>本地 GitBook 迁移</h1><p>在迁移前可以使用如下命令查看一下曾经使用 npm 安装过什么模块</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm list -g --depth 0</span><br></pre></td></tr></table></figure><ul><li>list : 已经安装的 node 包</li><li>-g ： 全局的安装包</li><li>–depth : 包的显示层级，0 代表显示第一级的包，数字越大，显示的越全。</li></ul><p>迁移其实非常简单，你在原来的环境将整本书打包，最好把文件夹里的node_modules 目录也一起打包，这样在新的环境就不需要安装这些组件了。在新的环境按照如下顺序依次进行安装你之前安装过的组件</p><p>&lt; 1.&gt; 安装 npm<br>&lt; 2.&gt; 安装 gitbook<br>&lt; 3.&gt; 拷贝打包好的文件夹<br>&lt; 4.&gt; 减压到新的位置</p><p>这样就完成了你的书的迁移。你在新的位置可以继续进行内容的编写、静态文件的生成，和之前一样，没有任何区别。</p><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;在上一篇的文章里，我们已经写好了一本名叫 &lt;code&gt;erdong-first-book&lt;/code&gt; 的书，但是在本地浏览很不方便，我们希望放到网络上，可以随时、方便的访问这个书籍。这个需求可以使用多种方式来实现，比如第一种，可以通过 GitBook 官网来发布这本书，GitBook 除了是一个电子书的工具以为，自身也有一个网址，在该网站注册成为会员后，可以发布自己的电子书，并且可以和 GitHub 进行关联。&lt;/p&gt;
&lt;p&gt;除了使用 GitBook 官网以外，可以直接将电子书放在 GitHub 上，通过 GitHub Pages 来发布这本书。&lt;/p&gt;
    
    </summary>
    
    
      <category term="gitbook" scheme="https://erdong.site/categories/gitbook/"/>
    
    
      <category term="gitbook" scheme="https://erdong.site/tags/gitbook/"/>
    
  </entry>
  
  <entry>
    <title>用 GitBook 创建一本书</title>
    <link href="https://erdong.site/gitbook/gitbook-create-book.html"/>
    <id>https://erdong.site/gitbook/gitbook-create-book.html</id>
    <published>2019-12-01T15:12:28.000Z</published>
    <updated>2019-12-02T15:14:50.438Z</updated>
    
    <content type="html"><![CDATA[<h1 id="用-GitBook-创建一本书"><a href="#用-GitBook-创建一本书" class="headerlink" title="用 GitBook 创建一本书"></a>用 GitBook 创建一本书</h1><p>gitbook 首先是一个软件，它使用 Git 和 Markdown 来编排书本，如果你没有听过 Git 和 Markdown，那么 gitbook 可能不适合你直接入手，你需要先去学习 Git 和 Markdown。Git 是一个版本控制工具，Markdown 是一个文本编辑语法，基本的使用大概几个小时就可以都学会了，并不复杂。</p><a id="more"></a><p>这是 gitbook 项目主页上对 gitbook 的定义。</p><blockquote><p>Modern book format and toolchain using Git and Markdown .</p></blockquote><h1 id="安装-GitBook"><a href="#安装-GitBook" class="headerlink" title="安装 GitBook"></a>安装 GitBook</h1><p>首先需要安装 nodejs，以便能够使用 npm 来安装 gitbook</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">$ wget -qO- https:&#x2F;&#x2F;raw.github.com&#x2F;creationix&#x2F;nvm&#x2F;v0.33.11&#x2F;install.sh | sh</span><br><span class="line">&#96;&#96;&#96; </span><br><span class="line"></span><br><span class="line">该命令会安装 nvm 命令，安装好以后会添加 nvm 的环境变量到 &#96;.bashrc&#96; 文件里，接下来退出终端，重新登陆使得 &#96;.bashrc&#96; 文件生效，或者使用其他方法使添加的环境变量生效。</span><br><span class="line">   </span><br><span class="line">接下来使用下列命令来安装 npm </span><br><span class="line"></span><br><span class="line">&#96;&#96;&#96;   </span><br><span class="line">$ nvm install stable</span><br></pre></td></tr></table></figure><p>可以使用下列命令来查看 npm 的版本，比如我这次安装的是 6.11.3 版本。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[erdong@testhost ~]$ npm --version</span><br><span class="line">6.11.3</span><br><span class="line">[erdong@testhost ~]$</span><br></pre></td></tr></table></figure><p>接下来使用 npm 来安装 gitbook</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ npm install gitbook-cli -g</span><br></pre></td></tr></table></figure><h1 id="创建第一本书"><a href="#创建第一本书" class="headerlink" title="创建第一本书"></a>创建第一本书</h1><p>首先新建一个目录，这个目录就是这本书的一个载体，就好比在现实世界里你要先准备一个本子，以后所有的内容会写在这个本子上。在 gitbook，我们以后所有的内容都会存放在这个目录里。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ mkdir erdong-first-book</span><br></pre></td></tr></table></figure><p>接下来我们初始化这个目录，就好比你在你准备的本子上做一些基本的工作，</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">[erdong@testhost ~]$ cd erdong-first-book</span><br><span class="line">[erdong@testhost erdong-first-book]$ gitbook init</span><br><span class="line">[erdong@testhost erdong-first-book]$ ls</span><br><span class="line">README.md  SUMMARY.md</span><br></pre></td></tr></table></figure><p>初始化过后，在这个文件夹会生成 2 个文件，<code>README.md</code> 和 <code>SUMMARY.md</code> 。</p><ul><li>README.md ： 是书的简单介绍，类似于一本书的序或者前言部分。</li><li>SUMMARY.md ： 是书的目录，程序按照这个文件来生成书的结构。</li></ul><p>初始化结束后，就可以写东西了，</p><p>比如我们现在往这两个文件里写入以下内容，在 README.md 文件中我们写入如下内容：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"># Introduction</span><br><span class="line"></span><br><span class="line">This erdong&#39;s first book</span><br><span class="line"></span><br><span class="line">This a samples in GitHub, https:&#x2F;&#x2F;github.com&#x2F;erdong&#x2F;gitbook-notes-samples</span><br></pre></td></tr></table></figure><p>在 SUMMARY.md  文件中写入如下内容：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"># Summary</span><br><span class="line"></span><br><span class="line">* [Introduction](README.md)</span><br><span class="line"></span><br><span class="line">* [Part I]()</span><br><span class="line">* [Part II]()</span><br><span class="line">* [Part III]()</span><br></pre></td></tr></table></figure><p>写入内容后，我们可以通过 <code>gitbook serve</code> 命令来预览我们写的书</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line">[erdong@testhost erdong-first-book]$ gitbook serve</span><br><span class="line">Live reload server started on port: 35729</span><br><span class="line">Press CTRL+C to quit ...</span><br><span class="line"></span><br><span class="line">info: 7 plugins are installed</span><br><span class="line">info: loading plugin &quot;livereload&quot;... OK</span><br><span class="line">info: loading plugin &quot;highlight&quot;... OK</span><br><span class="line">info: loading plugin &quot;search&quot;... OK</span><br><span class="line">info: loading plugin &quot;lunr&quot;... OK</span><br><span class="line">info: loading plugin &quot;sharing&quot;... OK</span><br><span class="line">info: loading plugin &quot;fontsettings&quot;... OK</span><br><span class="line">info: loading plugin &quot;theme-default&quot;... OK</span><br><span class="line">info: found 1 pages</span><br><span class="line">info: found 0 asset files</span><br><span class="line">info: &gt;&gt; generation finished with success in 0.5s !</span><br><span class="line"></span><br><span class="line">Starting server ...</span><br><span class="line">Serving book on http:&#x2F;&#x2F;localhost:4000</span><br></pre></td></tr></table></figure><p>这样会在前台运行一个 web 程序，对外以 4000 端口提供一个可以浏览的页面，浏览的地址是 <a href="http://localhost:4000" target="_blank" rel="noopener">http://localhost:4000</a> ，</p><p>这样我们就可以查看我们写好的书了。如下图所示。</p><p><img src="https://image.erdong.site/blog/2019/10/16/gitbookintroduction.jpg" alt="Gitbook Introduction"></p><p>如果我们不想使用这种方式来预览书籍的话，也可以用 gitbook 生成一份静态的页面，放在 web 服务器或者其他可以提供 web 浏览访问的地方。生成静态页面使用 <code>gitbook build</code> 命令即可，会生成一个 <code>_book</code> 的文件夹，这个目录里放的就是生成好的静态页面，拷贝到对应的目录即可。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">[erdong@testhost erdong-first-book]$ gitbook build </span><br><span class="line">info: 7 plugins are installed</span><br><span class="line">info: 6 explicitly listed</span><br><span class="line">info: loading plugin &quot;highlight&quot;... OK</span><br><span class="line">info: loading plugin &quot;search&quot;... OK</span><br><span class="line">info: loading plugin &quot;lunr&quot;... OK</span><br><span class="line">info: loading plugin &quot;sharing&quot;... OK</span><br><span class="line">info: loading plugin &quot;fontsettings&quot;... OK</span><br><span class="line">info: loading plugin &quot;theme-default&quot;... OK</span><br><span class="line">info: found 1 pages</span><br><span class="line">info: found 0 asset files</span><br><span class="line">info: &gt;&gt; generation finished with success in 0.5s !</span><br><span class="line">[erdong@testhost erdong-first-book]$</span><br></pre></td></tr></table></figure><h1 id="小结"><a href="#小结" class="headerlink" title="小结"></a>小结</h1><p>这样，我们就通过 GitBook 工具写了一本书，或者一个小册子。</p><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;h1 id=&quot;用-GitBook-创建一本书&quot;&gt;&lt;a href=&quot;#用-GitBook-创建一本书&quot; class=&quot;headerlink&quot; title=&quot;用 GitBook 创建一本书&quot;&gt;&lt;/a&gt;用 GitBook 创建一本书&lt;/h1&gt;&lt;p&gt;gitbook 首先是一个软件，它使用 Git 和 Markdown 来编排书本，如果你没有听过 Git 和 Markdown，那么 gitbook 可能不适合你直接入手，你需要先去学习 Git 和 Markdown。Git 是一个版本控制工具，Markdown 是一个文本编辑语法，基本的使用大概几个小时就可以都学会了，并不复杂。&lt;/p&gt;
    
    </summary>
    
    
      <category term="gitbook" scheme="https://erdong.site/categories/gitbook/"/>
    
    
      <category term="gitbook" scheme="https://erdong.site/tags/gitbook/"/>
    
  </entry>
  
  <entry>
    <title>攻城狮周刊：第38期</title>
    <link href="https://erdong.site/weekly/weekly38.html"/>
    <id>https://erdong.site/weekly/weekly38.html</id>
    <published>2019-12-01T05:16:59.000Z</published>
    <updated>2019-12-02T15:11:26.277Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="新闻"><a href="#新闻" class="headerlink" title="新闻"></a>新闻</h1><h2 id="1-IPv4地址耗尽"><a href="#1-IPv4地址耗尽" class="headerlink" title="1. IPv4地址耗尽"></a>1. <a href="http://cn.chinadaily.com.cn/a/201911/29/WS5de0d9d8a31099ab995eecc7.html" target="_blank" rel="noopener">IPv4地址耗尽</a></h2><p>就在 2019/11/25 UTC+1 15:35 时，一封来自欧洲 RIPE  NCC 的邮件中得到确认：全球的IPv4地址已经彻底耗尽。</p><h1 id="工具"><a href="#工具" class="headerlink" title="工具"></a>工具</h1><h2 id="1-Apollo-分布式配置中心"><a href="#1-Apollo-分布式配置中心" class="headerlink" title="1. Apollo 分布式配置中心"></a>1. <a href="https://github.com/ctripcorp/apollo" target="_blank" rel="noopener">Apollo 分布式配置中心</a></h2><p>携程开发的分布式配置中心。能够集中化管理应用不同环境、不同集群的配置，配置修改后能够实时推送到应用端，并且具备规范的权限、流程治理等特性，适用于微服务配置管理场景。</p><p>已经有很多人在用了很久了，最近使用了几个月，感受很好。</p><h2 id="2-Dragonwell"><a href="#2-Dragonwell" class="headerlink" title="2. Dragonwell"></a>2. <a href="https://github.com/alibaba/dragonwell8" target="_blank" rel="noopener">Dragonwell</a></h2><p>阿里巴巴的免费OpenJDK发行版.</p><ul><li>2019-03, 项目开源，8.0 preview版本 </li><li>2019-07, 8.0.0-GA版本, JWarmUp, JFR, RAS </li><li>2019-09, 8.0.1 版本, ElasticHeap<h1 id="资源"><a href="#资源" class="headerlink" title="资源"></a>资源</h1></li></ul><h2 id="1-《Go语言高级编程》"><a href="#1-《Go语言高级编程》" class="headerlink" title="1. 《Go语言高级编程》"></a>1. <a href="https://github.com/chai2010/advanced-go-programming-book" target="_blank" rel="noopener">《Go语言高级编程》</a></h2><p>《Go语言高级编程》开源图书，涵盖CGO、Go汇编语言、RPC实现、Protobuf插件实现、Web框架实现、分布式系统等高阶主题</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
      <category term="weekly" scheme="https://erdong.site/tags/weekly/"/>
    
  </entry>
  
  <entry>
    <title>攻城狮周刊：第37期</title>
    <link href="https://erdong.site/weekly/weekly37.html"/>
    <id>https://erdong.site/weekly/weekly37.html</id>
    <published>2019-11-24T05:16:59.000Z</published>
    <updated>2019-11-23T09:44:22.555Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="新闻"><a href="#新闻" class="headerlink" title="新闻"></a>新闻</h1><h2 id="1-国务院办公厅关于2020年部分节假日安排的通知"><a href="#1-国务院办公厅关于2020年部分节假日安排的通知" class="headerlink" title="1. 国务院办公厅关于2020年部分节假日安排的通知"></a>1. <a href="http://www.gov.cn/zhengce/content/2019-11/21/content_5454164.htm" target="_blank" rel="noopener">国务院办公厅关于2020年部分节假日安排的通知</a></h2><p>2020 年的假期安排已经发布，祝大家每个假期都开心快乐，收获满满。</p><h1 id="工具"><a href="#工具" class="headerlink" title="工具"></a>工具</h1><h2 id="1-法信"><a href="#1-法信" class="headerlink" title="1. 法信"></a>1. <a href="http://www.faxin.cn/keyword/index.aspx" target="_blank" rel="noopener">法信</a></h2><p>一个法律仓库，可以在线搜索国内的各种法律。</p><h1 id="资源"><a href="#资源" class="headerlink" title="资源"></a>资源</h1><h2 id="1-《高性能-Go-代码工坊》中译"><a href="#1-《高性能-Go-代码工坊》中译" class="headerlink" title="1. 《高性能 Go 代码工坊》中译"></a>1. <a href="https://www.yuque.com/ksco/uiondt" target="_blank" rel="noopener">《高性能 Go 代码工坊》中译</a></h2><p><a href="https://dave.cheney.net/high-performance-go-workshop/dotgo-paris.html" target="_blank" rel="noopener">原文</a>是深入研究 Go 应用性能提升的英语系列文章，这里是中译。</p><h2 id="2-容错、高可用、灾备"><a href="#2-容错、高可用、灾备" class="headerlink" title="2. 容错、高可用、灾备"></a>2. <a href="http://www.ruanyifeng.com/blog/2019/11/fault-tolerance.html" target="_blank" rel="noopener">容错、高可用、灾备</a></h2><p>简单明了的说明了这三种方式有什么区别。</p><h2 id="3-IBM-Developer"><a href="#3-IBM-Developer" class="headerlink" title="3. IBM Developer"></a>3. <a href="https://www.ibm.com/developerworks/cn/" target="_blank" rel="noopener">IBM Developer</a></h2><p>曾经叫做 developerWorks ，现在叫 IBM Developer ，是 IBM 公司提供的一个知识社区，里边有很多文章条理清晰、阅读体验良好。很适合学一写东西。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
      <category term="weekly" scheme="https://erdong.site/tags/weekly/"/>
    
  </entry>
  
  <entry>
    <title>Prometheus 2.14.0 新特性</title>
    <link href="https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-14-0.html"/>
    <id>https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-14-0.html</id>
    <published>2019-11-16T15:17:11.000Z</published>
    <updated>2019-11-23T09:31:36.743Z</updated>
    
    <content type="html"><![CDATA[<p>Prometheus <a href="https://github.com/prometheus/prometheus/releases/tag/v2.14.0" target="_blank" rel="noopener">2.14.0</a> 现在(2019.11.11)已经发布，在上个月的 <a href="http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-13-0.html">2.13.0</a> 之后又进行了一些修正和改进。</p><a id="more"></a><p>这次最大的新功能是基于 React 的新 UI，与现有 UI 大体相同。该 UI 还在持续开发中。现有的 UI 还获得了 head cardinality 统计信息。这次的更新新增了按状态进行的警报过滤。</p><p><img src="https://www.robustperception.io/wp-content/uploads/2019/11/Screenshot_2019-11-11_16-19-27.png" alt="图片来自 robustperception.io"></p><p>修复了压缩后的远程写延迟，在无法发送样本时避免重新分片等多个 BUG。</p><p>WAL 在启动加载时进行了优化。</p><p>新增了 <code>/api/vi/status/runtimeinfo</code> 和 <code>/api/v1/status/buildinfo</code> 两个接口给 React UI 使用。</p><p>详细的发行注记可以查看 <a href="https://github.com/prometheus/prometheus/releases/tag/v2.14.0" target="_blank" rel="noopener">release notes</a> 。</p><h1 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h1><ul><li><a href="https://www.robustperception.io/new-features-in-prometheus-2-14-0" target="_blank" rel="noopener">https://www.robustperception.io/new-features-in-prometheus-2-14-0</a> ， By Brian Brazil</li><li><a href="https://github.com/prometheus/prometheus/releases/tag/v2.14.0" target="_blank" rel="noopener">https://github.com/prometheus/prometheus/releases/tag/v2.14.0</a> ，By prombot of GitHub </li></ul><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Prometheus &lt;a href=&quot;https://github.com/prometheus/prometheus/releases/tag/v2.14.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2.14.0&lt;/a&gt; 现在(2019.11.11)已经发布，在上个月的 &lt;a href=&quot;http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-13-0.html&quot;&gt;2.13.0&lt;/a&gt; 之后又进行了一些修正和改进。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="New-Features" scheme="https://erdong.site/categories/Prometheus/New-Features/"/>
    
    
      <category term="Prometheus" scheme="https://erdong.site/tags/Prometheus/"/>
    
      <category term="Features" scheme="https://erdong.site/tags/Features/"/>
    
      <category term="release" scheme="https://erdong.site/tags/release/"/>
    
  </entry>
  
  <entry>
    <title>MinIO 参数解析与限制</title>
    <link href="https://erdong.site/minio/minio-parameter-and-limit.html"/>
    <id>https://erdong.site/minio/minio-parameter-and-limit.html</id>
    <published>2019-11-11T13:47:35.000Z</published>
    <updated>2019-11-11T13:48:40.069Z</updated>
    
    <content type="html"><![CDATA[<h1 id="MinIO-参数解析与限制"><a href="#MinIO-参数解析与限制" class="headerlink" title="MinIO 参数解析与限制"></a>MinIO 参数解析与限制</h1><p>MinIO server 在默认情况下会将所有配置信息存到 <code>${HOME}/.minio/config.json</code> 文件中。 以下部分提供每个字段的详细说明以及如何自定义它们。一个完整的 config.json 在 <a href="https://raw.githubusercontent.com/minio/minio/master/docs/config/config.sample.json" target="_blank" rel="noopener">这里</a></p><a id="more"></a><p>默认的配置目录是 <code>${HOME}/.minio</code>，你可以使用 <code>--config-dir</code> 选项指定新的路径覆盖默认的路径。MinIO server 在首次启动时会生成一个新的 config.json ，里面带有自动生成的访问凭据。</p><p>TLS 证书存在 <code>${HOME}/.minio/certs</code> 目录下，你需要将证书放在该目录下来启用 HTTPS 。</p><p>以下是一个带来TLS证书的MinIO server的目录结构。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">$ tree ~&#x2F;.minio</span><br><span class="line">&#x2F;home&#x2F;user1&#x2F;.minio</span><br><span class="line">├── certs</span><br><span class="line">│   ├── CAs</span><br><span class="line">│   ├── private.key</span><br><span class="line">│   └── public.crt</span><br><span class="line">└── config.json</span><br></pre></td></tr></table></figure><table><thead><tr><th>参数</th><th>类型</th><th>描述</th></tr></thead><tbody><tr><td>version</td><td>string</td><td>version决定了配置文件的格式，任何老版本都会在启动时自动迁移到新版本中。 [请勿手动修改]</td></tr><tr><td>credential</td><td></td><td>对象存储和Web访问的验证凭据。</td></tr><tr><td>credential.accessKey</td><td>string</td><td>Access key长度最小是5个字符，你可以通过 MINIO_ACCESS_KEY环境变量进行修改</td></tr><tr><td>credential.secretKey</td><td>string</td><td>Secret key长度最小是8个字符，你可以通过MINIO_SECRET_KEY环境变量进行修改</td></tr><tr><td>region</td><td>string</td><td>region描述的是服务器的物理位置，默认是us-east-1（美国东区1）,这也是亚马逊S3的默认区域。你可以通过MINIO_REGION_NAME 环境变量进行修改。如果不了解这块，建议不要随意修改</td></tr><tr><td>browser</td><td>string</td><td>开启或关闭浏览器访问，默认是开启的，你可以通过 MINIO_BROWSER 环境变量进行修改</td></tr></tbody></table><p>示例</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">export MINIO_BROWSER&#x3D;off</span><br><span class="line">minio server &#x2F;data</span><br></pre></td></tr></table></figure><h1 id="MinIO-服务限制"><a href="#MinIO-服务限制" class="headerlink" title="MinIO 服务限制"></a>MinIO 服务限制</h1><p>由于纠删码的原因，MinIO 有如下限制</p><table><thead><tr><th>项目</th><th>参数</th></tr></thead><tbody><tr><td>最大驱动器数量</td><td>16</td></tr><tr><td>最小驱动器数量</td><td>4</td></tr><tr><td>读仲裁</td><td>N/2</td></tr><tr><td>写仲裁</td><td>N/2+1</td></tr></tbody></table><p>通过浏览器访问 MinIO ，由于浏览器的限制，上传文件的大小限制为 5GB。</p><p>S3 API 的限制</p><table><thead><tr><th>项目</th><th>参数</th></tr></thead><tbody><tr><td>最大桶数</td><td>无限额</td></tr><tr><td>每桶最大对象数</td><td>无限额</td></tr><tr><td>最大对象大小</td><td>5TB</td></tr><tr><td>最小对象大小</td><td>0</td></tr><tr><td>每次 PUT 操作的最大对象大小</td><td>5GB</td></tr><tr><td>每次上传的最大 Part 数量</td><td>10000</td></tr><tr><td>Part 大小</td><td>5MB到5GB. 最后一个part可以从0B到5GB</td></tr><tr><td>每次list parts请求可返回的part最大数量</td><td>1000</td></tr><tr><td>每次list objects请求可返回的object最大数量</td><td>1000</td></tr><tr><td>每次list multipart uploads请求可返回的multipart uploads最大数量</td><td>1000</td></tr></tbody></table><p>Minio 不支持的 Amazon S3 Bucket API</p><ul><li>BucketACL (可以用 bucket policies)</li><li>BucketCORS (所有HTTP方法的所有存储桶都默认启用CORS)</li><li>BucketLifecycle (Minio纠删码不需要)</li><li>BucketReplication (可以用 mc mirror)</li><li>BucketVersions, BucketVersioning (可以用 s3git)</li><li>BucketWebsite (可以用 caddy or nginx)</li><li>BucketAnalytics, BucketMetrics, BucketLogging (可以用 bucket notification APIs)</li><li>BucketRequestPayment</li><li>BucketTagging</li></ul><p>Minio不支持的Amazon S3 Object API.</p><ul><li>ObjectACL (可以用 bucket policies)</li><li>ObjectTorrent</li></ul><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;h1 id=&quot;MinIO-参数解析与限制&quot;&gt;&lt;a href=&quot;#MinIO-参数解析与限制&quot; class=&quot;headerlink&quot; title=&quot;MinIO 参数解析与限制&quot;&gt;&lt;/a&gt;MinIO 参数解析与限制&lt;/h1&gt;&lt;p&gt;MinIO server 在默认情况下会将所有配置信息存到 &lt;code&gt;${HOME}/.minio/config.json&lt;/code&gt; 文件中。 以下部分提供每个字段的详细说明以及如何自定义它们。一个完整的 config.json 在 &lt;a href=&quot;https://raw.githubusercontent.com/minio/minio/master/docs/config/config.sample.json&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;这里&lt;/a&gt;&lt;/p&gt;
    
    </summary>
    
    
      <category term="minio" scheme="https://erdong.site/categories/minio/"/>
    
    
      <category term="minio" scheme="https://erdong.site/tags/minio/"/>
    
  </entry>
  
  <entry>
    <title>MinIO 分布式集群搭建</title>
    <link href="https://erdong.site/minio/minio-cluster.html"/>
    <id>https://erdong.site/minio/minio-cluster.html</id>
    <published>2019-11-10T06:36:48.000Z</published>
    <updated>2019-11-10T06:38:02.247Z</updated>
    
    <content type="html"><![CDATA[<h1 id="MinIO-分布式集群搭建"><a href="#MinIO-分布式集群搭建" class="headerlink" title="MinIO 分布式集群搭建"></a>MinIO 分布式集群搭建</h1><p>分布式 Minio 可以让你将多块硬盘（甚至在不同的机器上）组成一个对象存储服务。由于硬盘分布在不同的节点上，分布式 Minio 避免了单点故障。</p><p>Minio 分布式模式可以搭建一个高可用的对象存储服务，你可以使用这些存储设备，而不用考虑其真实物理位置。</p><a id="more"></a><p><strong>（1）数据保护</strong></p><p>分布式 Minio 采用纠删码（erasure code）来防范多个节点宕机和位衰减（bit rot）。</p><p>分布式 Minio 至少需要 4 个节点，使用分布式 Minio 就自动引入了纠删码功能。</p><p>纠删码是一种恢复丢失和损坏数据的数学算法， Minio 采用 Reed-Solomon code 将对象拆分成 N/2 数据和 N/2 奇偶校验块。 这就意味着如果是 12 块盘，一个对象会被分成 6 个数据块、6 个奇偶校验块，你可以丢失任意 6 块盘（不管其是存放的数据块还是奇偶校验块），你仍可以从剩下的盘中的数据进行恢复。</p><p>纠删码的工作原理和 RAID 或者复制不同，像 RAID6 可以在损失两块盘的情况下不丢数据，而 Minio 纠删码可以在丢失一半的盘的情况下，仍可以保证数据安全。 而且 Minio 纠删码是作用在对象级别，可以一次恢复一个对象，而RAID 是作用在卷级别，数据恢复时间很长。 Minio 对每个对象单独编码，存储服务一经部署，通常情况下是不需要更换硬盘或者修复。Minio 纠删码的设计目标是为了性能和尽可能的使用硬件加速。</p><p>位衰减又被称为数据腐化 Data Rot、无声数据损坏 Silent Data Corruption ，是目前硬盘数据的一种严重数据丢失问题。硬盘上的数据可能会神不知鬼不觉就损坏了，也没有什么错误日志。 所以 Minio 纠删码采用了高速 HighwayHash 基于哈希的校验和来防范位衰减。</p><p><strong>（2）高可用</strong></p><p>单机 Minio 服务存在单点故障，相反，如果是一个 N 节点的分布式 Minio ,只要有 N/2 节点在线，你的数据就是安全的。不过你需要至少有 N/2+1 个节点来创建新的对象。</p><p>例如，一个 8 节点的 Minio 集群，每个节点一块盘，就算 4 个节点宕机，这个集群仍然是可读的，不过你需要 5 个节点才能写数据。</p><p><strong>（3）限制</strong></p><p>分布式 Minio 单租户存在最少 4 个盘最多 16 个盘的限制（受限于纠删码）。这种限制确保了 Minio 的简洁，同时仍拥有伸缩性。如果你需要搭建一个多租户环境，你可以轻松的使用编排工具（Kubernetes）来管理多个Minio实例。</p><p>注意，只要遵守分布式 Minio 的限制，你可以组合不同的节点和每个节点几块盘。比如，你可以使用 2 个节点，每个节点 4 块盘，也可以使用 4 个节点，每个节点两块盘，诸如此类。</p><p><strong>（4）一致性</strong><br>Minio 在分布式和单机模式下，所有读写操作都严格遵守 read-after-write 一致性模型。</p><h1 id="搭建分布式集群"><a href="#搭建分布式集群" class="headerlink" title="搭建分布式集群"></a>搭建分布式集群</h1><p>启动一个分布式 Minio 实例，你只需要把硬盘位置做为参数传给 minio server 命令即可，然后，你需要在所有其它节点运行同样的命令。</p><p>注意</p><ul><li>分布式 Minio 里所有的节点需要有同样的 access 秘钥和 secret 秘钥，这样这些节点才能建立联接。为了实现这个，你需要在执行 minio server 命令之前，先将 access 秘钥和 secret 秘钥 export 成环境变量。</li><li>分布式 Minio 使用的磁盘里必须是干净的，里面没有数据。</li><li>下面示例里的 IP 仅供示例参考，你需要改成你真实用到的 IP 和文件夹路径。</li><li>分布式 Minio 里的节点时间差不能超过 3 秒，你可以使用 NTP 来保证时间一致。</li><li>在 Windows 下运行分布式 Minio 处于实验阶段，不建议用于生产环境。</li></ul><h2 id="示例1"><a href="#示例1" class="headerlink" title="示例1:"></a>示例1:</h2><p>启动分布式Minio实例，8个节点，每节点1块盘，需要在8个节点上都运行下面的命令。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">export MINIO_ACCESS_KEY&#x3D;&lt;ACCESS_KEY&gt;</span><br><span class="line">export MINIO_SECRET_KEY&#x3D;&lt;SECRET_KEY&gt;</span><br><span class="line">minio server http:&#x2F;&#x2F;192.168.1.1&#x2F;disk1 http:&#x2F;&#x2F;192.168.1.2&#x2F;disk2 \</span><br><span class="line">               http:&#x2F;&#x2F;192.168.1.3&#x2F;disk3 http:&#x2F;&#x2F;192.168.1.4&#x2F;disk4 \</span><br><span class="line">               http:&#x2F;&#x2F;192.168.1.5&#x2F;disk5 http:&#x2F;&#x2F;192.168.1.6&#x2F;disk6 \</span><br><span class="line">               http:&#x2F;&#x2F;192.168.1.7&#x2F;disk7 http:&#x2F;&#x2F;192.168.1.8&#x2F;disk8</span><br></pre></td></tr></table></figure><h2 id="示例2"><a href="#示例2" class="headerlink" title="示例2:"></a>示例2:</h2><p>启动分布式Minio实例，4节点，每节点4块盘，需要在4个节点上都运行下面的命令。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">export MINIO_ACCESS_KEY&#x3D;&lt;ACCESS_KEY&gt;</span><br><span class="line">export MINIO_SECRET_KEY&#x3D;&lt;SECRET_KEY&gt;</span><br><span class="line">minio server http:&#x2F;&#x2F;192.168.1.1&#x2F;disk11 http:&#x2F;&#x2F;192.168.1.1&#x2F;disk2 \</span><br><span class="line">               http:&#x2F;&#x2F;192.168.1.1&#x2F;disk13 http:&#x2F;&#x2F;192.168.1.1&#x2F;disk4 \</span><br><span class="line">               http:&#x2F;&#x2F;192.168.1.2&#x2F;disk21 http:&#x2F;&#x2F;192.168.1.2&#x2F;disk2 \</span><br><span class="line">               http:&#x2F;&#x2F;192.168.1.2&#x2F;disk23 http:&#x2F;&#x2F;192.168.1.2&#x2F;disk4 \</span><br><span class="line">               http:&#x2F;&#x2F;192.168.1.3&#x2F;disk31 http:&#x2F;&#x2F;192.168.1.3&#x2F;disk2 \</span><br><span class="line">               http:&#x2F;&#x2F;192.168.1.3&#x2F;disk33 http:&#x2F;&#x2F;192.168.1.3&#x2F;disk4 \</span><br><span class="line">               http:&#x2F;&#x2F;192.168.1.4&#x2F;disk41 http:&#x2F;&#x2F;192.168.1.4&#x2F;disk2 \</span><br><span class="line">               http:&#x2F;&#x2F;192.168.1.4&#x2F;disk43 http:&#x2F;&#x2F;192.168.1.4&#x2F;disk4</span><br></pre></td></tr></table></figure><h2 id="验证"><a href="#验证" class="headerlink" title="验证"></a>验证</h2><p>验证是否部署成功，使用浏览器访问 Minio 服务或者使用 mc。多个节点的存储容量和就是分布式Minio的存储容量。</p><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;h1 id=&quot;MinIO-分布式集群搭建&quot;&gt;&lt;a href=&quot;#MinIO-分布式集群搭建&quot; class=&quot;headerlink&quot; title=&quot;MinIO 分布式集群搭建&quot;&gt;&lt;/a&gt;MinIO 分布式集群搭建&lt;/h1&gt;&lt;p&gt;分布式 Minio 可以让你将多块硬盘（甚至在不同的机器上）组成一个对象存储服务。由于硬盘分布在不同的节点上，分布式 Minio 避免了单点故障。&lt;/p&gt;
&lt;p&gt;Minio 分布式模式可以搭建一个高可用的对象存储服务，你可以使用这些存储设备，而不用考虑其真实物理位置。&lt;/p&gt;
    
    </summary>
    
    
      <category term="minio" scheme="https://erdong.site/categories/minio/"/>
    
    
      <category term="cluster" scheme="https://erdong.site/tags/cluster/"/>
    
      <category term="minio" scheme="https://erdong.site/tags/minio/"/>
    
  </entry>
  
  <entry>
    <title>MinIO 简介和搭建</title>
    <link href="https://erdong.site/minio/minio-introduction.html"/>
    <id>https://erdong.site/minio/minio-introduction.html</id>
    <published>2019-11-09T15:52:21.000Z</published>
    <updated>2019-11-09T15:54:11.198Z</updated>
    
    <content type="html"><![CDATA[<h1 id="MinIO-搭建"><a href="#MinIO-搭建" class="headerlink" title="MinIO 搭建"></a>MinIO 搭建</h1><p>MinIO 是一个基于 Apache License v2.0 开源协议的对象存储服务。它兼容亚马逊 S3 云存储服务接口，非常适合于存储大容量非结构化的数据，例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等，而一个对象文件可以是任意大小，从几 kb 到最大 5T 不等。</p><a id="more"></a><p>MinIO 是一个非常轻量的服务,可以很简单的和其他应用的结合，类似 NodeJS, Redis 或者 MySQL。</p><p>官方对 Minio 的定义是一个高性能的对象存储。</p><blockquote><p>Build high performance data infrastructure<br>for machine learning, analytics and<br>application data workloads with MinIO 。</p></blockquote><p>Minio 的官方网站是 <a href="https://min.io" target="_blank" rel="noopener">https://min.io</a> ，<br>Minio 的官方文档是 <a href="https://docs.min.io/cn/" target="_blank" rel="noopener">https://docs.min.io/cn/</a> ，<br>GitHub 仓库地址是：<a href="https://github.com/minio/minio" target="_blank" rel="noopener">https://github.com/minio/minio</a> ，目前有 18.8k Stars (2019.11.9)</p><p>Minio 的 benchmark 说明：</p><p><a href="https://min.io/resources/docs/MinIO-vs-HDFS-MapReduce-performance-comparison.pdf" target="_blank" rel="noopener">https://min.io/resources/docs/MinIO-vs-HDFS-MapReduce-performance-comparison.pdf</a><br><a href="https://min.io/resources/docs/MinIO-throughput-benchmarks-on-NVMe-SSD.pdf" target="_blank" rel="noopener">https://min.io/resources/docs/MinIO-throughput-benchmarks-on-NVMe-SSD.pdf</a><br><a href="https://min.io/resources/docs/Performance-comparison-Starburst-Presto-SQL.pdf" target="_blank" rel="noopener">https://min.io/resources/docs/Performance-comparison-Starburst-Presto-SQL.pdf</a><br><a href="https://min.io/resources/docs/MinIO-throughput-benchmarks-on-HDD.pdf" target="_blank" rel="noopener">https://min.io/resources/docs/MinIO-throughput-benchmarks-on-HDD.pdf</a><br><a href="https://min.io/resources/docs/Performance-comparison-Apache-Spark.pdf" target="_blank" rel="noopener">https://min.io/resources/docs/Performance-comparison-Apache-Spark.pdf</a></p><h1 id="快速开始一个单节点的-MinIO"><a href="#快速开始一个单节点的-MinIO" class="headerlink" title="快速开始一个单节点的 MinIO"></a>快速开始一个单节点的 MinIO</h1><p>MinIO 分为服务端和客户端，服务端提供一个对象存储，也提供一个 Web 的管理页面。客户端是用来管理、查看服务端的一个工具。服务端的二进制文件是 <code>minio</code> ，客户端的二进制文件是 <code>mc</code> 。</p><h2 id="使用二进制文件启动"><a href="#使用二进制文件启动" class="headerlink" title="使用二进制文件启动"></a>使用二进制文件启动</h2><p>首先先下载服务端的二进制文件，其次准备一个用来存储的磁盘或者目录，</p><p>下载好以后赋予执行权限，可以使用如下命令快速启动。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">chmod +x minio</span><br><span class="line">.&#x2F;minio server &#x2F;erdong&#x2F;data</span><br></pre></td></tr></table></figure><p>启动后可以通过访问 <a href="http://localhost:9000" target="_blank" rel="noopener">http://localhost:9000</a> 来访问你的对象存储。</p><h2 id="使用-Docker-启动"><a href="#使用-Docker-启动" class="headerlink" title="使用 Docker 启动"></a>使用 Docker 启动</h2><p>MinIO 需要一个持久卷来存储配置和应用数据。不过, 如果只是为了测试一下, 您可以通过简单地传递一个目录（在下面的示例中为 <code>/erdong/data</code>）启动 MinIO 。这个目录会在容器启动时在容器的文件系统中创建，不过所有的数据都会在容器退出时丢失。</p><p>要创建具有永久存储的 MinIO 容器，您需要将本地持久目录从主机操作系统映射到虚拟配置 ~/.minio 并导出 /data 目录。 为此，请运行以下命令</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">docker run -p 9000:9000 --name minio \</span><br><span class="line">  -e &quot;MINIO_ACCESS_KEY&#x3D;minioadmin&quot; \</span><br><span class="line">  -e &quot;MINIO_SECRET_KEY&#x3D;minioadminpassword&quot; \</span><br><span class="line">  -v &#x2F;erdong&#x2F;minio&#x2F;data:&#x2F;data \</span><br><span class="line">  -v &#x2F;erdong&#x2F;minio&#x2F;config:&#x2F;root&#x2F;.minio \</span><br><span class="line">  minio&#x2F;minio server &#x2F;data</span><br></pre></td></tr></table></figure><p>启动后，即可访问 <a href="http://localhost:9000" target="_blank" rel="noopener">http://localhost:9000</a> 来访问你的对象存储。</p><p>上述命令中设置了如下参数：</p><ul><li>MINIO_ACCESS_KEY 管理员的访问秘钥</li><li>MINIO_SECRET_KEY 管理员的秘钥</li><li>/erdong/minio/data:/data  挂载持久化数据目录</li><li>/erdong/minio/config:/root/.minio  挂载配置文件</li><li>server 启动 Server 模式，除了该模式还有一个 Gateway 模式。</li><li>/data  指定数据目录</li></ul><p>如果需要指定端口可以使用如下参数</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">--address &quot;:9000&quot;</span><br></pre></td></tr></table></figure><h1 id="使用-TLS-安全访问-MinIO-服务"><a href="#使用-TLS-安全访问-MinIO-服务" class="headerlink" title="使用 TLS 安全访问 MinIO 服务"></a>使用 TLS 安全访问 MinIO 服务</h1><p>接下来我们看看如何在 linux 上配置 MinIO 服务使用 TLS 。</p><p>使用 TLS 的前提是先下载好 MinIO Server 。</p><p>如果你已经有私钥和公钥证书，你需要将他们拷贝到 MinIO 的 <code>$HOME/.minio/certs</code> 文件夹，私钥的名字必须是 <code>private.key</code> ，公钥证书的名字必须是 <code>public.crt</code> 。 MinIO 在 Linux 只支持使用 PEM 格式的秘钥和证书，在 Windows 上只支持 PEM 格式的秘钥和证书，目前不支持 PFX 证书。</p><p>如果这个证书是被证书机构签发的，<code>public.crt</code> 应该是服务器的证书。</p><p>Linux 可以使用如下工具来生成证书</p><ul><li>Let‘s Encrypt</li><li>generate_cert.go</li><li>OpenSSL </li></ul><p>Windows 可以使用如下工具来生成证书</p><ul><li>GnuTLS</li></ul><p>Minio 也可以配置成连接其它服务，不管是 Minio 节点还是像 NATs、Redis 这些。如果这些服务用的不是在已知证书机构注册的证书，你可以让 Minio 服务信任这些 CA ，怎么做呢，将这些证书放到Minio配置路径下(~/.minio/certs/CAs/ Linux 或者 C:\Users&lt;Username&gt;.minio\certs\CAs Windows).</p><h2 id="如何使用-OpenSSL-来生成自签证书"><a href="#如何使用-OpenSSL-来生成自签证书" class="headerlink" title="如何使用 OpenSSL 来生成自签证书"></a>如何使用 OpenSSL 来生成自签证书</h2><p>使用如下命令生成私钥，私钥会生成在执行命令的目录下</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">openssl genrsa -out private.key 2048</span><br></pre></td></tr></table></figure><p>生成自签名的证书，证书会生成在执行命令的目录下</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">openssl req -new -x509 -days 3650 -key private.key -out public.crt -subj &quot;&#x2F;C&#x3D;US&#x2F;ST&#x3D;state&#x2F;L&#x3D;location&#x2F;O&#x3D;organization&#x2F;CN&#x3D;domain&quot;</span><br></pre></td></tr></table></figure><p>其中相关内容可以按照实际情况修改，比如 <code>/C</code> 是国家，中国是 CN ，<code>/ST</code> 是州或者省， <code>/L</code> 是市或者区， <code>/CN</code> 是域名。</p><p>秘钥和证书生成好以后，按照上边的要求放置在对应的目录即可。</p><h1 id="Q-amp-A"><a href="#Q-amp-A" class="headerlink" title="Q&amp;A"></a>Q&amp;A</h1><p>Thanos 在连接 MinIO 的时候遇到了一些问题，日志里有很多错误提示，列在下边供参考。</p><h2 id="1-提示冒号太多"><a href="#1-提示冒号太多" class="headerlink" title="1. 提示冒号太多"></a>1. 提示冒号太多</h2><p>日志报错如下所示：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">level&#x3D;info ts&#x3D;2019-11-08T02:43:40.981858805Z caller&#x3D;main.go:170 msg&#x3D;&quot;Tracing will be disabled&quot;</span><br><span class="line">level&#x3D;info ts&#x3D;2019-11-08T02:43:40.982326667Z caller&#x3D;factory.go:39 msg&#x3D;&quot;loading bucket configuration&quot;</span><br><span class="line">level&#x3D;error ts&#x3D;2019-11-08T02:43:40.982682262Z caller&#x3D;main.go:200 err&#x3D;&quot;store command failed: create bucket client: create S3 client: initialize s3 client: address http:&#x2F;&#x2F;127.0.0.1:9000: too many colons in address&quot;</span><br></pre></td></tr></table></figure><p>日志描述直译过来就是冒号太多了，原因是在配置文件中，填写了 MinIO 提供的 S3 协议的 endpoint 的时候，多填写了 <code>http://</code> ，导致提示该错误。本意是在内网使用， HTTP 协议就可以了，不需要要开启 HTTPS ，但是 Thanos 在连接 S3 存储的时候默认是使用 HTTPS 的，不能通过这种方式来使用 HTTP 。</p><p>错误的配置如下：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">type: S3</span><br><span class="line">config:</span><br><span class="line">  bucket: &quot;disk1&quot;</span><br><span class="line">  endpoint: &quot;http:&#x2F;&#x2F;127.0.0.1:9000&quot;</span><br></pre></td></tr></table></figure><p>正确的配置如下：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">type: S3</span><br><span class="line">config:</span><br><span class="line">  bucket: &quot;disk1&quot;</span><br><span class="line">  endpoint: &quot;127.0.0.1:9000&quot;</span><br></pre></td></tr></table></figure><h2 id="2-提示对方没有使用-HTTPS"><a href="#2-提示对方没有使用-HTTPS" class="headerlink" title="2. 提示对方没有使用 HTTPS"></a>2. 提示对方没有使用 HTTPS</h2><p>日志报错如下</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">level&#x3D;info ts&#x3D;2019-11-08T02:42:04.366000876Z caller&#x3D;main.go:170 msg&#x3D;&quot;Tracing will be disabled&quot;</span><br><span class="line">level&#x3D;info ts&#x3D;2019-11-08T02:42:04.366417674Z caller&#x3D;factory.go:39 msg&#x3D;&quot;loading bucket configuration&quot;</span><br><span class="line">level&#x3D;info ts&#x3D;2019-11-08T02:42:04.384413714Z caller&#x3D;cache.go:172 msg&#x3D;&quot;created index cache&quot; maxItemSizeBytes&#x3D;131072000 maxSizeBytes&#x3D;262144000 maxItems&#x3D;math.MaxInt64</span><br><span class="line">level&#x3D;error ts&#x3D;2019-11-08T02:42:04.385632149Z caller&#x3D;main.go:200 err&#x3D;&quot;store command failed: bucket store initial sync: sync block: iter: Get https:&#x2F;&#x2F;127.0.0.1:9000&#x2F;prometheus-store&#x2F;?delimiter&#x3D;%2F&amp;max-keys&#x3D;1000&amp;prefix&#x3D;: http: server gave HTTP response to HTTPS client&quot;</span><br></pre></td></tr></table></figure><p>这是 Thanos 连接的对象存储只提供了 HTTP ，没有提供 HTTPS，这个时候需要让对象存储添加证书，启用 HTTPS 。</p><h2 id="3-不能够认证某个域名"><a href="#3-不能够认证某个域名" class="headerlink" title="3. 不能够认证某个域名"></a>3. 不能够认证某个域名</h2><p>日志报错如下：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">level&#x3D;info ts&#x3D;2019-11-08T03:06:57.90508837Z caller&#x3D;main.go:170 msg&#x3D;&quot;Tracing will be disabled&quot;</span><br><span class="line">level&#x3D;info ts&#x3D;2019-11-08T03:06:57.905445182Z caller&#x3D;factory.go:39 msg&#x3D;&quot;loading bucket configuration&quot;</span><br><span class="line">level&#x3D;info ts&#x3D;2019-11-08T03:06:57.923283984Z caller&#x3D;cache.go:172 msg&#x3D;&quot;created index cache&quot; maxItemSizeBytes&#x3D;131072000 maxSizeBytes&#x3D;262144000 maxItems&#x3D;math.MaxInt64</span><br><span class="line">level&#x3D;error ts&#x3D;2019-11-08T03:06:57.927125234Z caller&#x3D;main.go:200 err&#x3D;&quot;store command failed: bucket store initial sync: sync block: iter: Get https:&#x2F;&#x2F;10.23.80.18:9000&#x2F;prometheus-store&#x2F;?delimiter&#x3D;%2F&amp;max-keys&#x3D;1000&amp;prefix&#x3D;: x509: cannot validate certificate for minio-erdong.site because it doesn&#39;t contain any IP SANs&quot;</span><br></pre></td></tr></table></figure><p>因为 Thanos 连接 Minio 的 HTTP 配置里，有一个 <code>insecure_skip_verify</code> 选项，该选项默认为 false ，需要对域名的证书进行验证，由于使用了自签证书，没有在权威的 CA 机构做认证，所以在连接过程中会提示不安全，将值改为 true，跳过这个验证就可以了。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">http_config:</span><br><span class="line">  idle_conn_timeout: 90s</span><br><span class="line">  response_header_timeout: 2m</span><br><span class="line">  insecure_skip_verify: true</span><br></pre></td></tr></table></figure><h1 id="end"><a href="#end" class="headerlink" title="end"></a>end</h1><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;h1 id=&quot;MinIO-搭建&quot;&gt;&lt;a href=&quot;#MinIO-搭建&quot; class=&quot;headerlink&quot; title=&quot;MinIO 搭建&quot;&gt;&lt;/a&gt;MinIO 搭建&lt;/h1&gt;&lt;p&gt;MinIO 是一个基于 Apache License v2.0 开源协议的对象存储服务。它兼容亚马逊 S3 云存储服务接口，非常适合于存储大容量非结构化的数据，例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等，而一个对象文件可以是任意大小，从几 kb 到最大 5T 不等。&lt;/p&gt;
    
    </summary>
    
    
      <category term="minio" scheme="https://erdong.site/categories/minio/"/>
    
    
      <category term="minio" scheme="https://erdong.site/tags/minio/"/>
    
  </entry>
  
  <entry>
    <title>攻城狮周刊：第36期</title>
    <link href="https://erdong.site/weekly/weekly36.html"/>
    <id>https://erdong.site/weekly/weekly36.html</id>
    <published>2019-11-09T15:16:59.000Z</published>
    <updated>2019-11-10T07:26:53.696Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="新闻"><a href="#新闻" class="headerlink" title="新闻"></a>新闻</h1><h2 id="1-Vitess-从-CNCF-毕业"><a href="#1-Vitess-从-CNCF-毕业" class="headerlink" title="1. Vitess 从 CNCF 毕业"></a>1. <a href="https://www.cncf.io/announcement/2019/11/05/cloud-native-computing-foundation-announces-vitess-graduation/" target="_blank" rel="noopener">Vitess 从 CNCF 毕业</a></h2><p>作为 YouTube 公司最初创立于 2010 年的内部解决方案，Vitess 主要利用 MySQL 扩展大规模存储，从而为用户提供一套强大的云原生数据库系统。</p><p>云原生计算基金会 CTO/COO Chris Aniszczyk 表示，“通过在 YouTube 之内的实战考验，以及在其他超大规模组织内的实际运行，Vitess 以及证明了自己在云原生架构当中扩展大量存储资源的能力。Vitess 降低了以云原生方式使用 MySQL 的门槛，我们期待着该项目能够在毕业之后为整个世界作出更大的贡献。”</p><h2 id="2-Jaeger-从-CNCF-毕业"><a href="#2-Jaeger-从-CNCF-毕业" class="headerlink" title="2. Jaeger 从 CNCF 毕业"></a>2. <a href="https://www.cncf.io/announcement/2019/10/31/cloud-native-computing-foundation-announces-jaeger-graduation/" target="_blank" rel="noopener">Jaeger 从 CNCF 毕业</a></h2><p>Jaeger 是开源的端到端分布式跟踪平台，用于帮助各种规模的公司监控和排除其云原生架构的故障。</p><p>Jaeger 的灵感来自于 Dapper 和 OpenZipkin ，是一个分布式追踪平台，最初由 Uber Technologies 作为开源发布，后来贡献给 CNCF。它用于基于微服务的分布式系统监控和故障排除。</p><ul><li>分布式上下文传播</li><li>分布式事务监控</li><li>根本原因分析</li><li>服务依赖关系分析</li><li>性能/延迟优化</li></ul><p>Jaeger 项目包括用于跟踪手机和分析的 Jaeger 后端，以及用不同语言实现 OpenTracing API 的多个 Jaeger 客户端库。</p><h1 id="工具"><a href="#工具" class="headerlink" title="工具"></a>工具</h1><h2 id="1-LogomMakr"><a href="#1-LogomMakr" class="headerlink" title="1. LogomMakr"></a>1. <a href="https://logomakr.com" target="_blank" rel="noopener">LogomMakr</a></h2><p>一个免费的 Logo 设计网站，可以比较简单的设计一个 Logo，设计好以后可以免费下载一个 JPEG 的图片文件。</p><h2 id="2-中文文案排版指北"><a href="#2-中文文案排版指北" class="headerlink" title="2. 中文文案排版指北"></a>2. <a href="https://github.com/sparanoid/chinese-copywriting-guidelines/blob/master/README.zh-CN.md" target="_blank" rel="noopener">中文文案排版指北</a></h2><p>统一中文文案、排版的相关用法，降低团队成员之间的沟通成本，增强网站气质。</p><h1 id="资源"><a href="#资源" class="headerlink" title="资源"></a>资源</h1><h2 id="1-BigData-Notes"><a href="#1-BigData-Notes" class="headerlink" title="1. BigData Notes"></a>1. <a href="https://github.com/heibaiying/BigData-Notes" target="_blank" rel="noopener">BigData Notes</a></h2><p>最近在 GitHub 上很火的大数据入门指南。</p><h2 id="2-CS-Notes"><a href="#2-CS-Notes" class="headerlink" title="2. CS-Notes"></a>2. <a href="https://github.com/CyC2018/CS-Notes" target="_blank" rel="noopener">CS-Notes</a></h2><p>很火的一个计算机类笔记。</p><h2 id="3-Go-夜读"><a href="#3-Go-夜读" class="headerlink" title="3. Go 夜读"></a>3. <a href="https://github.com/developer-learning/night-reading-go" target="_blank" rel="noopener">Go 夜读</a></h2><p>范畴：Go 标准包、开源项目、Go 项目工程实践与架构设计等。<br>希望通过阅读学术文献的方式，来帮助我们去学习和理解计算机系统，以及 Go 语言。<br>有 YouTube 和 B站 回放。</p><h2 id="4-Go-学习之路"><a href="#4-Go-学习之路" class="headerlink" title="4. Go 学习之路"></a>4. <a href="https://github.com/developer-learning/learning-golang" target="_blank" rel="noopener">Go 学习之路</a></h2><p>Go 学习之路：Go 开发者博客、Go 微信公众号、Go 学习资料（文档、书籍、视频）</p><h1 id="一句话"><a href="#一句话" class="headerlink" title="一句话"></a>一句话</h1><ul><li>CNCF 最近很高产，不到一个月的时间，连续毕业了两个项目，Jaeger 和 Vitess 。</li><li>今天给这个周更的内容起了个名字，叫攻城狮周刊。“攻城狮” 谐音 “工程师”，计算机从业者基本都是各种工程师，SRE 工程师在这里向大家问好。</li></ul><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
      <category term="weekly" scheme="https://erdong.site/tags/weekly/"/>
    
  </entry>
  
  <entry>
    <title>第35周分享</title>
    <link href="https://erdong.site/weekly/weekly35.html"/>
    <id>https://erdong.site/weekly/weekly35.html</id>
    <published>2019-11-03T15:16:59.000Z</published>
    <updated>2019-11-03T15:23:33.348Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="新闻"><a href="#新闻" class="headerlink" title="新闻"></a>新闻</h1><h2 id="1-中华人民共和国密码法"><a href="#1-中华人民共和国密码法" class="headerlink" title="1. 中华人民共和国密码法"></a>1. <a href="http://www.gov.cn/xinwen/2019-10/27/content_5445395.htm" target="_blank" rel="noopener">中华人民共和国密码法</a></h2><p>《中华人民共和国密码法》已由第十三届全国人民代表大会常务委员会第十四次会议于2019年10月26日通过，自2020年1月1日起施行。</p><h1 id="教程"><a href="#教程" class="headerlink" title="教程"></a>教程</h1><h2 id="1-CloudWatch-exporter"><a href="#1-CloudWatch-exporter" class="headerlink" title="1. CloudWatch exporter"></a>1. <a href="https://github.com/prometheus/cloudwatch_exporter" target="_blank" rel="noopener">CloudWatch exporter</a></h2><p>Prometheus 官方发布的云上资源监控采集器，目前可以采集 AWS 的情况。</p><h1 id="工具"><a href="#工具" class="headerlink" title="工具"></a>工具</h1><h2 id="1-MobaXterm"><a href="#1-MobaXterm" class="headerlink" title="1. MobaXterm"></a>1. <a href="https://mobaxterm.mobatek.net" target="_blank" rel="noopener">MobaXterm</a></h2><p>一个好用的 Windows 下的命令行工具。支持SSH、Telnet、串口、X11、FTP、SFTP、MOSH…等远程协议，甚至包括 VNC/RDP/Xdmcp 等远程桌面协议，内建了轻量级的 FTP/HTTP/SSH/NFS/VNC 等服务器可随时轻松使用。同时MobaXterm也提供了一个本地终端用于在Windows上执行Unix命令(bash, ls, cat, sed, grep, awk, rsync, …) ，可与Linux上的命令行相媲美。MobaXterm内建X server，可具有OpenSSH X11转发能力，可在本地远程运行X窗口程序！</p><h1 id="资源"><a href="#资源" class="headerlink" title="资源"></a>资源</h1><h2 id="1-influxdb-中文文档"><a href="#1-influxdb-中文文档" class="headerlink" title="1. influxdb 中文文档"></a>1. <a href="https://jasper-zhang1.gitbooks.io/influxdb/content/" target="_blank" rel="noopener">influxdb 中文文档</a></h2><p>作者 Jasper zhang 基于 InfluxDB 版本1.3.x 翻译的官方文档，作者表示如果后续版本有较大的改动，此文档也会跟进。<br>文档项目地址(Github)：<a href="https://github.com/jasper-zhang/influxdb-document-cn" target="_blank" rel="noopener">https://github.com/jasper-zhang/influxdb-document-cn</a></p><p>文档在线地址(Gitbook)：<a href="https://jasper-zhang1.gitbooks.io/influxdb/content/" target="_blank" rel="noopener">https://jasper-zhang1.gitbooks.io/influxdb/content/</a></p><p>作者博客：<a href="http://www.opscoder.info" target="_blank" rel="noopener">http://www.opscoder.info</a></p><h2 id="2-吴叶磊的博客"><a href="#2-吴叶磊的博客" class="headerlink" title="2. 吴叶磊的博客"></a>2. <a href="https://aleiwu.com" target="_blank" rel="noopener">吴叶磊的博客</a></h2><p>吴叶磊的博客，记录了一些有用的知识，值得去查看。</p><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
      <category term="weekly" scheme="https://erdong.site/tags/weekly/"/>
    
  </entry>
  
  <entry>
    <title>第34周分享</title>
    <link href="https://erdong.site/weekly/weekly34.html"/>
    <id>https://erdong.site/weekly/weekly34.html</id>
    <published>2019-10-27T15:16:59.000Z</published>
    <updated>2019-10-27T13:38:36.519Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="新闻"><a href="#新闻" class="headerlink" title="新闻"></a>新闻</h1><h2 id="1-Jimmy-Song"><a href="#1-Jimmy-Song" class="headerlink" title="1. Jimmy Song"></a>1. <a href="https://jimmysong.io" target="_blank" rel="noopener">Jimmy Song</a></h2><p>宋净超（Jimmy Song），蚂蚁金服云原生布道师和 CNCF Ambassador。ServiceMesher 社区联合创始人。</p><h1 id="资源"><a href="#资源" class="headerlink" title="资源"></a>资源</h1><h2 id="1-Go-入门指南"><a href="#1-Go-入门指南" class="headerlink" title="1. Go 入门指南"></a>1. <a href="https://github.com/unknwon/the-way-to-go_ZH_CN" target="_blank" rel="noopener">Go 入门指南</a></h2><p>英文版 《The Way to Go》的 中文译本，中文正式名《Go 入门指南》，</p><p>本书的英文版作者是 Ivo Balbaert 。中文版由社区进行翻译。</p><h2 id="2-Kubernetes-Handbook"><a href="#2-Kubernetes-Handbook" class="headerlink" title="2. Kubernetes Handbook"></a>2. <a href="https://jimmysong.io/kubernetes-handbook/" target="_blank" rel="noopener">Kubernetes Handbook</a></h2><p>Kubernetes Handbook——Kubernetes中文指南/云原生应用架构实践手册</p><p>Kubernetes是Google基于Borg开源的容器编排调度引擎，作为CNCF（Cloud Native Computing Foundation）最重要的组件之一，它的目标不仅仅是一个编排系统，而是提供一个规范，可以让你来描述集群的架构，定义服务的最终状态，Kubernetes可以帮你将系统自动地达到和维持在这个状态。Kubernetes作为云原生应用的基石，相当于一个云操作系统，其重要性不言而喻。</p><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
      <category term="weekly" scheme="https://erdong.site/tags/weekly/"/>
    
  </entry>
  
  <entry>
    <title>Kong 的集群怎么用</title>
    <link href="https://erdong.site/Kong/kong-06.html"/>
    <id>https://erdong.site/Kong/kong-06.html</id>
    <published>2019-10-22T15:46:29.000Z</published>
    <updated>2019-10-22T15:59:05.237Z</updated>
    
    <content type="html"><![CDATA[<p>Kong 集群允许您通过添加更多的机器来处理更多的传入请求来横向扩展系统。它们将共享相同的配置，因为它们指向相同的数据库。指向相同数据存储的 Kong 节点将属于相同的 Kong 集群。</p><p>您需要在Kong集群前面安装一个负载平衡器，以便在可用节点之间分配流量。</p><a id="more"></a><h1 id="Kong-集群可以做什么，不能做什么"><a href="#Kong-集群可以做什么，不能做什么" class="headerlink" title="Kong 集群可以做什么，不能做什么"></a>Kong 集群可以做什么，不能做什么</h1><p>拥有一个 Kong 集群并不意味着你的客户机流量将在您的 Kong 节点之间实现开箱即用的负载平衡。你仍然需要在Kong节点前安装一个负载平衡器来分配流量。相反，Kong集群意味着这些节点将共享相同的配置。</p><p>出于性能原因，Kong在代理请求时避免数据库连接，并将数据库的内容缓存到内存中。缓存的实体包括服务、路由、消费者、插件、凭证等……由于这些值都在内存中，因此通过其中一个节点的管理API所做的任何更改都需要传播到其他节点。</p><p>本文档描述了如何使这些缓存的实体失效，以及如何为用例配置Kong节点，该用例介于性能和一致性之间。</p><h1 id="单节点集群"><a href="#单节点集群" class="headerlink" title="单节点集群"></a>单节点集群</h1><p>单个的 Kong 节点连到数据库创建一个单节点的 Kong 集群。通过该节点的管理 API 应用的任何更改都将立即生效。</p><p>考虑一个单独的 Kong 节点A。如果我们删除之前注册的服务:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ curl -X DELETE http:&#x2F;&#x2F;127.0.0.1:8001&#x2F;services&#x2F;test-service</span><br></pre></td></tr></table></figure><p>然后，任何对节点 A 的后续请求都会立即返回 <code>404 Not Found</code>，因为节点将其从本地缓存中清除。</p><h1 id="多节点集群"><a href="#多节点集群" class="headerlink" title="多节点集群"></a>多节点集群</h1><p>在一个集群有多个 Kong 节点的情况下，连接到同一数据库的其他节点不会立即被通知服务已被节点 A 删除。 虽然服务不在数据库中(被节点A删除)，但它仍然在节点B的内存中。</p><p>所有节点执行一个周期性的后台作业，以同步其他节点可能触发的更改。此作业的频率可通过以下方式配置:</p><blockquote><p>db_update_frequency (default: 5 seconds)</p></blockquote><p>每隔 <code>db_update_frequency</code> 秒，所有运行的 Kong 节点都将轮询数据库以获得任何更新，并在必要时从缓存中清除相关实体。</p><p>如果我们从节点 A 中删除一个服务，这个更改在节点B中不会有效，直到节点B的下一次数据库轮询，该轮询将在几秒后发生，直到 <code>db_update_frequency</code> (尽管可能更快)。</p><p>这使得 Kong 集群最终保持一致。</p><h1 id="集群的搭建"><a href="#集群的搭建" class="headerlink" title="集群的搭建"></a>集群的搭建</h1><p>Kong 的集群在早期是通过 cluster 命令来创建和维护的，从 0.11 版本开始，变换了集群的搭建方式。参考文档 <a href="https://github.com/Kong/kong/blob/master/UPGRADE.md#upgrade-to-013x" target="_blank" rel="noopener">Kong 0.11 changeLog</a> 。</p><p>从 0.11 版本之后去除了 cluster 管理功能以后，Kong 变成了完全无状态，只要是连接到同一个 Kong 数据库的节点，都认为是同一个 Kong 集群而不需要额外的通信机制，因此也不需要在 kong.conf 文件中配置 cluster 参数。</p><p>Kong 集群的搭建就是把所有的 Kong 节点都连同一个 Kong 数据库就可以了，所有结果通过轮询机制去读取数据库来保证数据的一致性。</p><h1 id="缓存是什么"><a href="#缓存是什么" class="headerlink" title="缓存是什么"></a>缓存是什么</h1><p>所有的核心实体，如服务、路由、插件、消费者、凭证，都由Kong缓存在内存中，并依赖于它们通过要更新的轮询机制的失效。</p><p>此外，Kong还缓存数据库 的 misses。这意味着如果您配置一个没有插件的服务，Kong将缓存此信息。例子:</p><p>假设我们通过节点A的管理API向该服务添加一个插件：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"># node A</span><br><span class="line">$ curl -X POST http:&#x2F;&#x2F;127.0.0.1:8001&#x2F;services&#x2F;example-service&#x2F;plugins \</span><br><span class="line">    --data &quot;name&#x3D;example-plugin&quot;</span><br></pre></td></tr></table></figure><p>由于此请求是通过节点 A 的 Admin API 发出的，因此节点 A 将在本地使其缓存无效，并在随后的请求中检测到此 API 配置了插件。</p><p>此时，节点 B 还没有运行数据库同步更新缓存任务，并且仍然缓存这个 API 没有插件可以运行的数据。在节点B运行其数据库轮询作业之前，情况将一直如此。</p><p>结论:所有CRUD操作都会触发缓存失效。创建(POST、PUT)将使缓存数据库的错误失效，而更新/删除(PATCH、DELETE)将使缓存数据库的错误失效。</p><h1 id="如何配置数据库缓存"><a href="#如何配置数据库缓存" class="headerlink" title="如何配置数据库缓存"></a>如何配置数据库缓存</h1><p>可以在Kong配置文件中配置3个属性，其中最重要的一个属性是db_update_frequency，它决定了Kong节点在性能与一致性之间的权衡。　　</p><p>　　kong 已经提供了默认的配置，为了让你权衡集群性能和数据一致性两个方面，避免意外的结果。你可以按照下面的配置步骤，改变配置的值，从而确保性能和数据一致性能够被接受。</p><h2 id="1-db-update-frequency-default-5s"><a href="#1-db-update-frequency-default-5s" class="headerlink" title="1.db_update_frequency (default: 5s)"></a>1.db_update_frequency (default: 5s)</h2><p>该配置决定 kong 节点从数据库拉取更新缓存的时间间隔，同步任务执行的频率。值越小意味着同步任务将会执行的更频繁，Kong 节点的缓存数据将保持和数据库更强的一致性。值越大的时候，意味着你的 Kong 节点花更少的时间去处理同步任务，从而将更多的资源用来处理请求。</p><p>Note：变更将会在 <code>db_update_frequency</code> 秒后在整个集群节点中生效。</p><h2 id="2-db-update-propagation-default-0s"><a href="#2-db-update-propagation-default-0s" class="headerlink" title="2.db_update_propagation (default: 0s)"></a>2.db_update_propagation (default: 0s)</h2><p>如果你的数据库也是集群的并且最终一致性的（比如：Cassandra），你必须配置该值。它将确保 <code>db_update_propagation</code> 秒后，数据库节点间的变化在整个数据库集群中所有节点生效。当配置了该值，Kong 节点从同步任务中接收无效事件，清除本地缓存将会延迟 <code>db_update_propagation</code> 秒。</p><p>如果一个 Kong 节点连接到最终一致性数据库上，且没有延迟事件需要处理，它可能会清除缓存，然后把没有更新的值再次缓存起来。（因为这个改变还没有传播到数据库集群的每一个节点，注释：数据库一致性还没有在数据库集群中达到一致，此时 Kong 缓存到期了，但是没有更新到变化事件，此时会把没有更新的值再次缓存起来，导致 Kong 也出现不一致，即便 Kong 执行了同步任务。）。</p><p>你应该配置该值，通过评估数据库集群发生变更后，最终达到一致性所需要的时间。（确保数据库一致之后，才去执行 Kong 同步任务处理变更事件，从而达到 Kong 数据一致性）</p><p>Note：当配置了该配置项，数据变更传播到 Kong 集群的最大时间是 <code>db_update_frequency + db_update_propagation</code> 秒。</p><h2 id="3-db-cache-ttl-default-3600s"><a href="#3-db-cache-ttl-default-3600s" class="headerlink" title="3.db_cache_ttl (default: 3600s)"></a>3.db_cache_ttl (default: 3600s)</h2><p>该配置项的时间（单位秒）是 Kong 缓存数据库实体的时间（包括缓存命中或者穿透），该存活时间是一种保护措施，以防 Kong 节点漏掉处理缓存无效事件，避免旧数据长时间没有被清理。当缓存生存时间到了，缓存值将会被清理掉，下一次将会从数据库读取数据并再次缓存起来。</p><h2 id="4-当使用-Cassandra-数据库"><a href="#4-当使用-Cassandra-数据库" class="headerlink" title="4.当使用 Cassandra 数据库"></a>4.当使用 Cassandra 数据库</h2><p>如果使用 Cassandra 作为 Kong 的数据库，你必须配置 <code>db_update_propagation</code> 为一个非零值。由于 Cassandra 本身是最终一致性数据库，这将确保 Kong 节点不会过早地使本地缓存失效，仅仅当再次获取到一个不是最新值的时候。如果你使用了 Cassandra 但你没有配置该值时，Kong 将会输出一条警告日志。</p><p>此外，你可以配置 <code>cassandra_consistency</code> 的值为 <code>QUORUM</code> 或者 <code>LOCAL_QUORUM</code>，确保被 Kong 缓存的值是数据库中最新的。 </p><h1 id="小结"><a href="#小结" class="headerlink" title="小结"></a>小结</h1><p>本文讲解了 Kong 的集群相关的东西，如果由于某些原因，你希望通过 Kong 查看缓存的值，或者手动清理缓存（当缓存被命中或者丢失），你可以通过使用 Admin api 的 <code>/cache</code> 接口进行管理。</p><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Kong 集群允许您通过添加更多的机器来处理更多的传入请求来横向扩展系统。它们将共享相同的配置，因为它们指向相同的数据库。指向相同数据存储的 Kong 节点将属于相同的 Kong 集群。&lt;/p&gt;
&lt;p&gt;您需要在Kong集群前面安装一个负载平衡器，以便在可用节点之间分配流量。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Kong" scheme="https://erdong.site/categories/Kong/"/>
    
    
      <category term="Kong" scheme="https://erdong.site/tags/Kong/"/>
    
      <category term="cluster" scheme="https://erdong.site/tags/cluster/"/>
    
  </entry>
  
  <entry>
    <title>Kong 的健康检查和监控</title>
    <link href="https://erdong.site/Kong/kong-05.html"/>
    <id>https://erdong.site/Kong/kong-05.html</id>
    <published>2019-10-22T15:46:26.000Z</published>
    <updated>2019-10-22T15:52:23.474Z</updated>
    
    <content type="html"><![CDATA[<p>Kong 的健康检查和监控</p><p>您可以让 Kong 代理的 API 使用 ring-balancer ， 通过添加包含一个或多个目标实体的upstream 实体来配置，每个目标指向不同的IP地址(或主机名)和端口。ring-balancer 将在不同的target之间平衡负载，并基于 uptream 配置对目标执行健康检查，使它们成为健康或不健康的，无论它们是否响应，ring-balancer 将只把流量路由到健康的target。</p><a id="more"></a><p>Kong 支持两种健康检查方式，可以单独使用，也可以组合使用。</p><ul><li><p>active checks：其中定期请求目标中的特定 HTTP 或 HTTPS 端点，并根据其响应确定目标的健康状态;</p></li><li><p>passive checks： Kong 分析正在代理的通信，并根据目标的行为响应请求来确定目标的健康状况。</p></li></ul><h1 id="健康和不健康的-target"><a href="#健康和不健康的-target" class="headerlink" title="健康和不健康的 target"></a>健康和不健康的 target</h1><p>健康检查功能的目标是为给定的 Kong 节点动态地将 target 标记为健康或不健康。没有集群范围内的健康信息同步，每个 Kong 节点分别确定其 target 的健康状况。这是可以取到的，因为在给定的点上，一个 Kong 节点可能能够成功地连接到一个目标，而另一个节点则无法到达。这样第一个节点将认为它是健康的，而第二个则会将其标记为不健康，并开始将流量路由到upstream 的其他 target。</p><p>无论是主动探测(针对主动健康检查)还是代理请求(针对被动健康检查)，都会生成用于确定目标是否健康的数据。请求可能会产生TCP错误、超时或HTTP状态代码。基于此信息，健康检查器更新了一系列内部计数器:</p><ul><li>如果返回的状态码配置为 “healthy”，则将增加目标的 “Successes” 计数器，并清除其所有其他计数器;</li><li>如果连接失败，将增加目标的 “TCP failure”计数器，并清除 “Successes” 计数器;</li><li>如果超时，将增加目标的 “timeouts” 计数器并清除 “Successes” 计数器;</li><li>如果返回的状态代码配置为 “unhealthy”，它将增加目标的 “HTTP failures” 计数器，并清除 “Successes” 计数器。</li></ul><p>如果任何 “TCP failure”、“HTTP failure” 或 “timeout” 计数器达到其配置的阈值，则target 将被标记为不健康。</p><p>如果 “success” 计数器达到其配置的阈值，则 target 将被标记为健康。<br>如果一个 upstream 的所有 target 都是不健康，Kong 会将 upstream 的请求返回 <code>503 Service Unavailable</code> 。</p><blockquote><ol><li>健康检查只对状态是 active 的 target 执行，不修改 Kong 数据库中目标的活动状态。</li></ol></blockquote><blockquote><ol start="2"><li>不健康的 target 不会从 loadbalancer 中删除，因此在使用哈希算法时不会对balancer 布局产生任何影响(只会跳过它们)。</li></ol></blockquote><blockquote><ol start="3"><li>DNS警告和 Balancer 警告也适用于健康检查。如果对 target 使用主机名，需要确保DNS服务器始终为完整的 IP地址和名称，并且不限制响应。如果不这样做，可能会导致没有执行健康检查。</li></ol></blockquote><h1 id="健康检查的类型"><a href="#健康检查的类型" class="headerlink" title="健康检查的类型"></a>健康检查的类型</h1><p>健康检查有两种类型，分别是 <code>Active health checks</code> 和 <code>Passive health checks</code></p><h2 id="Active-health-checks"><a href="#Active-health-checks" class="headerlink" title="Active health checks"></a>Active health checks</h2><p>Active health checks 就是主动探测他们的健康状态。当 upstream 实体启用活动健康检查时，Kong 将定期向 upstream 的每个 target 的配置路径发出 HTTP 或 HTTPS 请求。这允许 Kong 根据探测结果自动启用和禁用 balancer 中的 target 。</p><p>Active health checks 的周期性是可以被配置的，当 target 是健康还是不健康。如果其中一个的interval值设置为零，则在相应的场景中禁用检查。如果两者都为零，则完全禁用活动健康检查。</p><h2 id="Passive-health-checks"><a href="#Passive-health-checks" class="headerlink" title="Passive health checks"></a>Passive health checks</h2><p>Passive health checks 是否基于由 Kong 代理的请求(HTTP/HTTPS/TCP)执行检查，而不生成额外的流量。当 target 变得无响应时，被动健康检查器将检测到这一点，并将目标标记为不健康。Ring-balancer 将开始跳过这个 target ，因此不会有更多的流量被路由到它。</p><p>当目标的问题解决，并准备再次接收流量时，Kong管理员可以手动通知health checker目标应该再次启用，通过一个Admin API端点:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">$ curl -i -X POST http:&#x2F;&#x2F;localhost:8001&#x2F;upstreams&#x2F;my_upstream&#x2F;targets&#x2F;10.1.2.3:1234&#x2F;healthy</span><br><span class="line">HTTP&#x2F;1.1 204 No Content</span><br></pre></td></tr></table></figure><p>这个命令将广播一个集群范围的消息，以便将 “health” 状态传播到整个 Kong 集群。这将导致 Kong 节点重置在 Kong 节点的所有 worker 中运行的健康检查器的健康计数器，从而允许环平衡器再次将流量路由到目标。</p><p>被动健康检查的优点是不会产生额外的流量，但它们不能自动将 target 重新标记为健康状态:“circuit is broken”，需要由系统管理员重新启用目标。</p><h1 id="Kong-的监控"><a href="#Kong-的监控" class="headerlink" title="Kong 的监控"></a>Kong 的监控</h1><p>Kong 支持使用 Prometheus 进行监控数据采集，并且官方提供了采集方式和 Grafana 的Dashboard 模板</p><p>官方的 <a href="https://github.com/Kong/kong-plugin-prometheus" target="_blank" rel="noopener">Kong Plugin Prometheus</a> 会定期更新，看上去比较活跃。</p><p>除了官网以外，有网友也提供了一个监控模板，不过最后一次更新时间是2018 年 5 月 17 日，之后就没有更新了，大家也可以参考。<a href="https://github.com/yciabaud/kong-plugin-prometheus" target="_blank" rel="noopener">kong-prometheus-plugin</a></p><h1 id="小结"><a href="#小结" class="headerlink" title="小结"></a>小结</h1><p>Kong 的健康检查主要介绍了健康检查的类型，这两类的健康检查是可以打开和关闭的，打开和关闭的具体方法请参考官网文档。</p><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Kong 的健康检查和监控&lt;/p&gt;
&lt;p&gt;您可以让 Kong 代理的 API 使用 ring-balancer ， 通过添加包含一个或多个目标实体的upstream 实体来配置，每个目标指向不同的IP地址(或主机名)和端口。ring-balancer 将在不同的target之间平衡负载，并基于 uptream 配置对目标执行健康检查，使它们成为健康或不健康的，无论它们是否响应，ring-balancer 将只把流量路由到健康的target。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Kong" scheme="https://erdong.site/categories/Kong/"/>
    
    
      <category term="Kong" scheme="https://erdong.site/tags/Kong/"/>
    
      <category term="Heath Check" scheme="https://erdong.site/tags/Heath-Check/"/>
    
  </entry>
  
  <entry>
    <title>Nginx、OpenResty、Kong 的基本概念和区别联系</title>
    <link href="https://erdong.site/Kong/kong-04.html"/>
    <id>https://erdong.site/Kong/kong-04.html</id>
    <published>2019-10-22T15:46:23.000Z</published>
    <updated>2019-10-22T15:51:27.471Z</updated>
    
    <content type="html"><![CDATA[<p>Nginx、OpenRestry、Kong 这三个项目关系比较紧密： </p><ul><li>Nginx 是模块化设计的反向代理软件，C语言开发； </li><li>OpenResty 是以 Nginx 为核心的 Web 开发平台，可以解析执行 Lua 脚本</li><li>Kong 是 OpenResty 的一个应用，是一个 API 网关，具有API管理和请求代理的功能。</li></ul><a id="more"></a><h1 id="Nginx"><a href="#Nginx" class="headerlink" title="Nginx"></a>Nginx</h1><p>Nginx  是一个高性能的 HTTP 和反向代理 web 服务器，同时也提供了 IMAP/POP3/SMTP 服务。Nginx 是由伊戈尔·赛索耶夫为俄罗斯访问量第二的 Rambler.ru 站点（俄文：Рамблер）开发的，第一个公开版本0.1.0发布于2004年10月4日。</p><p>Nginx 是一个高性能的 Web 和反向代理服务器, 它具有有很多非常优越的特性:</p><p>作为 Web 服务器：相比 Apache，Nginx 使用更少的资源，支持更多的并发连接，体现更高的效率，这点使 Nginx 尤其受到虚拟主机提供商的欢迎。能够支持高达 50,000 个并发连接数的响应，感谢 Nginx 为我们选择了 epoll and kqueue 作为开发模型.</p><p>作为负载均衡服务器：Nginx 既可以在内部直接支持 Rails 和 PHP，也可以支持作为 HTTP代理服务器 对外进行服务。Nginx 用 C 编写, 不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。</p><p>作为邮件代理服务器: Nginx 同时也是一个非常优秀的邮件代理服务器（最早开发这个产品的目的之一也是作为邮件代理服务器），Last.fm 描述了成功并且美妙的使用经验。</p><p>Nginx 安装非常的简单，配置文件 非常简洁（还能够支持perl语法），Bugs非常少的服务器: Nginx 启动特别容易，并且几乎可以做到7*24不间断运行，即使运行数个月也不需要重新启动。你还能够在 不间断服务的情况下进行软件版本的升级。</p><h1 id="OpenResty"><a href="#OpenResty" class="headerlink" title="OpenResty"></a>OpenResty</h1><p>OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台，其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。</p><p>OpenResty® 通过汇聚各种设计精良的 Nginx 模块（主要由 OpenResty 团队自主开发），从而将 Nginx 有效地变成一个强大的通用 Web 应用平台。这样，Web 开发人员和系统工程师可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块，快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系统。</p><p>OpenResty® 的目标是让你的Web服务直接跑在 Nginx 服务内部，充分利用 Nginx 的非阻塞 I/O 模型，不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。</p><h1 id="Kong"><a href="#Kong" class="headerlink" title="Kong"></a>Kong</h1><p>Kong 是 API 管理的强大效率工具。对需要从事 API 管理的广大开发员来说，它是最出色的工具之一。Kong 是开源工具，具有可扩展性和模块性，可以在任何一种基础设施上运行。多年来，Kong 一直在支持优秀的开发项目，比如 Mashape（世界上规模最大的API市场）。最棒的是，Kong得到了强大的 Nginx 的支持。</p><p>Kong的主要特性</p><ul><li><p>Kong 的扩展性：只要增添更多的服务器实例，它就能横向扩展，毫无问题，那样你可以支持更多流量，同时确保网络延迟很短。</p></li><li><p>Kong 的灵活性：它可以部署在单个或多个数据中心环境的私有云或公有云上。它还支持大多数流行的操作系统，比如Linux、Mac和Windows。Kong包括许多实用技巧，以便针对大多数现代平台完成安装和配置工作。</p></li><li><p>Kong 的模块性：它可以与新的插件协同运行，扩展基本功能。可将你的API与许多不同的插件整合起来，以增强安全、分析、验证、日志及/或监测机制。最好的例子之一就是Nginx Plus插件（<a href="https://getkong.org/plugins/nginx-plus-monitoring/），该插件提供了服务器实时监测机制，以获得关于负载和请求的度量指标和统计数字。" target="_blank" rel="noopener">https://getkong.org/plugins/nginx-plus-monitoring/），该插件提供了服务器实时监测机制，以获得关于负载和请求的度量指标和统计数字。</a></p></li><li><p>Kong 的生态：虽然 Kong 是开源工具，可供每个人免费使用，但你也能获得企业版，企业版通过电子邮件、电话和聊天提供了快速支持，此外还提供初始安装、从第三方API管理工具来迁移、紧急补丁、热修复程序及更多特性。</p></li></ul><h1 id="小结"><a href="#小结" class="headerlink" title="小结"></a>小结</h1><p>Nginx、OpenRestry、Kong 的关系就描述到这里。</p><h1 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h1><p><a href="https://www.lijiaocn.com/项目/2018/09/29/nginx-openresty-kong.html" target="_blank" rel="noopener">https://www.lijiaocn.com/项目/2018/09/29/nginx-openresty-kong.html</a></p><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Nginx、OpenRestry、Kong 这三个项目关系比较紧密： &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Nginx 是模块化设计的反向代理软件，C语言开发； &lt;/li&gt;
&lt;li&gt;OpenResty 是以 Nginx 为核心的 Web 开发平台，可以解析执行 Lua 脚本&lt;/li&gt;
&lt;li&gt;Kong 是 OpenResty 的一个应用，是一个 API 网关，具有API管理和请求代理的功能。&lt;/li&gt;
&lt;/ul&gt;
    
    </summary>
    
    
      <category term="Kong" scheme="https://erdong.site/categories/Kong/"/>
    
    
      <category term="Kong" scheme="https://erdong.site/tags/Kong/"/>
    
  </entry>
  
  <entry>
    <title>Kong 四大参考说明</title>
    <link href="https://erdong.site/Kong/kong-03.html"/>
    <id>https://erdong.site/Kong/kong-03.html</id>
    <published>2019-10-22T15:46:21.000Z</published>
    <updated>2019-10-22T15:50:23.522Z</updated>
    
    <content type="html"><![CDATA[<p>Kong 的官方有很多详细的参考说明，比如配置文件、命令行、Admin API、代理、负载均衡，接下来我们简单看一下，都提供什么内容。</p><p>本文主要基于 Kong 1.3 版本进行描述，如有更新，请查看最新文档。</p><a id="more"></a><h1 id="配置文件"><a href="#配置文件" class="headerlink" title="配置文件"></a>配置文件</h1><p>通过对配置文件的 深入理解，可以优化 Kong 集群、使用的数据库、配置 Nginx ，<br>官方的参考资料是 <a href="https://docs.konghq.com/1.3.x/configuration/" target="_blank" rel="noopener">Configuration Reference</a></p><p>Kong 在启动时，可以通过 <code>-c</code> 或者 <code>--conf</code>参数来指定配置文件，比如：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">kong start -c &#x2F;path&#x2F;to&#x2F;kong.conf</span><br></pre></td></tr></table></figure><p>可以使用 check 命令来校验配置文件的语法正确性，</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">$ kong check &lt;path&#x2F;to&#x2F;kong.conf&gt;</span><br><span class="line">configuration at &lt;path&#x2F;to&#x2F;kong.conf&gt;</span><br><span class="line"> is valid</span><br></pre></td></tr></table></figure><p>Kong 的配置在加载的时候也会去找同名的环境变量，所有也可以通过环境变量来配置 Kong，而且环境变量的优先级高于配置文件。可以通过环境变量来配置 Kong 这样方便了基于容器的部署和运行。如果要使用环境变量，需要以 <code>KONG_</code> 字段开头。</p><h1 id="命令行参考"><a href="#命令行参考" class="headerlink" title="命令行参考"></a>命令行参考</h1><p>所提供的CLI(命令行接口)允许您启动、停止和管理 Kong 实例。CLI 可以管理本地节点(如在当前机器上)。可以参考官网文档<br><a href="https://docs.konghq.com/1.3.x/cli/" target="_blank" rel="noopener">CLI Reference</a></p><p>主要由如下命令</p><h2 id="全局标记"><a href="#全局标记" class="headerlink" title="全局标记"></a>全局标记</h2><p>所有的命令都可以使用如下参数</p><ul><li>–help ： 打印命令的帮助信息</li><li>–v ： 打开详情模式</li><li>–vv ： 打开 debug 模式</li></ul><h2 id="可用的命令"><a href="#可用的命令" class="headerlink" title="可用的命令"></a>可用的命令</h2><ul><li>kong check 检查配置文件语法等等</li><li>kong config 使用申明式配置文件。</li><li>kong health 检查该节点上的 kong 是否在运行</li><li>kong migration 管理 Kong 的数据库</li><li>kong prepare 此命令准备Kong前缀文件夹及其子文件夹和文件。</li><li>kong quit 优雅的退出 Kong 实例</li><li>kong reload 重载 kong 实例配置</li><li>kong restart 重启 kong 实例</li><li>kong start 启动 kong 实例</li><li>kong stop 停止 kong 实例</li><li>kong version 打印版本信息</li></ul><h1 id="Admin-API-参考"><a href="#Admin-API-参考" class="headerlink" title="Admin API 参考"></a>Admin API 参考</h1><p>Admin API 的说明可以参考官网文档：<br><a href="https://docs.konghq.com/1.3.x/admin-api/" target="_blank" rel="noopener">Admin API Reference</a></p><p>Admin API 接受 2 两种连接类型在每个终端。<br>分别是</p><ul><li>application/x-www-from-urlencoded</li><li>application/json</li></ul><p>共有 9 个对象，分别是：</p><ul><li>Service Object</li><li>Route Object</li><li>Consumer Object</li><li>Plugin Object-Precedence</li><li>Certificate Object</li><li>CA Certificate Object</li><li>SNI Object</li><li>Upstream Object</li><li>Target Object</li></ul><h1 id="Proxy-参考"><a href="#Proxy-参考" class="headerlink" title="Proxy 参考"></a>Proxy 参考</h1><p>在本文档中，我们将通过详细解释Kong的路由功能和内部工作原理来介绍它的代理功能。</p><p>Kong 公开了几个接口，可以通过两个配置属性进行调整:</p><ul><li>proxy_listen，它定义了一个地址/端口列表，Kong将在这些地址/端口上接受来自客户机的公共通信，并将其代理到您的上游服务(默认为8000)。</li><li>admin_listen，它还定义了一个地址和端口列表，但是这些应该被限制为只能由管理员访问，因为它们公开了Kong的配置功能:Admin API(默认情况下为8001)。<br><a href="https://docs.konghq.com/1.3.x/proxy/" target="_blank" rel="noopener">Proxy Reference</a></li></ul><p>Kong 经常用到的术语有：</p><ul><li>client : 指下游客户向 Kong 代理端口发出请求。</li><li>upstream service ：指自己位于 Kong 后面的 API/Service，客户端请求被转发到这些API/Service。</li><li>Service : 顾名思义，服务实体是上游服务的抽象。服务的示例包括数据转换微服务、计费API等。</li><li>Route : 这是指 Kong 路由实体。Route 是进入 Kong 的入口点，并为要匹配的请求定义规则，然后路由到给定的服务。</li><li>Plugin : 指 Kong 的 “plugins”，它是在代理生命周期中运行的业务逻辑片段。插件可以通过管理 API 进行配置——可以是全局的(所有传入的流量)，也可以是在特定的路由和服务上配置。</li></ul><h1 id="负载均衡参考"><a href="#负载均衡参考" class="headerlink" title="负载均衡参考"></a>负载均衡参考</h1><p>Kong 为多个后端服务提供了多种负载平衡请求的方法: 一种简单的基于 DNS 的方法，另一种是更动态的环形平衡器，该平衡器还允许在不需要DNS服务器的情况下进行服务注册。</p><p>负载均衡可以参考官网文档<br><a href="https://docs.konghq.com/1.3.x/loadbalancing/" target="_blank" rel="noopener">Load Balancing Reference</a>  来了解。</p><h2 id="基于-DNS-的负载均衡"><a href="#基于-DNS-的负载均衡" class="headerlink" title="基于 DNS 的负载均衡"></a>基于 DNS 的负载均衡</h2><p>当使用基于 DNS 的负载平衡时，后端服务的注册是在 Kong 之外完成的，而 Kong 只接收来自 DNS 服务器的更新。</p><p>如果主机名没有解析为上游名称或 DNS 主机文件中的名称，则使用包含主机名(而不是IP地址)的主机定义的每个服务都将自动使用基于 DNS 的负载平衡。</p><p>DNS 记录 ttl 设置(生存时间)决定信息刷新的频率。当使用 ttl 为 0 时，每个请求都将使用自己的 DNS 查询进行解析。这将带来性能损失，但是更新/更改的延迟将非常低。</p><p>A 记录</p><p>一个 A 记录对应一个或者多个 IP 地址，因此，当主机名解析为 A 记录时，每个后端服务必须有自己的IP地址。</p><p>因为没有权重信息，所以所有条目在负载平衡器中都将被视为同等权重，并且平衡器将进行直接的循环。</p><p>SRV 记录<br>SRV记录包含所有IP地址的权重和端口信息。后端服务可以通过IP地址和端口号的唯一组合来标识。因此，一个IP地址可以在不同的端口上承载相同服务的多个实例。</p><p>因为权重信息是可用的，所以每个条目将在负载平衡器中获得自己的权重，并执行加权循环。</p><p>DNS 的优先级</p><p>1、前面解析的最后一个成功类型<br>2、SRV 记录<br>3、A记录<br>4、CNAME 记录</p><p>这些可以在配置文件的 <code>dns_order</code> 进行配置。</p><h2 id="基于-Ring-balancer-的负载均衡"><a href="#基于-Ring-balancer-的负载均衡" class="headerlink" title="基于 Ring-balancer 的负载均衡"></a>基于 Ring-balancer 的负载均衡</h2><p>使用 Ring-balancer 时，后端服务的添加和删除将由 Kong 处理，不需要 DNS 更新。Kong 将作为服务注册处。节点可以通过一个HTTP请求添加/删除，并将立即启动/停止接收流量。</p><p>配置 Ring-balancer 工作需要有 Upstream 和 target 两个实体。</p><ul><li>target ： 带有后端服务所在端口号的IP地址或主机名，例如。“192.168.100.12:80”。每个目标都获得一个额外的权重，以指示它获得的相对负载。IP地址可以是IPv4和IPv6格式。</li><li>upstream ： 一个 <code>virtual hostname</code>，可用于路由的 <code>host</code> 字段，例如一个 upstream 是 weather.v2 会收到服务 host=weather.v2.service 的所有请求。</li></ul><h1 id="小结"><a href="#小结" class="headerlink" title="小结"></a>小结</h1><p>本来大致讲述了 Kong 的配置文件、命令行、代理、负载均衡等内容。</p><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Kong 的官方有很多详细的参考说明，比如配置文件、命令行、Admin API、代理、负载均衡，接下来我们简单看一下，都提供什么内容。&lt;/p&gt;
&lt;p&gt;本文主要基于 Kong 1.3 版本进行描述，如有更新，请查看最新文档。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Kong" scheme="https://erdong.site/categories/Kong/"/>
    
    
      <category term="Kong" scheme="https://erdong.site/tags/Kong/"/>
    
  </entry>
  
  <entry>
    <title>KongA 介绍</title>
    <link href="https://erdong.site/Kong/kong-02.html"/>
    <id>https://erdong.site/Kong/kong-02.html</id>
    <published>2019-10-22T15:46:18.000Z</published>
    <updated>2019-10-22T15:50:45.179Z</updated>
    
    <content type="html"><![CDATA[<p>KongA 是 Kong 的一个 GUI 工具。GitHub 地址是 <a href="https://github.com/pantsel/konga" target="_blank" rel="noopener">https://github.com/pantsel/konga</a> 。</p><a id="more"></a><h1 id="KongA-概述"><a href="#KongA-概述" class="headerlink" title="KongA 概述"></a>KongA 概述</h1><p>KongA 带来的一个最大的便利就是可以很好地通过UI观察到现在 Kong 的所有的配置，并且可以对于管理 Kong 节点情况进行查看、监控和预警，KongA 主要特性如下：</p><ul><li>多用户管理</li><li>管理多个 Kong 节点</li><li>电子邮件异常信息通知</li><li>管理所有Kong Admin API</li><li>使用快照备份，还原和迁移Kong节点</li><li>使用运行状况检查监控节点和API状态</li><li>轻松的数据库集成（MySQL，postgresSQL，MongoDB）</li></ul><p>KongA 当前最新版本是 v0.14.1（update：2019.01.28），KongA 从 v0.14.0 开始，只支持 Kong 大于 v1.0.0 的版本。如果 Kong 的版本低于 v1.0.0 ，需要使用 konga:legacy 分支去构建发布版本。</p><p>KongA 的使用依赖如下内容：</p><ul><li>一个安装好，处于运行状态的 Kong</li><li>Nodejs &gt;= 8 （推荐使用 8.11.3 LTS 版本）</li><li>Npm</li></ul><p>KongA 的安装参考它在 GitHub 上的 <a href="https://github.com/pantsel/konga#installation" target="_blank" rel="noopener">Installation</a> 即可。</p><p>如果使用 Docker 进行安装的话，使用 Kong 创建的 Docker 网络，启动命令如下：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">docker run -p 1337:1337 \</span><br><span class="line">             --network kong-net \</span><br><span class="line">             --name konga \</span><br><span class="line">             -e &quot;NODE_ENV&#x3D;production&quot; \</span><br><span class="line">             pantsel&#x2F;konga:0.14.1</span><br></pre></td></tr></table></figure><p>启动后访问 1337 端口 即可访问 KongA 首页，并且可以注册自己的 KongA 账号。</p><p>这样启动的 KongA 可以快速使用，但是如果重新部署数据就丢失了，KongA 和 Kong 一样都可以使用外部数据库来做到数据持久化存储。在启动 KongA 的时候连接数据库，并且设置好数据库连接参数。</p><h1 id="KongA-基本使用"><a href="#KongA-基本使用" class="headerlink" title="KongA 基本使用"></a>KongA 基本使用</h1><h2 id="创建用户"><a href="#创建用户" class="headerlink" title="创建用户"></a>创建用户</h2><p>启动 KongA 以后，首先注册账户，如图所示：<br><img src="https://image.erdong.site/blog/2019/10/16/15694939314024.png" alt="KongA login"></p><h2 id="添加-Kong"><a href="#添加-Kong" class="headerlink" title="添加 Kong"></a>添加 Kong</h2><p>在 KongA 里需要先添加 Kong 才能使用。</p><p>KongA 左侧的菜单栏分为两大类，分别是 API GATEWAY 和 APPLICATION。在 APPLICATION 下有一个 CONNECTIONS 选项，在这个选项里新建一个 Kong 的连接，点击<code>NEW CONNECTION</code> 后选择认证类型，认证类型可以选择DEFAULT、KEY AUTH、JWT AUTH ，如果选择 DEFAULT 填入如下信息：</p><ul><li>NAME ：Kong 的名称，用来标识不同的 Kong。</li><li>KONG ADMIN URL ：填入 Kong 的 admin url，用来连接 Kong。</li></ul><p>填好以后点击 <code>CREATE CONNECTION</code> 来创建 Kong。</p><h2 id="KongA-的配置。"><a href="#KongA-的配置。" class="headerlink" title="KongA 的配置。"></a>KongA 的配置。</h2><p>KongA 连接好 Kong 以后，剩下的就是管理 Kong 了，主要需要配置 Services 、Routes、Upstream 三个部分。</p><p>Services 主要是配置 upstream 的地址，</p><p>Routes 主要配置请求到来之后不同的 path 路径按照不同的路由转发</p><p>Upstream 主要配置 url 的代理最后转发到的机器上，可以是一个，也可以是多个按照权重进行分配。除了转发以为，还可以配置健康检查。</p><h1 id="小结"><a href="#小结" class="headerlink" title="小结"></a>小结</h1><p>本文主要讲解了 KongA 的简单使用。</p><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;KongA 是 Kong 的一个 GUI 工具。GitHub 地址是 &lt;a href=&quot;https://github.com/pantsel/konga&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/pantsel/konga&lt;/a&gt; 。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Kong" scheme="https://erdong.site/categories/Kong/"/>
    
    
      <category term="Kong" scheme="https://erdong.site/tags/Kong/"/>
    
      <category term="KongA" scheme="https://erdong.site/tags/KongA/"/>
    
  </entry>
  
  <entry>
    <title>Kong 介绍</title>
    <link href="https://erdong.site/Kong/kong-01.html"/>
    <id>https://erdong.site/Kong/kong-01.html</id>
    <published>2019-10-22T15:44:49.000Z</published>
    <updated>2019-12-05T08:50:04.497Z</updated>
    
    <content type="html"><![CDATA[<h1 id="概述"><a href="#概述" class="headerlink" title="概述"></a>概述</h1><p>Kong 是在客户端和（微）服务间转发API通信的API网关，通过插件扩展功能。</p><p>Kong 的官方网站，<a href="https://konghq.com/kong" target="_blank" rel="noopener">https://konghq.com/kong</a><br>Kong 的官方 Github 站点：<a href="https://github.com/kong/kong" target="_blank" rel="noopener">https://github.com/kong/kong</a><br>Kong 有两个主要组件：</p><p>Kong Server ：基于 nginx 的服务器，用来接收 API 请求。<br>Apache Cassandra ：用来存储操作数据。</p><a id="more"></a><p>Kong 的数据存储支持两个组件，Cassandra 和 PostgreSQL 。</p><p>Kong 官方推荐的 GUI 工具叫 Kong-Dashboard，但是友好度不太好。</p><p>Kong 还有一个 GUI 的工具叫做 KongA，GitHub 地址是  <a href="https://github.com/pantsel/konga" target="_blank" rel="noopener">https://github.com/pantsel/konga</a>  。</p><p>你可以通过增加更多 Kong Server 机器对 Kong 服务进行水平扩展，通过前置的负载均衡器向这些机器分发请求。根据文档描述，两个Cassandra节点就足以支撑绝大多数情况，但如果网络非常拥挤，可以考虑适当增加更多节点。</p><p>对于开源社区来说，Kong 中最诱人的一个特性是可以通过插件扩展已有功能，这些插件在 API 请求响应循环的生命周期中被执行。插件使用 Lua 编写，而且 Kong 还有如下几个基础功能：HTTP 基本认证、密钥认证、CORS（ Cross-origin Resource Sharing，跨域资源共享）、TCP、UDP、文件日志、API 请求限流、请求转发以及 nginx 监控。</p><p>Kong 包可运行在部分的 Linux 发行版（包括CentOS、RHEL、Debian、Ubuntu）、Mac OS X 和 Docker 、Kubernetes、AWS-cloud、Google-Cloud 中，无论是本地机还是云端服务器皆可运行。</p><p>除了免费的开源版本，Mashape 还提供了付费的企业版，其中包括技术支持、使用培训服务以及 API 分析插件。</p><h1 id="基于-rpm-安装"><a href="#基于-rpm-安装" class="headerlink" title="基于 rpm 安装"></a>基于 rpm 安装</h1><p>当前基于 CentOS 7 进行安装。</p><p>下载软件包可以从官方地址下载</p><p><a href="https://konghq.com/install/" target="_blank" rel="noopener">https://konghq.com/install/</a></p><p>CentOS 7 的 rpm 包可以从以下地址找到</p><p><a href="https://kong.bintray.com/kong-rpm/centos/7/" target="_blank" rel="noopener">https://kong.bintray.com/kong-rpm/centos/7/</a></p><p>比如最近发布的 1.4.0 版本</p><p><a href="https://kong.bintray.com/kong-rpm/centos/7/kong-1.4.0.el7.noarch.rpm" target="_blank" rel="noopener">https://kong.bintray.com/kong-rpm/centos/7/kong-1.4.0.el7.noarch.rpm</a></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">yum install kong-1.4.0.el7.noarch.rpm</span><br></pre></td></tr></table></figure><h2 id="安装数据存储的数据库"><a href="#安装数据存储的数据库" class="headerlink" title="安装数据存储的数据库"></a>安装数据存储的数据库</h2><p>Kong 在运行过程中可以有数据库，也可以没有数据库。</p><p>如果你要使用数据库，你需要使用 <code>kong.conf</code> 配置文件中去配置启动数据库作为数据存储的方式，以及相应的路由或者 Kong 的代理。</p><p>如果你不需要使用数据数据库，那么你在   <code>kong.conf</code> 文件中指定一个 <code>kong.yml</code>的声明式配置文件来作为数据存储的文件。</p><p>Kong 支持 PostgreSQL 9.5+ 和 Cassandra 3.xx 来作为他的数据存储数据库。</p><p>如果使用数据库：</p><p>如果你使用 PostgreSQL ，需要初始化一个数据库和一个用户，例如：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">CREATE USER kong; CREATE DATABASE kong OWNER kong;</span><br></pre></td></tr></table></figure><p>现在 运行 Kong migrations</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">kong migrations bootstrap [-c &#x2F;path&#x2F;to&#x2F;kong.conf]</span><br></pre></td></tr></table></figure><p>如果不使用数据库：</p><p>如果要以无db模式运行Kong，应该首先生成声明性配置文件。使用下面的命令在当前的文件夹下，生成一个普通的 <code>kong.yml</code> </p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">kong config init</span><br></pre></td></tr></table></figure><p>在生成好 <code>kong.yml</code> 文件后，编辑你的 <code>kong.conf</code> 文件，设置如下参数：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">database &#x3D; off</span><br><span class="line">declarative_config &#x3D; &#x2F;path&#x2F;to&#x2F;kong.yml</span><br></pre></td></tr></table></figure><h2 id="启动-kong"><a href="#启动-kong" class="headerlink" title="启动 kong"></a>启动 kong</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">kong start [-c &#x2F;path&#x2F;to&#x2F;kong.conf]</span><br></pre></td></tr></table></figure><p>如果要停止，请使用如下命令来停止</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">kong stop</span><br></pre></td></tr></table></figure><p>重载命令是 </p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">kong reload</span><br></pre></td></tr></table></figure><h2 id="使用-Kong"><a href="#使用-Kong" class="headerlink" title="使用 Kong"></a>使用 Kong</h2><p>Kong 默认运行在本地的 8001 端口</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curl -i http:&#x2F;&#x2F;localhost:8001&#x2F;</span><br></pre></td></tr></table></figure><h1 id="基于-Docker-安装-Kong"><a href="#基于-Docker-安装-Kong" class="headerlink" title="基于 Docker 安装 Kong"></a>基于 Docker 安装 Kong</h1><h2 id="使用数据库"><a href="#使用数据库" class="headerlink" title="使用数据库"></a>使用数据库</h2><p>接下来可以快速的连接到 Kong 容器以及他的数据库容器。</p><h3 id="创建-Docker-网络"><a href="#创建-Docker-网络" class="headerlink" title="创建 Docker 网络"></a>创建 Docker 网络</h3><p>需要创建一个自定义的网络，运行容器发现并且彼此之间通信，接下来创建一个名称为 <code>kong-net</code> 的网络，也可以使用其他名称。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker network create kong-net</span><br></pre></td></tr></table></figure><h3 id="启动数据库"><a href="#启动数据库" class="headerlink" title="启动数据库"></a>启动数据库</h3><p>如果你想要使用 Cassandra 容器</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">docker run -d --name kong-database \</span><br><span class="line">              --network&#x3D;kong-net \</span><br><span class="line">              -p 9042:9042 \</span><br><span class="line">              cassandra:3</span><br></pre></td></tr></table></figure><p>如果你想要使用 PostgreSQL  容器</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">docker run -d --name kong-database \</span><br><span class="line">              --network&#x3D;kong-net \</span><br><span class="line">              -p 5432:5432 \</span><br><span class="line">              -e &quot;POSTGRES_USER&#x3D;kong&quot; \</span><br><span class="line">              -e &quot;POSTGRES_DB&#x3D;kong&quot; \</span><br><span class="line">              postgres:9.6</span><br></pre></td></tr></table></figure><h3 id="初始化数据库"><a href="#初始化数据库" class="headerlink" title="初始化数据库"></a>初始化数据库</h3><p>运行 migrations 使用一个短暂的 Kong 容器</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">docker run --rm \</span><br><span class="line">     --network&#x3D;kong-net \</span><br><span class="line">     -e &quot;KONG_DATABASE&#x3D;postgres&quot; \</span><br><span class="line">     -e &quot;KONG_PG_HOST&#x3D;kong-database&quot; \</span><br><span class="line">     -e &quot;KONG_CASSANDRA_CONTACT_POINTS&#x3D;kong-database&quot; \</span><br><span class="line">     kong:latest kong migrations bootstrap</span><br></pre></td></tr></table></figure><p>在上边的示例中，需要你自行修改你的 <code>KONG_DATABASE</code> 参数。</p><h3 id="启动-Kong"><a href="#启动-Kong" class="headerlink" title="启动 Kong"></a>启动 Kong</h3><p>当 migration 已经执行，并且数据库已经准备好，启动 Kong 容器来连接数据库容器，比如：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">docker run -d --name kong \</span><br><span class="line">     --network&#x3D;kong-net \</span><br><span class="line">     -e &quot;KONG_DATABASE&#x3D;postgres&quot; \</span><br><span class="line">     -e &quot;KONG_PG_HOST&#x3D;kong-database&quot; \</span><br><span class="line">     -e &quot;KONG_CASSANDRA_CONTACT_POINTS&#x3D;kong-database&quot; \</span><br><span class="line">     -e &quot;KONG_PROXY_ACCESS_LOG&#x3D;&#x2F;dev&#x2F;stdout&quot; \</span><br><span class="line">     -e &quot;KONG_ADMIN_ACCESS_LOG&#x3D;&#x2F;dev&#x2F;stdout&quot; \</span><br><span class="line">     -e &quot;KONG_PROXY_ERROR_LOG&#x3D;&#x2F;dev&#x2F;stderr&quot; \</span><br><span class="line">     -e &quot;KONG_ADMIN_ERROR_LOG&#x3D;&#x2F;dev&#x2F;stderr&quot; \</span><br><span class="line">     -e &quot;KONG_ADMIN_LISTEN&#x3D;0.0.0.0:8001, 0.0.0.0:8444 ssl&quot; \</span><br><span class="line">     -p 8000:8000 \</span><br><span class="line">     -p 8443:8443 \</span><br><span class="line">     -p 8001:8001 \</span><br><span class="line">     -p 8444:8444 \</span><br><span class="line">     kong:latest</span><br></pre></td></tr></table></figure><h3 id="使用-Kong-1"><a href="#使用-Kong-1" class="headerlink" title="使用 Kong"></a>使用 Kong</h3><p>Kong 运行在 8001</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curl -i http:&#x2F;&#x2F;localhost:8001&#x2F;</span><br></pre></td></tr></table></figure><h2 id="无数据库模式"><a href="#无数据库模式" class="headerlink" title="无数据库模式"></a>无数据库模式</h2><h3 id="创建-Docker-网络-1"><a href="#创建-Docker-网络-1" class="headerlink" title="创建 Docker 网络"></a>创建 Docker 网络</h3><p>需要创建一个自定义的网络，运行容器发现并且彼此之间通信，接下来创建一个名称为 <code>kong-net</code> 的网络，也可以使用其他名称。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker network create kong-net</span><br></pre></td></tr></table></figure><p>在没有数据库的模式下，不一定需要创建一个专用的网络，但是创建以后可以更好的用来添加其他内容，比如 Redis 集群支持的限速插件。</p><h3 id="创建-Docker-卷"><a href="#创建-Docker-卷" class="headerlink" title="创建 Docker 卷"></a>创建 Docker 卷</h3><p>对于本指南的目的，Docker 卷是主机内的一个文件夹。可以将其映射到容器中的文件夹，我们给卷起一个名字，叫 kong-vol</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker volume create kong-vol</span><br></pre></td></tr></table></figure><p>使用 如下命令查看 卷的 挂载点路径</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">$ docker volume inspect kong-vol</span><br><span class="line">[</span><br><span class="line">    &#123;</span><br><span class="line">        &quot;CreatedAt&quot;: &quot;2019-05-28T12:40:09Z&quot;,</span><br><span class="line">        &quot;Driver&quot;: &quot;local&quot;,</span><br><span class="line">        &quot;Labels&quot;: &#123;&#125;,</span><br><span class="line">        &quot;Mountpoint&quot;: &quot;&#x2F;var&#x2F;lib&#x2F;docker&#x2F;volumes&#x2F;kong-vol&#x2F;_data&quot;,</span><br><span class="line">        &quot;Name&quot;: &quot;kong-vol&quot;,</span><br><span class="line">        &quot;Options&quot;: &#123;&#125;,</span><br><span class="line">        &quot;Scope&quot;: &quot;local&quot;</span><br><span class="line">    &#125;</span><br><span class="line">]</span><br></pre></td></tr></table></figure><p>记录 MountPoint 的路径，下边会用到。</p><h3 id="初始化配置文件"><a href="#初始化配置文件" class="headerlink" title="初始化配置文件"></a>初始化配置文件</h3><p>按照声明是配置文件的规范进行修改配置文件，添加必要的配置项，比如 serveice、route、plugins、consumer 等等，保存配置文件在 MountPoint 的路径下，本文会放在 <code>/var/lib/docker/volumes/kong-vol/_data/kong.yml</code></p><h3 id="在无数据库模式下启动-Kong"><a href="#在无数据库模式下启动-Kong" class="headerlink" title="在无数据库模式下启动 Kong"></a>在无数据库模式下启动 Kong</h3><p>使用如下命令启动 Kong ，并且使用 <code>-v</code> 参数挂载数据卷，使用 <code>-e</code> 参数指定必须的环境变量。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">$ docker run -d --name kong \</span><br><span class="line">     --network&#x3D;kong-net \</span><br><span class="line">     -v &quot;kong-vol:&#x2F;usr&#x2F;local&#x2F;kong&#x2F;declarative&quot; \</span><br><span class="line">     -e &quot;KONG_DATABASE&#x3D;off&quot; \</span><br><span class="line">     -e &quot;KONG_DECLARATIVE_CONFIG&#x3D;&#x2F;usr&#x2F;local&#x2F;kong&#x2F;declarative&#x2F;kong.yml&quot; \</span><br><span class="line">     -e &quot;KONG_PROXY_ACCESS_LOG&#x3D;&#x2F;dev&#x2F;stdout&quot; \</span><br><span class="line">     -e &quot;KONG_ADMIN_ACCESS_LOG&#x3D;&#x2F;dev&#x2F;stdout&quot; \</span><br><span class="line">     -e &quot;KONG_PROXY_ERROR_LOG&#x3D;&#x2F;dev&#x2F;stderr&quot; \</span><br><span class="line">     -e &quot;KONG_ADMIN_ERROR_LOG&#x3D;&#x2F;dev&#x2F;stderr&quot; \</span><br><span class="line">     -e &quot;KONG_ADMIN_LISTEN&#x3D;0.0.0.0:8001, 0.0.0.0:8444 ssl&quot; \</span><br><span class="line">     -p 8000:8000 \</span><br><span class="line">     -p 8443:8443 \</span><br><span class="line">     -p 8001:8001 \</span><br><span class="line">     -p 8444:8444 \</span><br><span class="line">     kong:latest</span><br></pre></td></tr></table></figure><h3 id="使用-Kong-2"><a href="#使用-Kong-2" class="headerlink" title="使用 Kong"></a>使用 Kong</h3><p>Kong 启动后，就可以使用了，可以使用如下方式来访问 Kong</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curl -i http:&#x2F;&#x2F;localhost:8001&#x2F;</span><br></pre></td></tr></table></figure><p>比如，获取一个service 的列表</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curl -i http:&#x2F;&#x2F;localhost:8001&#x2F;services</span><br></pre></td></tr></table></figure><h1 id="Kong-的默认端口"><a href="#Kong-的默认端口" class="headerlink" title="Kong 的默认端口"></a>Kong 的默认端口</h1><p>Kong 一切正常，启动以后会默认监听如下端口</p><ul><li><code>:8000</code> Kong 监听来自客户端的传入 HTTP 请求，并将其转发到上游服务。</li><li><code>:8443</code> Kong 监听来自 HTTPS 流量，这个端口的行为类似于 <code>:8000</code>，只是用来监控 HTTPS 的请求，没有转发功能，这个端口可以在配置文件里关闭。</li><li><code>:8001</code> Admin API 接口用来对 Kong 的监听服务进行配置。</li><li><code>:8444</code> Admin API 监听 HTTPS 的流量。</li></ul><h1 id="小结"><a href="#小结" class="headerlink" title="小结"></a>小结</h1><p>本文描述了 Kong 是什么，以及如何在 CentOS 下和 Docker 下进行安装。Kong 是 OpenResty 的一个应用组件，如果要从源码安装 Kong 的话，需要先安装 OpenResty，具体参考 <a href="https://docs.konghq.com/install/source/?_ga=2.5871988.63313777.1569377530-595520565.1569377530" target="_blank" rel="noopener">Compile Source</a></p><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;h1 id=&quot;概述&quot;&gt;&lt;a href=&quot;#概述&quot; class=&quot;headerlink&quot; title=&quot;概述&quot;&gt;&lt;/a&gt;概述&lt;/h1&gt;&lt;p&gt;Kong 是在客户端和（微）服务间转发API通信的API网关，通过插件扩展功能。&lt;/p&gt;
&lt;p&gt;Kong 的官方网站，&lt;a href=&quot;https://konghq.com/kong&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://konghq.com/kong&lt;/a&gt;&lt;br&gt;Kong 的官方 Github 站点：&lt;a href=&quot;https://github.com/kong/kong&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/kong/kong&lt;/a&gt;&lt;br&gt;Kong 有两个主要组件：&lt;/p&gt;
&lt;p&gt;Kong Server ：基于 nginx 的服务器，用来接收 API 请求。&lt;br&gt;Apache Cassandra ：用来存储操作数据。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Kong" scheme="https://erdong.site/categories/Kong/"/>
    
    
      <category term="Kong" scheme="https://erdong.site/tags/Kong/"/>
    
  </entry>
  
  <entry>
    <title>第33周分享</title>
    <link href="https://erdong.site/weekly/weekly33.html"/>
    <id>https://erdong.site/weekly/weekly33.html</id>
    <published>2019-10-20T15:16:59.000Z</published>
    <updated>2019-10-20T15:18:43.988Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="资源"><a href="#资源" class="headerlink" title="资源"></a>资源</h1><h2 id="1-50-days-from-zero-to-hero-with-kubernetes"><a href="#1-50-days-from-zero-to-hero-with-kubernetes" class="headerlink" title="1. 50 days from zero to hero with kubernetes"></a>1. <a href="https://azure.microsoft.com/mediahandler/files/resourcefiles/kubernetes-learning-path/Kubernetes%20Learning%20Path%20version%201.0.pdf" target="_blank" rel="noopener">50 days from zero to hero with kubernetes</a></h2><p>微软出品的 Kubernetes 学习路径，用 50 天来完成整个学习过程。</p><h2 id="2-Uber-Go语言编码规范"><a href="#2-Uber-Go语言编码规范" class="headerlink" title="2. Uber Go语言编码规范"></a>2. <a href="https://mp.weixin.qq.com/s/LYLLghOjevBDieAM_LKrjA" target="_blank" rel="noopener">Uber Go语言编码规范</a></h2><p>Uber是世界领先的生活出行服务提供商，也是Go语言的早期adopter，根据Uber工程博客的内容，大致可以判断出Go语言在Uber内部扮演了十分重要的角色。Uber内部的Go语言工程实践也是硕果累累，有大量Go实现的内部工具被Uber开源到github上，诸如被Gopher圈熟知的zap、jaeger等。2018年年末Uber将内部的Go风格规范开源到github，经过一年的积累和更新，该规范已经初具规模，并受到广大Gopher的关注。本文是该规范的中文版本，并”夹带“了部分笔者的点评，希望对国内Gopher有所帮助。</p><h2 id="3-SaltStack-Chinese-ManualBook"><a href="#3-SaltStack-Chinese-ManualBook" class="headerlink" title="3.SaltStack-Chinese-ManualBook"></a>3.<a href="https://github.com/watermelonbig/SaltStack-Chinese-ManualBook" target="_blank" rel="noopener">SaltStack-Chinese-ManualBook</a></h2><p>作者 watermelonbig 基于 SaltStack 官网英文文档翻译的中文用户手册。</p><h2 id="4-Salt-Tiger"><a href="#4-Salt-Tiger" class="headerlink" title="4. Salt Tiger"></a>4. <a href="https://salttiger.com/archives/" target="_blank" rel="noopener">Salt Tiger</a></h2><p>作者 Salt Tiger ，网站收集计算机类的电子书，已经有 2000多本，可以下载查看。</p><h2 id="5-Kubernetes-中文社区"><a href="#5-Kubernetes-中文社区" class="headerlink" title="5. Kubernetes 中文社区"></a>5. <a href="https://www.kubernetes.org.cn" target="_blank" rel="noopener">Kubernetes 中文社区</a></h2><p>Kubernetes 中文社区是包含大量 K8S 中文资料的社区，可以经常查看。</p><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
      <category term="weekly" scheme="https://erdong.site/tags/weekly/"/>
    
  </entry>
  
  <entry>
    <title>Prometheus 2.13.0 新特性</title>
    <link href="https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-13-0.html"/>
    <id>https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-13-0.html</id>
    <published>2019-10-16T15:17:11.000Z</published>
    <updated>2019-10-16T15:19:40.005Z</updated>
    
    <content type="html"><![CDATA[<p>Prometheus <a href="https://github.com/prometheus/prometheus/releases/tag/v2.13.0" target="_blank" rel="noopener">2.13.0</a> 现在(2019.10.04)已经发布，在上个月的 <a href="http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-12-0.html">2.12.0</a> 之后又进行了一些修正和改进。</p><a id="more"></a><p>这个版本的变化相对较小。tsdb 工具已经包含在这个版本中了，但是请注意，它很可能会在2.14.0的时候被包含到 promtool 中。</p><p>counter 类型的 <code>prometheus_sd_configs_failed_total</code> 已经被 gauge 类型的 <code>prometheus_sd_failed_configs</code> 替换。</p><p>远程读写的性能有了改进。远程读取的改进主要针对使用 Thanos 的用户，因为它们允许提取整个块而不是一个样本一个样本。远程写还为其队列管理器提供了一些新的指标。</p><p>表达式浏览器现在将显示它从查询API接收到的警告。Promtool指标linting有一些新的警告，并改进了坏规则的错误消息。</p><p>有一个安全更新，修复了一个 Stored DOM XSS 的带有历史查询的漏洞，CVE 编号是 CVE-2019-10215 。</p><p>针对 Kubernetes ，新增了一个节点地址类型用于服务发现方面。</p><p>详细的发行注记可以查看 <a href="https://github.com/prometheus/prometheus/releases/tag/v2.13.0" target="_blank" rel="noopener">release notes</a> 。</p><h1 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h1><ul><li><a href="https://www.robustperception.io/new-features-in-prometheus-2-13-0" target="_blank" rel="noopener">https://www.robustperception.io/new-features-in-prometheus-2-13-0</a> ， By Brian Brazil</li><li><a href="https://github.com/prometheus/prometheus/releases/tag/v2.13.0" target="_blank" rel="noopener">https://github.com/prometheus/prometheus/releases/tag/v2.13.0</a> ，By prombot of GitHub </li></ul><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Prometheus &lt;a href=&quot;https://github.com/prometheus/prometheus/releases/tag/v2.13.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2.13.0&lt;/a&gt; 现在(2019.10.04)已经发布，在上个月的 &lt;a href=&quot;http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-12-0.html&quot;&gt;2.12.0&lt;/a&gt; 之后又进行了一些修正和改进。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="New-Features" scheme="https://erdong.site/categories/Prometheus/New-Features/"/>
    
    
      <category term="Prometheus" scheme="https://erdong.site/tags/Prometheus/"/>
    
      <category term="Features" scheme="https://erdong.site/tags/Features/"/>
    
      <category term="release" scheme="https://erdong.site/tags/release/"/>
    
  </entry>
  
  <entry>
    <title>第32周分享</title>
    <link href="https://erdong.site/weekly/weekly32.html"/>
    <id>https://erdong.site/weekly/weekly32.html</id>
    <published>2019-10-13T07:06:24.000Z</published>
    <updated>2019-10-14T15:17:25.182Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="新闻"><a href="#新闻" class="headerlink" title="新闻"></a>新闻</h1><h2 id="1-cncf-新增了应用发布-SIG"><a href="#1-cncf-新增了应用发布-SIG" class="headerlink" title="1. cncf 新增了应用发布 SIG"></a>1. <a href="https://github.com/cncf/sig-app-delivery" target="_blank" rel="noopener">cncf 新增了应用发布 SIG</a></h2><pre><code>应用程序交付SIG专注于交付云本地应用程序，它涉及多个阶段，包括构建、部署、管理和操作。此外，团体为最终用户提供支持材料和最佳实践，并为团体范围内的 CNCF 项目提供指导和协调。</code></pre><h2 id="2-CentOS-8-发布"><a href="#2-CentOS-8-发布" class="headerlink" title="2. CentOS 8 发布"></a>2. <a href="https://wiki.centos.org/Manuals/ReleaseNotes/CentOS8.1905" target="_blank" rel="noopener">CentOS 8 发布</a></h2><p>CentOS 在 2019 年 9 月 25 日 发布了 8.0 版本，build 号是 1905 。相较于其他的大版本，这次的 8.0 新增了 stream 版本，可以滚动升级，发行注记 是 <a href="https://wiki.centos.org/Manuals/ReleaseNotes/CentOSStream" target="_blank" rel="noopener">https://wiki.centos.org/Manuals/ReleaseNotes/CentOSStream</a>  。</p><p>从资源占用角度来看，CentOS 7 要求最小内存是 1280MB，CentOS 8 要求最小是 2GB。</p><p>发行版本上，CentOS 7 发布了 DVD、Everthing、Mini 等多种版本，CentOS 8 目前只有 DVD 版本可以下载，其他版本发布与否以及发布时间尚未知晓。</p><h2 id="3-键盘厂商-cherry-联合华为推出了手机机械键盘，在手机上使用线圈马达模拟机械键盘的手感和音效。"><a href="#3-键盘厂商-cherry-联合华为推出了手机机械键盘，在手机上使用线圈马达模拟机械键盘的手感和音效。" class="headerlink" title="3. 键盘厂商 cherry 联合华为推出了手机机械键盘，在手机上使用线圈马达模拟机械键盘的手感和音效。"></a>3. 键盘厂商 cherry 联合华为推出了手机机械键盘，在手机上使用线圈马达模拟机械键盘的手感和音效。</h2><h1 id="工具"><a href="#工具" class="headerlink" title="工具"></a>工具</h1><h2 id="1-Kong"><a href="#1-Kong" class="headerlink" title="1. Kong"></a>1. <a href="https://konghq.com/" target="_blank" rel="noopener">Kong</a></h2><p>Kong 是 API 管理的强大效率工具。对需要从事 API 管理的广大开发员来说，它是最出色的工具之一。Kong 是开源工具，具有可扩展性和模块性，可以在任何一种基础设施上运行。多年来，Kong 一直在支持优秀的开发项目，比如 Mashape（世界上规模最大的API市场）。</p><h2 id="2-KongA"><a href="#2-KongA" class="headerlink" title="2. KongA"></a>2. <a href="https://github.com/pantsel/konga" target="_blank" rel="noopener">KongA</a></h2><p>KongA 带来的一个最大的便利就是可以很好地通过 UI 观察到现在 Kong 的所有的配置，并且可以对于管理 Kong 节点情况进行查看、监控和预警，konga主要特性如下：</p><ul><li>多用户管理</li><li>管理多个Kong节点</li><li>电子邮件异常信息通知</li><li>管理所有Kong Admin API</li><li>使用快照备份，还原和迁移Kong节点</li><li>使用运行状况检查监控节点和API状态</li><li>轻松的数据库集成</li></ul><h1 id="资源"><a href="#资源" class="headerlink" title="资源"></a>资源</h1><h2 id="1-Getting-started-with-Python"><a href="#1-Getting-started-with-Python" class="headerlink" title="1. Getting started with Python"></a>1. <a href="https://github.com/microsoft/c9-python-getting-started" target="_blank" rel="noopener">Getting started with Python</a></h2><p>微软的第九频道的系列视频旨在帮助您快速了解Python。如果您是一个初学者，希望将Python添加到您的语言库中，或者尝试开始一个数据科学或web项目，这些视频可以帮助您了解快速入门或其他教程所需的基础知识。</p><p>目前这套视频教程包括 18 类内容，旨在帮助快速了解 Python。</p><p>你能学到：</p><ul><li>Python 3.x 的基础知识</li><li>如何开始一个项目</li><li>Python常见语法</li><li>包管理</li></ul><p>这套教程不讲的东西有：</p><ul><li>Python 类设计和继承</li><li>异步编程</li><li>编程基本知识</li></ul><h2 id="2-Distro-Test"><a href="#2-Distro-Test" class="headerlink" title="2. Distro Test"></a>2. <a href="https://distrotest.net/" target="_blank" rel="noopener">Distro Test</a></h2><h1 id="首发在线操作系统测试网站，网站收录了-200-Linux-发行版操作系统，可以在线体验各个版本的特性，网站通过-noVNC-来提供图形给用户。"><a href="#首发在线操作系统测试网站，网站收录了-200-Linux-发行版操作系统，可以在线体验各个版本的特性，网站通过-noVNC-来提供图形给用户。" class="headerlink" title="首发在线操作系统测试网站，网站收录了 200+ Linux 发行版操作系统，可以在线体验各个版本的特性，网站通过 noVNC 来提供图形给用户。"></a>首发在线操作系统测试网站，网站收录了 200+ Linux 发行版操作系统，可以在线体验各个版本的特性，网站通过 noVNC 来提供图形给用户。</h1><p>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
      <category term="weekly" scheme="https://erdong.site/tags/weekly/"/>
    
  </entry>
  
  <entry>
    <title>第31周分享</title>
    <link href="https://erdong.site/weekly/weekly31.html"/>
    <id>https://erdong.site/weekly/weekly31.html</id>
    <published>2019-09-29T07:06:24.000Z</published>
    <updated>2019-10-14T15:16:02.342Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="新闻"><a href="#新闻" class="headerlink" title="新闻"></a>新闻</h1><h2 id="1-首届微软Linux大会于2020年3月10日至11日举行"><a href="#1-首届微软Linux大会于2020年3月10日至11日举行" class="headerlink" title="1. 首届微软Linux大会于2020年3月10日至11日举行"></a>1. <a href="http://t.zijieimg.com/mdyoo1/" target="_blank" rel="noopener">首届微软Linux大会于2020年3月10日至11日举行</a></h2><p>微软宣布了Linux用户梦寐以求的东西，这就是针对WSL（Linux Windows子系统）的第一次微软Linux大会。WSL是由微软设计的兼容层，允许用户在Windows 10和Windows Server 2019操作系统上安装GNU / Linux发行版并本机运行Linux二进制文件。</p><p>WSL 2是Linux的Windows子系统最新版本，今年夏天早些时候由微软宣布推出，它引入了一些主要的新功能，例如全新的体系结构，它使用真正的内部构建的Linux内核，以及完整的系统调用兼容性，以便运行更多Linux应用程序。</p><h2 id="2-stackoverflow-2019-开发者调查"><a href="#2-stackoverflow-2019-开发者调查" class="headerlink" title="2. stackoverflow 2019 开发者调查"></a>2. <a href="https://insights.stackoverflow.com/survey/2019" target="_blank" rel="noopener">stackoverflow 2019 开发者调查</a></h2><p>stackoverflow 今年的开发者调查已经发布了，大家可以一睹为快了。</p><h1 id="教程"><a href="#教程" class="headerlink" title="教程"></a>教程</h1><h2 id="1-一文读懂什么是进程、线程、协程"><a href="#1-一文读懂什么是进程、线程、协程" class="headerlink" title="1. 一文读懂什么是进程、线程、协程"></a>1. <a href="https://www.cnblogs.com/Survivalist/p/11527949.html" target="_blank" rel="noopener">一文读懂什么是进程、线程、协程</a></h2><p>解释了什么是进程、线程、协程。</p><h2 id="2-Learning-Rust"><a href="#2-Learning-Rust" class="headerlink" title="2. Learning Rust"></a>2. <a href="https://learning-rust.github.io/" target="_blank" rel="noopener">Learning Rust</a></h2><p>一个比较轻量 Rust 学习教程</p><ul><li>“Rust By Example” 在 Rust 场景下，上来直接学习容易懵逼。</li><li>“The Rust Programming Language” 上来有点重量级，适合深入学习。</li></ul><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
      <category term="weekly" scheme="https://erdong.site/tags/weekly/"/>
    
  </entry>
  
  <entry>
    <title>第30周分享</title>
    <link href="https://erdong.site/weekly/weekly30.html"/>
    <id>https://erdong.site/weekly/weekly30.html</id>
    <published>2019-09-15T07:06:24.000Z</published>
    <updated>2019-10-13T15:31:57.911Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="工具"><a href="#工具" class="headerlink" title="工具"></a>工具</h1><h2 id="1-Linux-Performance-Tools"><a href="#1-Linux-Performance-Tools" class="headerlink" title="1. Linux Performance Tools"></a>1. <a href="http://www.brendangregg.com/linuxperf.html" target="_blank" rel="noopener">Linux Performance Tools</a></h2><p>性能优化大师 Brendan Gregg 出品的 Linux Perfomance Tools ，工具涵盖非常全面。</p><h1 id="资源"><a href="#资源" class="headerlink" title="资源"></a>资源</h1><h2 id="1-Linux-load-averages"><a href="#1-Linux-load-averages" class="headerlink" title="1. Linux load averages"></a>1. <a href="http://www.brendangregg.com/blog/2017-08-08/linux-load-averages.html" target="_blank" rel="noopener">Linux load averages</a></h2><p>性能优化大师 Brendan Gregg 对 Linux 里面的平均负载的详细解读。非常值得一看，平均负载是一个用过 Linux 的人都觉得自己懂了的东西，但其实可能并不真的懂。而且网络上的很多讲解和说法可能大都是错误的。</p><h2 id="2-Google-Engineering-Practices-Documentation"><a href="#2-Google-Engineering-Practices-Documentation" class="headerlink" title="2. Google Engineering Practices Documentation"></a>2. <a href="https://google.github.io/eng-practices/" target="_blank" rel="noopener">Google Engineering Practices Documentation</a></h2><p>Google 出品的 工程师实践文档，谷歌的生产环境中基本涵盖所有语言，在这些项目的通用工程实践过程中积累了大量的经验。这些文档代表了谷歌长期以来开发的各种最佳实践的集体经验，开源项目或其他组织以及个人都可能会从这些知识中受益，因此谷歌公开了这些知识。</p><h1 id="随笔"><a href="#随笔" class="headerlink" title="随笔"></a>随笔</h1><p>前段时间事情太多，导致 weekly 断更了一段时间，最近事情快忙完了，会逐渐的恢复。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
      <category term="weekly" scheme="https://erdong.site/tags/weekly/"/>
    
  </entry>
  
  <entry>
    <title>【翻译】Prometheus 2.10.0 新特性</title>
    <link href="https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-10-0.html"/>
    <id>https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-10-0.html</id>
    <published>2019-08-20T13:09:34.000Z</published>
    <updated>2019-10-13T15:31:57.912Z</updated>
    
    <content type="html"><![CDATA[<p>Prometheus <a href="https://github.com/prometheus/prometheus/releases/tag/v2.10.0" target="_blank" rel="noopener">2.10.0</a> 现在(2019.05.25)已经发布，在上个月的 <a href="http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-9-0.html">2.9.0</a> 之后又进行了一些修正和改进。</p><a id="more"></a><p>TSDB 的数据记录又一次得到了改进，这意味着对许多系列的查询速度更快。还添加了一个新的特殊度量 <code>scrape_series_add</code> ，这将有助于找到引起混乱的目标。</p><p>在 Azure 上添加公共 IP 可以使 Kubernetes 的服务发现 endpoint 节点和主机名。用于警报的 UI 也得到了改进，模板添加了新的变量。</p><p>对于使用 Alerts API的人来说有一个小的中断更改，该值现在是一个字符串，而不是一个浮点数(正如我们在查询 API 上所做的那样)，以正确地支持 non-real values。</p><p>还有许多改进、bug修复和其他更改，可以查看 <a href="https://github.com/prometheus/prometheus/releases/tag/v2.10.0" target="_blank" rel="noopener">release notes</a> 来获取更多的信息。</p><h1 id="原文链接"><a href="#原文链接" class="headerlink" title="原文链接"></a>原文链接</h1><ul><li><a href="https://www.robustperception.io/new-features-in-prometheus-2-10-0" target="_blank" rel="noopener">https://www.robustperception.io/new-features-in-prometheus-2-10-0</a> ， By Brian Brazil</li></ul><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Prometheus &lt;a href=&quot;https://github.com/prometheus/prometheus/releases/tag/v2.10.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2.10.0&lt;/a&gt; 现在(2019.05.25)已经发布，在上个月的 &lt;a href=&quot;http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-9-0.html&quot;&gt;2.9.0&lt;/a&gt; 之后又进行了一些修正和改进。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="New-Features" scheme="https://erdong.site/categories/Prometheus/New-Features/"/>
    
    
      <category term="Prometheus" scheme="https://erdong.site/tags/Prometheus/"/>
    
      <category term="Features" scheme="https://erdong.site/tags/Features/"/>
    
      <category term="release" scheme="https://erdong.site/tags/release/"/>
    
  </entry>
  
  <entry>
    <title>【翻译】Prometheus 2.12.0 新特性</title>
    <link href="https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-12-0.html"/>
    <id>https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-12-0.html</id>
    <published>2019-08-20T13:09:34.000Z</published>
    <updated>2019-10-13T15:31:57.912Z</updated>
    
    <content type="html"><![CDATA[<p>Prometheus <a href="https://github.com/prometheus/prometheus/releases/tag/v2.12.0" target="_blank" rel="noopener">2.12.0</a> 现在(2019.08.17)已经发布，在上个月的 <a href="http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-11-0.html">2.11.0</a> 之后又进行了一些修正和改进。</p><a id="more"></a><p>在当前的 6 周发布周期中，每一个 Prometheus 版本都有比较少的特性，但是发布的更有规律。在这个版本中最引人注目的特性是，如果 Prometheus 在下一次启动时崩溃，它将打印正在运行的 PromQL ，这有助于查找开销过大的查询。</p><p>在内存方面 TSDB 有很多的性能改进，还添加了一个 <code>prometheus_tsdb_retention_limit_bytes</code> 的指标。虽然与用户无关，但 TSDB 存储库已经合并到 GitHub 上的  Prometheus 主存储库中。这将使我们作为开发人员的生活更加轻松。</p><p>还有许多改进、bug修复和其他更改，可以查看 <a href="https://github.com/prometheus/prometheus/releases/tag/v2.12.0" target="_blank" rel="noopener">release notes</a> 来获取更多的信息。</p><h1 id="原文链接"><a href="#原文链接" class="headerlink" title="原文链接"></a>原文链接</h1><ul><li><a href="https://www.robustperception.io/new-features-in-prometheus-2-12-0" target="_blank" rel="noopener">https://www.robustperception.io/new-features-in-prometheus-2-12-0</a> ， By Brian Brazil</li></ul><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Prometheus &lt;a href=&quot;https://github.com/prometheus/prometheus/releases/tag/v2.12.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2.12.0&lt;/a&gt; 现在(2019.08.17)已经发布，在上个月的 &lt;a href=&quot;http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-11-0.html&quot;&gt;2.11.0&lt;/a&gt; 之后又进行了一些修正和改进。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="New-Features" scheme="https://erdong.site/categories/Prometheus/New-Features/"/>
    
    
      <category term="Prometheus" scheme="https://erdong.site/tags/Prometheus/"/>
    
      <category term="Features" scheme="https://erdong.site/tags/Features/"/>
    
      <category term="release" scheme="https://erdong.site/tags/release/"/>
    
  </entry>
  
  <entry>
    <title>【翻译】Prometheus 2.11.0 新特性</title>
    <link href="https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-11-0.html"/>
    <id>https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-11-0.html</id>
    <published>2019-08-20T13:09:34.000Z</published>
    <updated>2019-10-13T15:31:57.912Z</updated>
    
    <content type="html"><![CDATA[<p>Prometheus <a href="https://github.com/prometheus/prometheus/releases/tag/v2.11.0" target="_blank" rel="noopener">2.11.0</a> 现在(2019.07.9)已经发布，在5月的 <a href="http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-10-0.html">2.10.0</a> 之后又进行了一些修正和改进。</p><a id="more"></a><p>从TSDB开始，记录逻辑有了更多的性能改进。特别需要注意的是，如果您有一个像 <code>a|b</code> 这样的正则表达式(例如 Grafana 为选择多个变量的表达式)，那么它现在被评估为查找而不是正则表达式扫描，因此 <code>x=~&quot;a&quot;</code> 现在和 <code>x=&quot;a&quot;</code>一样高效。</p><p>对于 WAL 的 “unknown series references” 现在已经完全修复。每次头部压缩时都会启动一个新的段，这对于在低容量实例上减少磁盘空间很有用，对于现在应该完全修复的WAL“未知系列引用”，在每次头部压缩时都会启动一个新的段，这对于在低卷实例上减少磁盘空间很有用，并且还有 还有一个选择进入 <code>--storage.tsdb.wal-compression</code>的标志来压缩 WAL 。</p><p>在 Prometheus 中，PromQL和远程写都有性能改进。现在可以像在 <code>prometheus.yml</code> 中一样，将 globs 用于单元测试的规则文件。还有一个配置选项可以通过 Alertmanager 的 v2 API 接口来获取。</p><p>还有许多改进、bug修复和其他更改，可以查看 <a href="https://github.com/prometheus/prometheus/releases/tag/v2.11.0" target="_blank" rel="noopener">release notes</a> 来获取更多的信息。</p><h1 id="原文链接"><a href="#原文链接" class="headerlink" title="原文链接"></a>原文链接</h1><ul><li><a href="https://www.robustperception.io/new-features-in-prometheus-2-11-0" target="_blank" rel="noopener">https://www.robustperception.io/new-features-in-prometheus-2-11-0</a> ， By Brian Brazil</li></ul><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Prometheus &lt;a href=&quot;https://github.com/prometheus/prometheus/releases/tag/v2.11.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2.11.0&lt;/a&gt; 现在(2019.07.9)已经发布，在5月的 &lt;a href=&quot;http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-10-0.html&quot;&gt;2.10.0&lt;/a&gt; 之后又进行了一些修正和改进。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="New-Features" scheme="https://erdong.site/categories/Prometheus/New-Features/"/>
    
    
      <category term="Prometheus" scheme="https://erdong.site/tags/Prometheus/"/>
    
      <category term="Features" scheme="https://erdong.site/tags/Features/"/>
    
      <category term="release" scheme="https://erdong.site/tags/release/"/>
    
  </entry>
  
  <entry>
    <title>公告-20190809</title>
    <link href="https://erdong.site/notice/notice-20190809.html"/>
    <id>https://erdong.site/notice/notice-20190809.html</id>
    <published>2019-08-09T12:04:05.000Z</published>
    <updated>2019-10-13T15:31:57.911Z</updated>
    
    <content type="html"><![CDATA[<p> 最近有一些事情和大家说一下，大概也就是 2 点吧。</p><p>1、请假：最近事情有点多，weekly 的每周分享停更几周。目前最新的更新是 第 29 周分享，我请假到第 35 周吧，第 36 周开始正常更新。</p><p>2、关于评论：我之前写文章聊过微信公众号的留言评论功能，最近我在业余时间翻看了我之前的文章，发现有读者给我在我的文章下留言了，但是我使用的留言系统没有给我任何提示，错过了和大家交流的机会。我仔细思考了这个流程发现，当前使用的评论系统可能是存在一些问题，所以我决定先关闭评论功能，等以后找到合适的工具了再开启。这段时间大家有问题可以给我发邮件或者在 GitHub 上留言，感谢大家的支持。</p><h2 id="致歉"><a href="#致歉" class="headerlink" title="致歉"></a>致歉</h2><p>向所有在我的博客下留言的读者致歉，我没有及时回复您的留言。如果您还有问题您可以发邮件给我，我们一起讨论交流。</p><a id="more"></a><p>======================<br>由于无法及时收到评论内容，所以关闭评论功能。<br>大家有问题欢迎发邮件到 <a href="mailto:erdong@mail.erdong.site">erdong@mail.erdong.site</a> ，或者 <a href="https://github.com/erdong/erdong.github.io/issues" target="_blank" rel="noopener">https://github.com/erdong/erdong.github.io/issues</a> 提 Issue ，我会及时回复。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt; 最近有一些事情和大家说一下，大概也就是 2 点吧。&lt;/p&gt;
&lt;p&gt;1、请假：最近事情有点多，weekly 的每周分享停更几周。目前最新的更新是 第 29 周分享，我请假到第 35 周吧，第 36 周开始正常更新。&lt;/p&gt;
&lt;p&gt;2、关于评论：我之前写文章聊过微信公众号的留言评论功能，最近我在业余时间翻看了我之前的文章，发现有读者给我在我的文章下留言了，但是我使用的留言系统没有给我任何提示，错过了和大家交流的机会。我仔细思考了这个流程发现，当前使用的评论系统可能是存在一些问题，所以我决定先关闭评论功能，等以后找到合适的工具了再开启。这段时间大家有问题可以给我发邮件或者在 GitHub 上留言，感谢大家的支持。&lt;/p&gt;
&lt;h2 id=&quot;致歉&quot;&gt;&lt;a href=&quot;#致歉&quot; class=&quot;headerlink&quot; title=&quot;致歉&quot;&gt;&lt;/a&gt;致歉&lt;/h2&gt;&lt;p&gt;向所有在我的博客下留言的读者致歉，我没有及时回复您的留言。如果您还有问题您可以发邮件给我，我们一起讨论交流。&lt;/p&gt;
    
    </summary>
    
    
      <category term="notice" scheme="https://erdong.site/categories/notice/"/>
    
    
      <category term="notice" scheme="https://erdong.site/tags/notice/"/>
    
  </entry>
  
  <entry>
    <title>第29周分享</title>
    <link href="https://erdong.site/weekly/weekly29.html"/>
    <id>https://erdong.site/weekly/weekly29.html</id>
    <published>2019-07-21T07:06:24.000Z</published>
    <updated>2019-10-14T11:18:34.550Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="工具"><a href="#工具" class="headerlink" title="工具"></a>工具</h1><h2 id="1-DownGit"><a href="#1-DownGit" class="headerlink" title="1. DownGit"></a>1. <a href="https://minhaskamal.github.io/DownGit/#/home" target="_blank" rel="noopener">DownGit</a></h2><p>一个小工具用来在 GitHub 上下载某个文件夹或者文件，还可以创建下载链接给其他人。</p><p>Github中并不提供单个文件夹下载, 每当下载仓库中某个文件夹时,只能克隆整个仓库, 浪费硬盘空间不说,浪费时间不说,每次克隆仓库时候,看到这下下载速度简直不能忍受，使用这个工具就好了。 </p><h2 id="2-阮一峰的免费招聘服务"><a href="#2-阮一峰的免费招聘服务" class="headerlink" title="2. 阮一峰的免费招聘服务"></a>2. <a href="https://github.com/ruanyf/weekly/issues/692" target="_blank" rel="noopener">阮一峰的免费招聘服务</a></h2><p>官方介绍：<br>这个帖子是周刊的免费招聘服务。如果你们公司正在招人，欢迎把招聘信息发在这个帖子里面。请简要描述，岗位名称、工作地点、岗位要求、公司简介、联系方式等等。</p><p>如果希望把信息发到正式的周刊上面，推送到所有读者，请与我联系（Email: <a href="mailto:yifeng.ruan@gmail.com">yifeng.ruan@gmail.com</a>），价格是人民币 250元/条。</p><p>读者可以咨询，但请不要发布与招聘无关的内容，禁止对公司或岗位进行评论或抱怨。如果有意应聘，请直接与发贴人联系。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
      <category term="weekly" scheme="https://erdong.site/tags/weekly/"/>
    
  </entry>
  
  <entry>
    <title>聊聊微信公众号留言</title>
    <link href="https://erdong.site/article/wechat-message-board.html"/>
    <id>https://erdong.site/article/wechat-message-board.html</id>
    <published>2019-07-20T03:14:42.000Z</published>
    <updated>2019-10-14T11:14:20.250Z</updated>
    
    <content type="html"><![CDATA[<p>在写了半年多微信公众号好以后，上周突然发现，我的微信公众号没有留言功能。起初没什么感觉是读者比较少，想着也没什么人给我留言，后来说自己给自己留个言，看看后台是怎么个操作过程，结果才发现没有这个功能。</p><a id="more"></a><p>刚发现的时候，很是迷惑，也不知道为什么。</p><p>去网上搜了各种资料，也去官网找了帮助文档。</p><p>最终的结论是这样：</p><p>微信公众号在早期是只能发文章，坚持发表原创文章会被官方邀请开通原创管理和留言管理两个功能。后来微信公众号官方把这两个功能开放给了所有作者，在 2018 年 3 月的时候，微信公众号发布通知，关闭了新申请公众号的留言功能。至此之后所有新申请的公众号都没有了留言功能，而之前有留言功能的公众号也就成了稀缺资源。</p><p>微信公众号官方的帮助文档对这个的解释是这样的。</p><p>微信公众号留言功能最初上线之时，官方称是“为了提升微信订阅号的互动性”，而留言功能的确也“不辱使命”成为创作者和读者之间最重要的沟通工具之一。自从去年微信平台调整留言规则后，大家都切身感受到了运营新号的阻碍，没有留言互动，缺少读者反馈，粉丝积极性也很难调动。</p><p>为了解决留言功能的问题，网络上也是八仙过海各显神通，总结一下，主要就是以下几种方式。</p><h2 id="迁移留言功能"><a href="#迁移留言功能" class="headerlink" title="迁移留言功能"></a>迁移留言功能</h2><p>上边说到了在 2018 年 3 月之后所有新申请的公众号都没有了留言功能，而之前有留言功能的公众号也就成了稀缺资源。迁移留言功能就是把一个公众号的留言功能迁移到另一个公众号上，大概的做法如下：</p><p>准备材料：<br>A 账号：作者的公众号，无留言功能，不能是个人公众号，需要是企业或者其他组织认证。<br>B 账号：有留言功能的账号，最好是无历史文章的干净账号。</p><p>然后申请账号迁移，把 B 账号的留言功能迁移到 A 账号上，中间需要经历一些公证的过程，时间大概要一两个月吧，再花费一些必要的费用，就迁移成功了。微信官方有一套完整的公众号迁移规则，规定了账号迁移目前仅对粉丝、文章素材（可选）、微信号（可选）、违规记录和已开通的原创保护功能、留言管理功能进行迁移。具体的细节，请大家参考微信公众号官网。<br><a href="http://kf.qq.com/product/weixinmp.html#hid=2488" target="_blank" rel="noopener">http://kf.qq.com/product/weixinmp.html#hid=2488</a></p><h2 id="第三方插件"><a href="#第三方插件" class="headerlink" title="第三方插件"></a>第三方插件</h2><p>除了上述的迁移以外，有很多的开发者嗅到了这个商机，开发了很多的第三方插件，可以插入在文章的底部，插入一个小程序或者网页链接，读者留言的时候就需要一次跳转，跳转到这个第三方的平台上进行留言。</p><p>每个小程序对账户入驻和关联的审核标准不同，生成的留言链接样式也各不一样。既有完全复刻微信留言界面的，也有新增留言可被其他读者回复功能的，公众号作者可以根据自己的需求喜好选择合适的小程序。</p><p>留言小程序虽然好上手，也有不可避免的不便之处。比如，无法将留言与文章显示在同一页面，降低了留言活跃性；另外，小程序无法在PC端查看和操作，也会一定程度上限制留言的互动性。</p><p>也有开发者是在底部的“阅读全文”按钮上做的第三方跳转。不过这种方法对大部分个人号来说还是门槛略高。读者对“阅读原文”留言板的热情仍然比不上微信自带的留言功能。</p><h2 id="其他渠道"><a href="#其他渠道" class="headerlink" title="其他渠道"></a>其他渠道</h2><p>当公众号作者还在纠结怎样找到留言功能的代替方式时，一部分内容服务机构已经在尝试更进一步的粉丝互动方案了。无论你的账号是否有留言功能，都可以通过这些平台来开展与粉丝之间的深度交流。</p><p>毕竟，留言的本质也是为了互动。</p><p>比如 知识星球，知识星球原名小密圈，是一个知识社群的 APP 平台，是内容创作者连接铁杆粉丝，做出品质社群，实现知识变现的工具。其功能之一就是内容创作者的粉丝管理工具。</p><p>以上就是当前在微信公众号没有留言功能的情况下，各位微信公众号作者替代留言的功能的几种方案。</p><p>其实除了文章留言，公众号账号留言也是一种直接的互动方式，是值得公众号作者好好维护的互动渠道。比如在菜单栏单独开辟留言指引，亦或文章推送后鼓励读者在聊天页面留言。不同于文章评论互动，账号后台留言互动实际上更有私下交流的氛围，在拉近与读者的距离方面具备优势。</p><p>需要注意的是回复读者的信息是有时间限制的， “粉丝发送给公众帐号消息的48小时内未回复粉丝的消息，48小时后则无法再主动发送消息给该粉丝，但如果下次该粉丝主动发送消息给您，您则可以进行回复。”</p><p>对于我来说，迁移账号我没有带留言功能的账号，有不想使用三方插件。至于其他的渠道，现在读者比较少，等多一些了再考虑。目前来看使用公众号的账号留言也是不错的选择。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;在写了半年多微信公众号好以后，上周突然发现，我的微信公众号没有留言功能。起初没什么感觉是读者比较少，想着也没什么人给我留言，后来说自己给自己留个言，看看后台是怎么个操作过程，结果才发现没有这个功能。&lt;/p&gt;
    
    </summary>
    
    
      <category term="article" scheme="https://erdong.site/categories/article/"/>
    
    
      <category term="wechat" scheme="https://erdong.site/tags/wechat/"/>
    
  </entry>
  
  <entry>
    <title>第28周分享</title>
    <link href="https://erdong.site/weekly/weekly28.html"/>
    <id>https://erdong.site/weekly/weekly28.html</id>
    <published>2019-07-14T07:06:24.000Z</published>
    <updated>2019-10-14T11:18:29.390Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="新闻"><a href="#新闻" class="headerlink" title="新闻"></a>新闻</h1><h2 id="1-GitHub官方中文文档"><a href="#1-GitHub官方中文文档" class="headerlink" title="1. GitHub官方中文文档"></a>1. <a href="https://help.github.com/cn" target="_blank" rel="noopener">GitHub官方中文文档</a></h2><p>GitHub 正式推出帮助文档中文版，很多不擅长英语的开发者以后可以直接看中文了，省去了网上很多人的二次转发。这也是 GitHub 继英文和日文后支持的第三种语言。 </p><h1 id="工具"><a href="#工具" class="headerlink" title="工具"></a>工具</h1><h2 id="1-cortex"><a href="#1-cortex" class="headerlink" title="1. cortex"></a>1. <a href="https://github.com/cortexproject/cortex" target="_blank" rel="noopener">cortex</a></h2><p>A multitenant, horizontally scalable Prometheus as a Service <a href="https://github.com/cortexproject/cortex" target="_blank" rel="noopener">https://github.com/cortexproject/cortex</a></p><h1 id="资源"><a href="#资源" class="headerlink" title="资源"></a>资源</h1><h2 id="1-如何超过大多数人"><a href="#1-如何超过大多数人" class="headerlink" title="1. 如何超过大多数人"></a>1. <a href="https://coolshell.cn/articles/19464.html" target="_blank" rel="noopener">如何超过大多数人</a></h2><p>左耳朵耗子 陈皓 最近写的一篇文章，很值得阅读，而且值得多次阅读。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
      <category term="weekly" scheme="https://erdong.site/tags/weekly/"/>
    
  </entry>
  
  <entry>
    <title>第27周分享</title>
    <link href="https://erdong.site/weekly/weekly27.html"/>
    <id>https://erdong.site/weekly/weekly27.html</id>
    <published>2019-07-07T07:06:24.000Z</published>
    <updated>2019-10-14T11:18:22.633Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="新闻"><a href="#新闻" class="headerlink" title="新闻"></a>新闻</h1><h2 id="1-阿里云天池发布“最聪明榜单”"><a href="#1-阿里云天池发布“最聪明榜单”" class="headerlink" title="1. 阿里云天池发布“最聪明榜单”"></a>1. <a href="https://yq.aliyun.com/articles/707388" target="_blank" rel="noopener">阿里云天池发布“最聪明榜单”</a></h2><p>7月4日，阿里云天池大赛发布“最聪明榜单”，对历史参赛高校进行排名。数据显示，国内高校中浙大参赛热情最高，新加坡国立大学则荣登海外榜首。</p><p>作为和Kaggle齐名的全球最知名的数据竞赛平台，阿里云天池大赛已经成功举办100场以上高规格数据类竞赛，全球开发者可通过数据和AI算法解决真实的社会问题与挑战。目前已吸引全球30万开发者，其中60%来自高校。</p><p>参加天池大赛已成为全球计算机科学100强高校学霸的共同爱好，如南洋理工大学、卡耐基梅隆大学等高校学生都曾参赛。</p><h1 id="工具"><a href="#工具" class="headerlink" title="工具"></a>工具</h1><h2 id="1-PyRoyale"><a href="#1-PyRoyale" class="headerlink" title="1. PyRoyale"></a>1. <a href="https://github.com/Igoorx/PyRoyale" target="_blank" rel="noopener">PyRoyale</a></h2><p>这是一个开源的马里奥游戏模拟器，支持多人同时在线，可以说是吃鸡版的马里奥。</p><p>他们提供了一个页面来进行体验，地址如下：</p><p><a href="http://77.68.80.27/royale/index.html#" target="_blank" rel="noopener">http://77.68.80.27/royale/index.html#</a></p><h1 id="资源"><a href="#资源" class="headerlink" title="资源"></a>资源</h1><h2 id="1-高性能计算-HPC-技术、方案和行业全面解析"><a href="#1-高性能计算-HPC-技术、方案和行业全面解析" class="headerlink" title="1. 高性能计算(HPC)技术、方案和行业全面解析"></a>1. <a href="http://weidian.com/s/343499232?wfr=c" target="_blank" rel="noopener">高性能计算(HPC)技术、方案和行业全面解析</a></h2><p>“架构师技术联盟”微信公众号整理了 HPC 行业的一些基础架构以及存储的内容，很适合出入 HPC 的人员学习了解 HPC 。该文档需要付费才能获取。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
      <category term="weekly" scheme="https://erdong.site/tags/weekly/"/>
    
  </entry>
  
  <entry>
    <title>第26周分享</title>
    <link href="https://erdong.site/weekly/weekly26.html"/>
    <id>https://erdong.site/weekly/weekly26.html</id>
    <published>2019-06-30T02:06:24.000Z</published>
    <updated>2019-10-14T11:18:13.708Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="教程"><a href="#教程" class="headerlink" title="教程"></a>教程</h1><h2 id="1-二维码的生成细节和原理"><a href="#1-二维码的生成细节和原理" class="headerlink" title="1. 二维码的生成细节和原理"></a>1. <a href="https://coolshell.cn/articles/10590.html#jtss-tsina" target="_blank" rel="noopener">二维码的生成细节和原理</a></h2><p>2013 年的时候陈皓写的二维码的生成细节和原理，把二维码的生成过程讲的很好。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
      <category term="weekly" scheme="https://erdong.site/tags/weekly/"/>
    
  </entry>
  
  <entry>
    <title>QDS05 Prometheus</title>
    <link href="https://erdong.site/QDS/qds05.html"/>
    <id>https://erdong.site/QDS/qds05.html</id>
    <published>2019-06-27T10:22:14.000Z</published>
    <updated>2019-10-14T11:13:15.635Z</updated>
    
    <content type="html"><![CDATA[<p>QDS （Quick Deployment Series）快速的部署一个软件。这次我们来部署 Prometheus 。</p><p>Prometheus 有两个意思，一个是时序数据库，另一个是基于时序数据库的监控解决方案。</p><p>我们本次安装特指安装 Prometheus 时序数据库。</p><a id="more"></a><h1 id="下载"><a href="#下载" class="headerlink" title="下载"></a>下载</h1><p>Prometheus 可以从两个地方找到下载链接，一个是官网下载页面，一个是 Github 的官方仓库。</p><p>官方下载页面链接，</p><p><a href="https://prometheus.io/download/" target="_blank" rel="noopener">https://prometheus.io/download/</a></p><p>Github 官方仓库</p><p><a href="https://github.com/prometheus/prometheus/releases" target="_blank" rel="noopener">https://github.com/prometheus/prometheus/releases</a></p><p>这两个地方最终的下载源都是一样的。使用下载工具将构建好的压缩包下载到要安装的机器上即可。</p><h1 id="安装"><a href="#安装" class="headerlink" title="安装"></a>安装</h1><p>当前（2019 年 6 月）最新的版本是 2.10，下载好的安装包名称是 prometheus-2.10.0.linux-amd64.tar.gz</p><p>首先在要安装的目录解压该软件包</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tar -zxf prometheus-2.10.0.linux-amd64.tar.gz -C &#x2F;opt&#x2F;prometheus</span><br></pre></td></tr></table></figure><p>解压好的目录里有如下内容</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">console_libraries  consoles  LICENSE  NOTICE  prometheus  prometheus.yml  promtool</span><br></pre></td></tr></table></figure><p>其中 prometheus 是程序的可执行二进制文件， prometheus.yml 是数据库的默认配置。</p><h1 id="启动服务"><a href="#启动服务" class="headerlink" title="启动服务"></a>启动服务</h1><p>Prometheus 启动非常简单，不需要 root 权限，直接执行二进制文件 prometheus 即可启动。</p><p>为了方便管理，我们创建数据存储目录和日志目录以及 pid 目录。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">cd &#x2F;opt&#x2F;prometheus</span><br><span class="line">mkdir data logs run</span><br></pre></td></tr></table></figure><p>我们提供两种方式来启动 prometheus 。</p><h2 id="守护进程"><a href="#守护进程" class="headerlink" title="守护进程"></a>守护进程</h2><p>在 CentOS 7 里，可以将启动 Prometheus 的脚本让系统去维护，还可以设置成开机自启动。 </p><p>创建系统启动文件 prometheus.service </p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">touch &#x2F;usr&#x2F;lib&#x2F;systemd&#x2F;system&#x2F;prometheus.service</span><br></pre></td></tr></table></figure><p>编辑该文件，写入如下内容</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">Description&#x3D;Prometheus Database</span><br><span class="line">After&#x3D;network.target</span><br><span class="line"></span><br><span class="line">[Service]</span><br><span class="line">ExecStart&#x3D;&#x2F;opt&#x2F;prometheus&#x2F;prometheus --config.file&#x3D;&#x2F;opt&#x2F;prometheus&#x2F;prometheus.yml --web.listen-address&#x3D;:9090 --storage.tsdb.path&#x3D;&#x2F;opt&#x2F;prometheus&#x2F;data&#x2F;</span><br><span class="line">User&#x3D;root</span><br><span class="line"></span><br><span class="line">[Install]</span><br><span class="line">WantedBy&#x3D;multi-user.target</span><br></pre></td></tr></table></figure><p>这种情况下，日志会写入系统日志。</p><p>启动服务</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl start prometheus</span><br></pre></td></tr></table></figure><p>设置开机自起</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl enable prometheus</span><br></pre></td></tr></table></figure><h2 id="普通用户脚本启动"><a href="#普通用户脚本启动" class="headerlink" title="普通用户脚本启动"></a>普通用户脚本启动</h2><p>创建一个 启动脚本 run.sh</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">touch run.sh</span><br></pre></td></tr></table></figure><p>编辑 run.sh , 写入如下内容，</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">#!&#x2F;bin&#x2F;bash</span><br><span class="line">nohup &#x2F;opt&#x2F;prometheus&#x2F;prometheus --config.file&#x3D;&#x2F;opt&#x2F;prometheus&#x2F;prometheus.yml --web.listen-address&#x3D;:9090 --storage.tsdb.path&#x3D;&#x2F;opt&#x2F;prometheus&#x2F;data&#x2F; &gt;&gt; &#x2F;opt&#x2F;prometheus&#x2F;logs&#x2F;prometheus.log  2&gt;&amp;1 &amp; echo $! &gt; $BASEPATH&#x2F;run&#x2F;prometheus.pid</span><br></pre></td></tr></table></figure><p>启动服务 </p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sh run.sh</span><br></pre></td></tr></table></figure><h1 id="简单验证"><a href="#简单验证" class="headerlink" title="简单验证"></a>简单验证</h1><p>执行 如下命令有时序数据输出即为正常。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curl 127.0.0.1:9090&#x2F;metrics</span><br></pre></td></tr></table></figure><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;QDS （Quick Deployment Series）快速的部署一个软件。这次我们来部署 Prometheus 。&lt;/p&gt;
&lt;p&gt;Prometheus 有两个意思，一个是时序数据库，另一个是基于时序数据库的监控解决方案。&lt;/p&gt;
&lt;p&gt;我们本次安装特指安装 Prometheus 时序数据库。&lt;/p&gt;
    
    </summary>
    
    
      <category term="QDS" scheme="https://erdong.site/categories/QDS/"/>
    
    
      <category term="prometheus" scheme="https://erdong.site/tags/prometheus/"/>
    
      <category term="QDS" scheme="https://erdong.site/tags/QDS/"/>
    
  </entry>
  
  <entry>
    <title>第25周分享</title>
    <link href="https://erdong.site/weekly/weekly25.html"/>
    <id>https://erdong.site/weekly/weekly25.html</id>
    <published>2019-06-22T02:06:24.000Z</published>
    <updated>2019-10-14T11:18:07.278Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="教程"><a href="#教程" class="headerlink" title="教程"></a>教程</h1><h2 id="1-Go-语言最佳实践"><a href="#1-Go-语言最佳实践" class="headerlink" title="1. Go 语言最佳实践"></a>1. <a href="https://github.com/llitfkitfk/go-best-practice" target="_blank" rel="noopener">Go 语言最佳实践</a></h2><p>作者的目标是向大家提供有关编写 Go 代码最佳实践的建议。</p><h1 id="工具"><a href="#工具" class="headerlink" title="工具"></a>工具</h1><h2 id="1-xsec-traffic"><a href="#1-xsec-traffic" class="headerlink" title="1. xsec-traffic"></a>1. <a href="https://github.com/netxfly/xsec-traffic" target="_blank" rel="noopener">xsec-traffic</a></h2><p>xsec-traffic为一款轻量级的恶意流量分析程序，包括传感器sensor和服务端server 2个组件。sensor负责采集流量，然后发到server端，由server来检测是否为恶意流量。server端的功能为接收各sensor采集到的流程并判断是否为恶意流量。</p><h2 id="2-多吉搜索"><a href="#2-多吉搜索" class="headerlink" title="2. 多吉搜索"></a>2. <a href="https://dogedoge.com" target="_blank" rel="noopener">多吉搜索</a></h2><p>一个新的国产搜索引擎，搜索结果比较清爽。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
      <category term="weekly" scheme="https://erdong.site/tags/weekly/"/>
    
  </entry>
  
  <entry>
    <title>第24周分享</title>
    <link href="https://erdong.site/weekly/weekly24.html"/>
    <id>https://erdong.site/weekly/weekly24.html</id>
    <published>2019-06-16T03:06:24.000Z</published>
    <updated>2019-10-14T11:18:00.202Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="教程"><a href="#教程" class="headerlink" title="教程"></a>教程</h1><h2 id="1-illustrations"><a href="#1-illustrations" class="headerlink" title="1. illustrations"></a>1. <a href="https://undraw.co/illustrations" target="_blank" rel="noopener">illustrations</a></h2><p>一个插画网站，可以方便的下载该风格的插画，可以自定义颜色，网站会定期更新，用来做 PPT 或者文章插图和合适。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
      <category term="weekly" scheme="https://erdong.site/tags/weekly/"/>
    
  </entry>
  
  <entry>
    <title>第23周分享</title>
    <link href="https://erdong.site/weekly/weekly23.html"/>
    <id>https://erdong.site/weekly/weekly23.html</id>
    <published>2019-06-09T03:06:24.000Z</published>
    <updated>2019-10-14T11:17:54.126Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="资源"><a href="#资源" class="headerlink" title="资源"></a>资源</h1><h2 id="1-MongoDB-教程"><a href="#1-MongoDB-教程" class="headerlink" title="1. MongoDB 教程"></a>1. <a href="https://www.runoob.com/mongodb/mongodb-tutorial.html" target="_blank" rel="noopener">MongoDB 教程</a></h2><p>初次使用 MongoDB 可以使用该教程快速查询了解。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
      <category term="weekly" scheme="https://erdong.site/tags/weekly/"/>
    
  </entry>
  
  <entry>
    <title>第22周分享</title>
    <link href="https://erdong.site/weekly/weekly22.html"/>
    <id>https://erdong.site/weekly/weekly22.html</id>
    <published>2019-06-02T03:06:24.000Z</published>
    <updated>2019-10-14T11:17:47.903Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="教程"><a href="#教程" class="headerlink" title="教程"></a>教程</h1><h2 id="1-TCP-Traeroute"><a href="#1-TCP-Traeroute" class="headerlink" title="1. TCP Traeroute"></a>1. <a href="https://support.opendns.com/hc/en-us/articles/227989007-How-to-Running-a-TCP-Traceroute" target="_blank" rel="noopener">TCP Traeroute</a></h2><p>该文章介绍了如何在 linux 、MacOS 、window 下如何追踪 TCP 过程。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
      <category term="weekly" scheme="https://erdong.site/tags/weekly/"/>
    
  </entry>
  
  <entry>
    <title>第21周分享</title>
    <link href="https://erdong.site/weekly/weekly21.html"/>
    <id>https://erdong.site/weekly/weekly21.html</id>
    <published>2019-05-26T03:06:24.000Z</published>
    <updated>2019-10-14T11:17:41.982Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="工具"><a href="#工具" class="headerlink" title="工具"></a>工具</h1><h2 id="1-docker-slim"><a href="#1-docker-slim" class="headerlink" title="1. docker-slim"></a>1. <a href="https://github.com/docker-slim/docker-slim" target="_blank" rel="noopener">docker-slim</a></h2><p>docker-slim 是一个可以自动缩减 docker 镜像体积的工具，方便分发。使用简单，直接执行二进制文件即可，使用命令 <code>docker-slim build --http-probe your-name/your-app</code> 即可。</p><h2 id="2-终端录屏工具"><a href="#2-终端录屏工具" class="headerlink" title="2. 终端录屏工具"></a>2. <a href="">终端录屏工具</a></h2><p>经常有将终端录屏生成视频或者 GIF 的需求，推荐如下三个工具。</p><ul><li><a href="https://asciinema.org" target="_blank" rel="noopener">asciinema</a></li><li><a href="https://terminalizer.com" target="_blank" rel="noopener">Terminalizer</a></li><li><a href="http://0xcc.net/ttyrec/" target="_blank" rel="noopener">ttyrec</a></li></ul><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
      <category term="weekly" scheme="https://erdong.site/tags/weekly/"/>
    
  </entry>
  
  <entry>
    <title>第20周分享</title>
    <link href="https://erdong.site/weekly/weekly20.html"/>
    <id>https://erdong.site/weekly/weekly20.html</id>
    <published>2019-05-19T03:06:24.000Z</published>
    <updated>2019-10-14T11:17:34.927Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="工具"><a href="#工具" class="headerlink" title="工具"></a>工具</h1><h2 id="1-miniNodes"><a href="#1-miniNodes" class="headerlink" title="1. miniNodes"></a>1. <a href="https://www.mininodes.com/product/5-node-raspberry-pi-3-com-carrier-board/" target="_blank" rel="noopener">miniNodes</a></h2><p>这公司是做 mini arm 服务器托管的，一块板子上面可以插 5 个树莓派的计算模块。一块板子一个小集群。母版上内建交换机，5台机器插一根网线就行了。</p><ol start="2"><li><p><a href="https://github.com/htcat/htcat" target="_blank" rel="noopener">htcat</a></p><p>一个并发 http 请求且顺序写入的 go 工具/库</p></li><li><p><a href="https://mdnice.github.io" target="_blank" rel="noopener">Markdown Nice</a></p></li></ol><p>一个将 Markdown 语法转换成微信公众号的工具。 </p><h1 id="资源"><a href="#资源" class="headerlink" title="资源"></a>资源</h1><h2 id="1-kindle电子书分享网"><a href="#1-kindle电子书分享网" class="headerlink" title="1. kindle电子书分享网"></a>1. <a href="https://kindle.51nazhun.pub" target="_blank" rel="noopener">kindle电子书分享网</a></h2><p>一个小网站，以解决找电子书的烦恼，后端基于rails，</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
      <category term="weekly" scheme="https://erdong.site/tags/weekly/"/>
    
  </entry>
  
  <entry>
    <title>Prometheus 简介</title>
    <link href="https://erdong.site/Prometheus/notes/prometheus-introduction.html"/>
    <id>https://erdong.site/Prometheus/notes/prometheus-introduction.html</id>
    <published>2019-05-16T14:01:25.000Z</published>
    <updated>2019-10-14T11:11:42.702Z</updated>
    
    <content type="html"><![CDATA[<p>Prometheus 是一个开源的系统监控和警报工具，最初是在 SoundCloud 上构建的。自2012年启动以来，许多公司和组织都采用了 Prometheus，该项目拥有非常活跃的开发人员和用户社区。它现在是一个独立的开源项目，独立于任何公司进行维护。为了强调这一点，并阐明该项目的治理结构，Prometheus 于2016年加入 CNCF （云原生计算基金会），成为继 Kubernetes 之后的第二个托管项目。2018 年 8 月 9 日，CNCF 宣布开放源代码监控工具 Prometheus 已从孵化状态进入毕业状态。</p><a id="more"></a><h1 id="特性"><a href="#特性" class="headerlink" title="特性"></a>特性</h1><p>Prometheus 的主要特性有：</p><ul><li>一个多维数据模型，包含由 metric 和 key/value 标识的时间序列数据</li><li>PromQL是一种灵活的查询语言</li><li>不依赖分布式存储，单个服务器节点是自治的</li><li>基于 HTTP 协议通过 pull 形式进行收集时间序列数据</li><li>push 形式的时间序列数据是通过一个中间网关来支持的</li><li>targets 可以通过服务发现或静态配置发现的</li><li>多种模式的图形和仪表盘支持</li></ul><h1 id="组件"><a href="#组件" class="headerlink" title="组件"></a>组件</h1><p>Prometheus 生态系统由多个组件组成，其中许多是可选的:</p><p>Prometheus Server：主要的 Prometheus 服务器，它抓取和存储时间序列数据<br>Client Libraries：用于检测应用程序代码的库，主要用于客户端。<br>Push Gateway：支持短期生命周期的 Jobs<br>Exporter：为 HAProxy、StatsD、Graphite 等服务提供数据。<br>Alert Manager：一个告警处理工具<br>各种支持工具</p><p>大多数的 Prometheus 组件是用 Go 语言来编写的，这使得他们可以很容易的构建并且使用静态的二进制文件来部署。</p><h1 id="架构"><a href="#架构" class="headerlink" title="架构"></a>架构</h1><p>这张图展示了 Prometheus 的架构及其生态系统的一些组成部分:</p><p><img src="https://prometheus.io/assets/architecture.png" alt="prometheus architrcture"><br>【图片来自官方网站】</p><p>Prometheus 从各种采集端的 Job 中获取 Metric，要么直接获取，要么通过 Push Gateway 获取短生命周期 Job 。它在本地存储所有抓取的数据，并对这些数据处理聚合和记录以生成新的时间序列，或者生成警报消息。Grafana 或其他 API 使用者可以使用 PromQL 语法来查询使用数据。</p><h1 id="Prometheus-适合做什么"><a href="#Prometheus-适合做什么" class="headerlink" title="Prometheus 适合做什么"></a>Prometheus 适合做什么</h1><p>Prometheus 可以很好地记录任何纯数字的时间序列。它既适合以机器为中心的监视，也适合高度动态的面向服务的体系结构的监视。在微服务的世界中，它对多维数据收集和查询的支持是一个特别的优势。</p><p>Prometheus 是为可靠性而设计的，它是您在停机期间使用的系统，允许您快速诊断问题。每台Prometheus 服务器都是独立的，不依赖于网络存储或其他远程服务。当您的基础设施的其他部分被破坏时，您可以依赖它，并且您不需要设置广泛的基础设施来使用它。</p><h1 id="Prometheus-不适合做什么"><a href="#Prometheus-不适合做什么" class="headerlink" title="Prometheus 不适合做什么"></a>Prometheus 不适合做什么</h1><p>Prometheus 的值是很可靠的。您总是可以查看有关系统的统计信息，即使在出现故障的情况下也是如此。如果您需要100%的准确性，例如按请求计费，Prometheus不是一个好的选择，因为收集的数据可能不够详细和完整。在这种情况下，最好使用其他系统来收集和分析用于计费的数据，并使用 Prometheus 来完成剩下的监视工作。</p><p>并且 Prometheus 并不适合监控字符串类的监控指标。</p><p>关于日志类的监控，请使用其他日志系统，比如 Grafana 的 Loki ，可以在 Grafana 中进行展示。Loki 目前还在测试阶段，可以进行尝试，请在稳定后再用于生产系统。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Prometheus 是一个开源的系统监控和警报工具，最初是在 SoundCloud 上构建的。自2012年启动以来，许多公司和组织都采用了 Prometheus，该项目拥有非常活跃的开发人员和用户社区。它现在是一个独立的开源项目，独立于任何公司进行维护。为了强调这一点，并阐明该项目的治理结构，Prometheus 于2016年加入 CNCF （云原生计算基金会），成为继 Kubernetes 之后的第二个托管项目。2018 年 8 月 9 日，CNCF 宣布开放源代码监控工具 Prometheus 已从孵化状态进入毕业状态。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="notes" scheme="https://erdong.site/categories/Prometheus/notes/"/>
    
    
      <category term="Prometheus" scheme="https://erdong.site/tags/Prometheus/"/>
    
  </entry>
  
  <entry>
    <title>Prometheus 安装</title>
    <link href="https://erdong.site/Prometheus/notes/prometheus-install.html"/>
    <id>https://erdong.site/Prometheus/notes/prometheus-install.html</id>
    <published>2019-05-16T13:57:45.000Z</published>
    <updated>2019-10-22T03:49:38.852Z</updated>
    
    <content type="html"><![CDATA[<p>Prometheus是一个监控平台，它通过抓取这些目标主机上采集器暴露的指标来展示监控数据。本文介绍如何安装、配置和监控 Prometheus。你需要下载安装 Prometheus 并且安装 Exporter，这些工具采集了主机和对应服务的时间序列数据。我们的第一个 Exporter 是 Prometheus 本身，它提供了关于内存使用、垃圾收集等各种各样的主机级指标。</p><a id="more"></a><h1 id="下载-Prometheus"><a href="#下载-Prometheus" class="headerlink" title="下载 Prometheus"></a>下载 Prometheus</h1><p>首先下载最新版本的 Prometheus 然后解压，下载地址如下：</p><p><a href="https://prometheus.io/download" target="_blank" rel="noopener">https://prometheus.io/download</a></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">tar xvfz prometheus-*.tar.gz</span><br><span class="line">cd prometheus-*</span><br></pre></td></tr></table></figure><p>Prometheus 服务是一个名为 Prometheus( 或Windows系统上的 prometheus.exe)的二进制文件。我们可以运行二进制文件，并通过<code>--help</code> 参数选项来查看帮助，如下所示。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br></pre></td><td class="code"><pre><span class="line">$ .&#x2F;prometheus --help</span><br><span class="line">usage: prometheus [&lt;flags&gt;]</span><br><span class="line"></span><br><span class="line">The Prometheus monitoring server</span><br><span class="line"></span><br><span class="line">Flags:</span><br><span class="line">  -h, --help                     Show context-sensitive help (also try --help-long and --help-man).</span><br><span class="line">      --version                  Show application version.</span><br><span class="line">      --config.file&#x3D;&quot;prometheus.yml&quot;</span><br><span class="line">                                 Prometheus configuration file path.</span><br><span class="line">      --web.listen-address&#x3D;&quot;0.0.0.0:9090&quot;</span><br><span class="line">                                 Address to listen on for UI, API, and telemetry.</span><br><span class="line">      --web.read-timeout&#x3D;5m      Maximum duration before timing out read of the request, and closing idle connections.</span><br><span class="line">      --web.max-connections&#x3D;512  Maximum number of simultaneous connections.</span><br><span class="line">      --web.external-url&#x3D;&lt;URL&gt;   The URL under which Prometheus is externally reachable (for example, if Prometheus is served via a reverse</span><br><span class="line">                                 proxy). Used for generating relative and absolute links back to Prometheus itself. If the URL has a path</span><br><span class="line">                                 portion, it will be used to prefix all HTTP endpoints served by Prometheus. If omitted, relevant URL</span><br><span class="line">                                 components will be derived automatically.</span><br><span class="line">      --web.route-prefix&#x3D;&lt;path&gt;  Prefix for the internal routes of web endpoints. Defaults to path of --web.external-url.</span><br><span class="line">      --web.user-assets&#x3D;&lt;path&gt;   Path to static asset directory, available at &#x2F;user.</span><br><span class="line">      --web.enable-lifecycle     Enable shutdown and reload via HTTP request.</span><br><span class="line">      --web.enable-admin-api     Enable API endpoints for admin control actions.</span><br><span class="line">      --web.console.templates&#x3D;&quot;consoles&quot;</span><br><span class="line">                                 Path to the console template directory, available at &#x2F;consoles.</span><br><span class="line">      --web.console.libraries&#x3D;&quot;console_libraries&quot;</span><br><span class="line">                                 Path to the console library directory.</span><br><span class="line">      --web.page-title&#x3D;&quot;Prometheus Time Series Collection and Processing Server&quot;</span><br><span class="line">                                 Document title of Prometheus instance.</span><br><span class="line">      --storage.tsdb.path&#x3D;&quot;data&#x2F;&quot;</span><br><span class="line">                                 Base path for metrics storage.</span><br><span class="line">      --storage.tsdb.retention&#x3D;15d</span><br><span class="line">                                 How long to retain samples in storage.</span><br><span class="line">      --storage.tsdb.no-lockfile</span><br><span class="line">                                 Do not create lockfile in data directory.</span><br><span class="line">      --storage.remote.flush-deadline&#x3D;&lt;duration&gt;</span><br><span class="line">                                 How long to wait flushing sample on shutdown or config reload.</span><br><span class="line">      --storage.remote.read-sample-limit&#x3D;5e7</span><br><span class="line">                                 Maximum overall number of samples to return via the remote read interface, in a single query. 0 means no</span><br><span class="line">                                 limit.</span><br><span class="line">      --storage.remote.read-concurrent-limit&#x3D;10</span><br><span class="line">                                 Maximum number of concurrent remote read calls. 0 means no limit.</span><br><span class="line">      --rules.alert.for-outage-tolerance&#x3D;1h</span><br><span class="line">                                 Max time to tolerate prometheus outage for restoring &#39;for&#39; state of alert.</span><br><span class="line">      --rules.alert.for-grace-period&#x3D;10m</span><br><span class="line">                                 Minimum duration between alert and restored &#39;for&#39; state. This is maintained only for alerts with configured</span><br><span class="line">                                 &#39;for&#39; time greater than grace period.</span><br><span class="line">      --rules.alert.resend-delay&#x3D;1m</span><br><span class="line">                                 Minimum amount of time to wait before resending an alert to Alertmanager.</span><br><span class="line">      --alertmanager.notification-queue-capacity&#x3D;10000</span><br><span class="line">                                 The capacity of the queue for pending Alertmanager notifications.</span><br><span class="line">      --alertmanager.timeout&#x3D;10s</span><br><span class="line">                                 Timeout for sending alerts to Alertmanager.</span><br><span class="line">      --query.lookback-delta&#x3D;5m  The delta difference allowed for retrieving metrics during expression evaluations.</span><br><span class="line">      --query.timeout&#x3D;2m         Maximum time a query may take before being aborted.</span><br><span class="line">      --query.max-concurrency&#x3D;20</span><br><span class="line">                                 Maximum number of queries executed concurrently.</span><br><span class="line">      --query.max-samples&#x3D;50000000</span><br><span class="line">                                 Maximum number of samples a single query can load into memory. Note that queries will fail if they would</span><br><span class="line">                                 load more samples than this into memory, so this also limits the number of samples a query can return.</span><br><span class="line">      --log.level&#x3D;info           Only log messages with the given severity or above. One of: [debug, info, warn, error]</span><br><span class="line">      --log.format&#x3D;logfmt        Output format of log messages. One of: [logfmt, json]</span><br></pre></td></tr></table></figure><h1 id="配置-Prometheus"><a href="#配置-Prometheus" class="headerlink" title="配置 Prometheus"></a>配置 Prometheus</h1><p>Prometheus 的配置采用了 YAML 语法描述，Prometheus 下载好以后会有一个示例配置文件，文件名叫 <code>prometheus.yml</code> ，可以先配置这个文件。</p><p>将示例配置文件删除注释和一些高级配置以后，剩下的最基本、最少的配置项如下</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">global:</span><br><span class="line">  scrape_interval:     15s</span><br><span class="line">  evaluation_interval: 15s</span><br><span class="line"></span><br><span class="line">rule_files:</span><br><span class="line">  # - &quot;first.rules&quot;</span><br><span class="line">  # - &quot;second.rules&quot;</span><br><span class="line"></span><br><span class="line">scrape_configs:</span><br><span class="line">  - job_name: prometheus</span><br><span class="line">    static_configs:</span><br><span class="line">      - targets: [&#39;localhost:9090&#39;]</span><br></pre></td></tr></table></figure><p>在示例配置文件中有三个配置块：global、rule_files、scrape_configs 。</p><p><code>global</code> 块控制 Prometheus 服务的全局配置，有两个选项。<code>scrape_interval</code> 控制Prometheus 采集数据的频率。你可以为某些指标数据覆盖此选项。默认情况下，全局设置是每15秒采集一次。<code>evaluation_interval</code>选项控制 Prometheus 评估规则的频率。Prometheus 使用规则创建新的时间序列并生成警报。</p><p><code>rule_files</code> 用来指定我们需要加载的规则的配置文件路径，这个配置文件也是 YAML 语法。当前没有配置规则，这部分注释掉不生效。</p><p><code>scrape_configs</code> 控制 Prometheus 监听的资源。由于 Prometheus 还将自己的数据作通过 HTTP 公开出来，因此它可以收集和监控自己的健康状况。在默认配置中有一个名为prometheus 的 job，它抓取 prometheus 服务公开的时间序列数据。该 Job 包含一个静态配置的目标，一般是本地主机的 9090 端口。 Prometheus 希望 Metric 能够在 <code>/metric</code> 的路径上可用。所以默认的 job 可以通过如下 RUEL 来采集，<a href="http://localhost:9090/metrics" target="_blank" rel="noopener">http://localhost:9090/metrics</a> .</p><p>返回的时间序列数据详细描述了 Prometheus 服务的状态和性能。</p><p>对于完整的配置文件，可以查看<a href="https://prometheus.io/docs/prometheus/latest/configuration/configuration/" target="_blank" rel="noopener">官网的文档</a> ， 后续我也会整理出来。</p><h1 id="启动-Prometheus"><a href="#启动-Prometheus" class="headerlink" title="启动 Prometheus"></a>启动 Prometheus</h1><p>使用刚才修改好的配置文件来启动 Prometheus，切换到 Prometheus 二进制文件的目录下，执行如下命令。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">.&#x2F;prometheus --config.file&#x3D;prometheus.yml</span><br></pre></td></tr></table></figure><blockquote><p>当二进制文件和配置文件在同一个目录的时候可以直接使用上述命令。如果不在同一个目录，请指定配置文件的绝对路径。</p></blockquote><p>这样 Prometheus 就会启动起来。你可以使用浏览器访问 <a href="http://localhost:9090" target="_blank" rel="noopener">http://localhost:9090</a> 地址可以看到关于它自身的状态页面，Prometheus 在启动 30 秒以后在页面就可以看到数据了。</p><p>你也可以通过访问 <a href="http://localhost:9090/metrics，来验证" target="_blank" rel="noopener">http://localhost:9090/metrics，来验证</a> Prometheus 是否在暴露自己的指标。</p><h1 id="使用浏览器查看"><a href="#使用浏览器查看" class="headerlink" title="使用浏览器查看"></a>使用浏览器查看</h1><p>我们来看一下 Prometheus 收集的一些关于自己的数据。访问 <a href="http://localhost:9090/graph，并在" target="_blank" rel="noopener">http://localhost:9090/graph，并在</a> “graph” 选项卡中选择 “Console” 视图。</p><p>将 <code>promhttp_metric_handler_requests_total</code> (Prometheus 提供的一个Metric 名称) 输入到控制台，这将返回许多不同的时间序列(以及为每个时间序列记录的最新值)，所有这些时间序列的 Metric 名称都是 promhttp_metric_handler_requests_total，但是具有不同的 label 。这些 label 指定不同的请求状态。</p><p>如果想看 HTTP 请求返回码 200 的数据，可以使用下面这条语句:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">promhttp_metric_handler_requests_total&#123;code&#x3D;&quot;200&quot;&#125;</span><br></pre></td></tr></table></figure><p>如果要计算返回的时间序列的数量，可以使用 count 来查询，后边会写到函数相关的内容:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">count(promhttp_metric_handler_requests_total)</span><br></pre></td></tr></table></figure><h1 id="推荐目录结构"><a href="#推荐目录结构" class="headerlink" title="推荐目录结构"></a>推荐目录结构</h1><p>新安装的 Prometheus 建议使用如下目录结构进行调整。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line">.</span><br><span class="line">├── conf</span><br><span class="line">│   └── prometheus.yml</span><br><span class="line">├── current -&gt; deploy&#x2F;prometheus-2.8.1.linux-amd64</span><br><span class="line">├── data</span><br><span class="line">├── deploy</span><br><span class="line">│   └── prometheus-2.8.1.linux-amd64</span><br><span class="line">│       ├── LICENSE</span><br><span class="line">│       ├── NOTICE</span><br><span class="line">│       ├── console_libraries</span><br><span class="line">│       ├── consoles</span><br><span class="line">│       ├── prometheus</span><br><span class="line">│       ├── prometheus.yml</span><br><span class="line">│       └── promtool</span><br><span class="line">├── logs</span><br><span class="line">│   └── prometheus.log</span><br><span class="line">├── run</span><br><span class="line">│   └── prometheus.pid</span><br><span class="line">└── scripts</span><br><span class="line">    └── run.sh</span><br></pre></td></tr></table></figure><p><code>conf</code> 目录用来存储 Prometheus 的配置文件，启动的时候指定配置文件。</p><p><code>current</code> 该目录软连接到二进制文件所在的目录</p><p><code>data</code> Prometheus 数据库的数据存储位置，</p><p><code>deploy</code> 放置 Prometheus 的二进制文件，方便 current 进行软连接</p><p><code>logs</code> 存放日志。如果普通用户启动，建议日志放置在这个目录。如果 root 用户启动，日志可以放在这个目录，也可以放在 /var/log/messages </p><p><code>scripts</code> 放置启动脚本。如果普通用户启动 ，放置启动进程的脚本。如果 root 用户启动，可以放置脚本到该目录，或者写成系统服务。</p><p>使用该目录结构可以方便的进行备份、迁移、升级、维护。</p><p>提供一个启动脚本 start.sh 的参考模板</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">#!&#x2F;bin&#x2F;bash</span><br><span class="line">BASEPATH&#x3D;&#x2F;opt&#x2F;prometheus</span><br><span class="line">LOG&#x3D;$BASEPATH&#x2F;logs</span><br><span class="line">nohup $BASEPATH&#x2F;current&#x2F;prometheus --config.file&#x3D;$BASEPATH&#x2F;conf&#x2F;prometheus.yml --web.listen-address&#x3D;:9090 --storage.tsdb.path&#x3D;$BASEPATH&#x2F;data&#x2F;  --storage.tsdb.retention&#x3D;31d &gt;&gt; $LOG&#x2F;prometheus.log  2&gt;&amp;1 &amp; echo $! &gt; $BASEPATH&#x2F;run&#x2F;prometheus.pid</span><br><span class="line"></span><br><span class="line">sleep 5</span><br><span class="line">PROC&#x3D;&#96;ps -ef |grep \&#96;cat $BASEPATH&#x2F;run&#x2F;prometheus.pid\&#96; |grep -v grep&#96;</span><br><span class="line"></span><br><span class="line">if  [ ! -n &quot;$PROC&quot; ] ;then</span><br><span class="line">    echo &quot;##########################################&quot;</span><br><span class="line">    echo &quot;Process not found, please check by yourself&quot;</span><br><span class="line">    echo &quot;##########################################&quot;</span><br><span class="line">else</span><br><span class="line">    echo &quot;##########################################&quot;</span><br><span class="line">    echo &quot;Prometheus is running&quot;</span><br><span class="line">    echo &quot;##########################################&quot;</span><br><span class="line">fi</span><br></pre></td></tr></table></figure><p>该脚本做了如下内容</p><ul><li>指定配置文件</li><li>指定数据暴露的端口</li><li>指定数据文件存储的路径</li><li>指定数据文件存储的时间（轮询时间）</li><li>指定日志的存储位置（nohup 输出作为日志）</li><li>生成 PID 文件</li></ul><p>CentOS 7 启动脚本可以使用如下模板，</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">[Unit]</span><br><span class="line">Description&#x3D;Prometheus Server</span><br><span class="line">After&#x3D;network.target</span><br><span class="line"></span><br><span class="line">[Service]</span><br><span class="line">ExecStart&#x3D;&#x2F;opt&#x2F;prometheus&#x2F;current&#x2F;prometheus --config.file&#x3D;&#x2F;opt&#x2F;prometheus&#x2F;conf&#x2F;prometheus.yml --web.listen-address&#x3D;:9090 --storage.tsdb.path&#x3D;&#x2F;opt&#x2F;prometheus&#x2F;data&#x2F;  --storage.tsdb.retention&#x3D;30d</span><br><span class="line">User&#x3D;root</span><br><span class="line"></span><br><span class="line">[Install]</span><br><span class="line">WantedBy&#x3D;multi-user.target</span><br></pre></td></tr></table></figure><ul><li>使用 root 用户启动</li><li>日志会存储在 /var/log/messages</li><li>指定配置文件</li><li>指定数据暴露的端口</li><li>指定数据文件存储的路径</li><li>指定数据文件存储的时间（轮询时间）</li></ul><p>大家根据自己需求取用、修改。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Prometheus是一个监控平台，它通过抓取这些目标主机上采集器暴露的指标来展示监控数据。本文介绍如何安装、配置和监控 Prometheus。你需要下载安装 Prometheus 并且安装 Exporter，这些工具采集了主机和对应服务的时间序列数据。我们的第一个 Exporter 是 Prometheus 本身，它提供了关于内存使用、垃圾收集等各种各样的主机级指标。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="notes" scheme="https://erdong.site/categories/Prometheus/notes/"/>
    
    
      <category term="Prometheus" scheme="https://erdong.site/tags/Prometheus/"/>
    
  </entry>
  
  <entry>
    <title>工程师的显示器怎么选</title>
    <link href="https://erdong.site/article/two-monitors-or-one-ultrawide.html"/>
    <id>https://erdong.site/article/two-monitors-or-one-ultrawide.html</id>
    <published>2019-05-11T07:15:28.000Z</published>
    <updated>2019-10-14T11:13:48.612Z</updated>
    
    <content type="html"><![CDATA[<p>作为计算机工程师，我们想用各种方法来提高我们的生产力，今天我们来看看显示器对生产力的影响。小尺寸的显示器，用户同时打开很多窗口不能全部展示，在窗口之间切换很费时。</p><a id="more"></a><p>显然，我不是第一个想到这一点的人。NEC的研究人员得出了这样的结论:</p><ul><li>宽屏显示器的效率相当于两台显示器的总和；</li><li>与19英寸显示器相比，22英寸显示器的性能提高了30%；</li><li>与22英寸显示器相比，26英寸显示器的性能提高了20%；</li><li>然而，与26英寸的“冠军”相比，使用30英寸显示器时的性能有所下降；</li><li>然而，使用30英寸的显示器仍然比使用19英寸的显示器更有效率。</li></ul><p>戴尔公司声称，如果同时使用两台显示器，而且这两台显示器都被直接分配到工作任务中，而不是在划水看视频，那么员工的工作效率最高可提高30%。当然，这些说法可能有些偏颇。</p><p>密歇根大学(University of Michigan)心理学教授戴维•迈耶(David Meyer)认为，与专注于一台显示器相比，同时使用多台显示器会对工作效率产生负面影响。人们的注意力被分散，他们的工作流程不停的被打断。</p><p>开发者科里•豪斯写道:“人们一次只能专注于一件事。那么，为什么我们要花钱同时展示几样东西呢?如果为了看一眼我的电子邮件或社交网络而花费他们所有的时间。这不仅没有必要，而且会适得其反。一个显示器意味着我的工作，而且只有我的工作显示在前面和中央。分心的事物总是在视线之外，因此也就不必担心分心了。”</p><p>每个人都有自己的观点，所以 Keen Ethics 决定进行自己的实验。</p><p>实验选择了三个人:第一个人使用了一个24英寸的显示器，第二个参与者使用一个25英寸的显示器，长径比为21:9，第三个参与者使用了两个24英寸的显示器。这项研究持续了三个星期。每个星期，参与者交换他们的显示器，并在周五使用他们过去四天一直使用的显示器执行相同的任务。</p><p>实验表明，与使用单一显示器的参与者相比，使用两台显示器执行任务的参与者花的时间更少。这可以解释为，在一个监视器上打开任务的程序，在另一个监视器上打开任务本身和搜索引擎，员工在选项卡之间切换、查看任务等方面花费的时间更少。在一台显示器上平均工作10分钟，一个人在选项卡之间切换大约10 - 15次，而在两台显示器上，这个数字几乎下降了两倍。此外，参与者报告说，切换窗口会降低注意力。</p><p>关于健康方面，当你使用两台显示器时，你必须更频繁地转头。使用两台显示器工作时，与使用一台显示器相比，使用者的颈部转动幅度最高可达10°。因此，一个24英寸的显示器和一个25英寸的显示器在颈部运动上的差异也存在，但并不显著。因此，当工作在两个显示器可能需要按摩或体育锻炼以减少颈部疲劳。</p><h1 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h1><p>两个显示器：</p><ul><li>更大的生产力</li></ul><p>一个宽屏显示器：</p><ul><li>更加健康</li><li>更少的花费（比两个显示器价格少一些）</li><li>工作场所需要的空间更少</li></ul><p>从我个人的感觉来说，两个显示器确实比一个显示器效率更高。</p><p>但是一个带鱼显示器（21：9）比两个显示器更舒适。</p><p>我觉得单个显示器的时候，24 寸到 27 寸是最合适，</p><p>两个显示器的时候，23~24 寸最合适</p><p>一个带鱼显示器（21：9）的 30~35 寸是最合适的。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;作为计算机工程师，我们想用各种方法来提高我们的生产力，今天我们来看看显示器对生产力的影响。小尺寸的显示器，用户同时打开很多窗口不能全部展示，在窗口之间切换很费时。&lt;/p&gt;
    
    </summary>
    
    
      <category term="article" scheme="https://erdong.site/categories/article/"/>
    
    
      <category term="monitor" scheme="https://erdong.site/tags/monitor/"/>
    
      <category term="ultrawide" scheme="https://erdong.site/tags/ultrawide/"/>
    
  </entry>
  
  <entry>
    <title>第19周分享</title>
    <link href="https://erdong.site/weekly/weekly19.html"/>
    <id>https://erdong.site/weekly/weekly19.html</id>
    <published>2019-05-11T03:06:24.000Z</published>
    <updated>2019-10-14T11:17:25.897Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="新闻"><a href="#新闻" class="headerlink" title="新闻"></a>新闻</h1><h2 id="1-RHEL-8-发布"><a href="#1-RHEL-8-发布" class="headerlink" title="1. RHEL 8 发布"></a>1. <a href="https://developers.redhat.com/blog/2019/05/07/red-hat-enterprise-linux-8-now-generally-available/" target="_blank" rel="noopener">RHEL 8 发布</a></h2><p>在 RHEL 7 系列发布将近5年之后，RHEL 8 在这个月发布了。</p><p>Red Hat表示：“RHEL 8 是为混合云时代重新设计的操作系统，旨在支持从企业数据中心到多个公共云的工作负载和运作。从Linux容器、混合云到DevOps、人工智能，RHEL 8 不仅在混合云中支持企业IT，还可以帮助这些新技术战略蓬勃发展。”</p><p>RHEL 8 为混合云时代的到来引入了大量新功能，包括用于配置、管理、修复和配置 RHEL 8 的 Red Hat Smart Management 扩展程序，以及包含快速迁移框架、编程语言额和诸多开发者工具在内的 Application Streams。</p><p>在安全方面，RHEL 8 内置了对 OpenSSL 1.1.1 和 TLS 1.3 加密标准的支持。它还为 Red Hat 容器工具包提供全面支持，用于创建，运行和共享容器化应用程序，改进对 ARM 和 POWER 架构的支持，SAP 解决方案和实时应用程序，以及对 Red Hat 混合云基础架构的支持。</p><p>RHEL 8  下载地址： <a href="http://developers.redhat.com/rhel8" target="_blank" rel="noopener">http://developers.redhat.com/rhel8</a> </p><h1 id="工具"><a href="#工具" class="headerlink" title="工具"></a>工具</h1><h2 id="1-Windows-Terminal"><a href="#1-Windows-Terminal" class="headerlink" title="1. Windows Terminal"></a>1. <a href="https://github.com/microsoft/Terminal" target="_blank" rel="noopener">Windows Terminal</a></h2><p>Windows Terminal是微软推出的新的命令行应用程序，提供多标签、分割窗口、快捷键、完整的Unicode字符支持等功能。</p><p>最重要的是，它支持PowerShell，Cmd，WSL（Windows的Linux子系统）和SSH等命令行程序，可以说是全平台制霸，简化开发者的工作流程。</p><p>而且，颜值即正义！微软还给Windows Terminal加入很多细节功能，让它更美观。</p><p>Windows Terminal使用的是基于DirectWrite/DirectX的GPU加速文本渲染引擎。</p><p>这个新的引擎支持显示PC中存在的文本字符，意味着终端里的汉字、日文不再乱码，而且还能玩emoji表情。</p><p>在微软展示的Demo中，你可以为自己的shell程序通过测试加入emoji表情提示。</p><p>此外，微软还为它增加了一种新的等宽字，以增强现代外观和感觉。这种字体不仅包括编程连字，而且它也是开源的，并有自己的repo。微软表示，将来会开放下载。</p><h2 id="2-shields"><a href="#2-shields" class="headerlink" title="2. shields"></a>2. <a href="https://shields.io" target="_blank" rel="noopener">shields</a></h2><p>一个徽章工具，用在很多 Github 的开源项目里，但是不仅仅能用在 Github，可以用在任何你想使用的地方。这篇文章对 shields 有一个基本的介绍。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
      <category term="weekly" scheme="https://erdong.site/tags/weekly/"/>
    
  </entry>
  
  <entry>
    <title>Erdong Notes</title>
    <link href="https://erdong.site/article/erdong-notes.html"/>
    <id>https://erdong.site/article/erdong-notes.html</id>
    <published>2019-05-11T02:58:15.000Z</published>
    <updated>2019-10-14T11:06:50.015Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录我的一些学习笔记和一些发布在其他地方的文章。</p><a id="more"></a><h1 id="Notes"><a href="#Notes" class="headerlink" title="Notes"></a>Notes</h1><h2 id="ACP-Notes"><a href="#ACP-Notes" class="headerlink" title="ACP Notes"></a>ACP Notes</h2><ul><li><a href="https://github.com/erdong/acp-notes" target="_blank" rel="noopener">Github</a></li><li><a href="http://erdong.site/acp-notes/">Gitbook</a></li></ul><h2 id="Ansible-Notes"><a href="#Ansible-Notes" class="headerlink" title="Ansible Notes"></a>Ansible Notes</h2><ul><li><a href="https://github.com/erdong/ansible-notes" target="_blank" rel="noopener">Github</a></li><li><a href="http://erdong.site/ansible-notes/">Gitbook</a></li></ul><h2 id="Prometheus-Notes"><a href="#Prometheus-Notes" class="headerlink" title="Prometheus Notes"></a>Prometheus Notes</h2><ul><li><a href="https://github.com/erdong/prometheus-notes" target="_blank" rel="noopener">Github</a></li><li><a href="http://erdong.site/prometheus-notes/">Gitbook</a></li></ul><h1 id="Article"><a href="#Article" class="headerlink" title="Article"></a>Article</h1><h2 id="CCF-TF-讲稿整理"><a href="#CCF-TF-讲稿整理" class="headerlink" title="CCF TF 讲稿整理"></a>CCF TF 讲稿整理</h2><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录我的一些学习笔记和一些发布在其他地方的文章。&lt;/p&gt;
    
    </summary>
    
    
      <category term="article" scheme="https://erdong.site/categories/article/"/>
    
    
      <category term="article" scheme="https://erdong.site/tags/article/"/>
    
      <category term="note" scheme="https://erdong.site/tags/note/"/>
    
  </entry>
  
  <entry>
    <title>第18周分享</title>
    <link href="https://erdong.site/weekly/weekly18.html"/>
    <id>https://erdong.site/weekly/weekly18.html</id>
    <published>2019-05-05T03:06:24.000Z</published>
    <updated>2019-10-14T11:17:19.961Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="工具"><a href="#工具" class="headerlink" title="工具"></a>工具</h1><h2 id="1-github-rank"><a href="#1-github-rank" class="headerlink" title="1. github-rank"></a>1. <a href="https://github.com/jaywcjlove/github-rank" target="_blank" rel="noopener">github-rank</a></h2><p>Github 仓库、用户排名。</p><p>比如 <a href="https://github.com/jaywcjlove/github-rank" target="_blank" rel="noopener">Github China User Ranking</a></p><h1 id="资源"><a href="#资源" class="headerlink" title="资源"></a>资源</h1><h2 id="1-Open-source-jobs"><a href="#1-Open-source-jobs" class="headerlink" title="1. Open source jobs"></a>1. <a href="https://oo.t9t.io/jobs" target="_blank" rel="noopener">Open source jobs</a></h2><p>该网站收集了一份提供工作机会的开源项目列表，网站 slogan 是 “Working on open source and get paid” ，这个网站本身也是开源的: <a href="https://github.com/t9tio/open-source-jobs" target="_blank" rel="noopener">https://github.com/t9tio/open-source-jobs</a> 。</p><h2 id="2-外文期刊检索与下载"><a href="#2-外文期刊检索与下载" class="headerlink" title="2. 外文期刊检索与下载"></a>2. <a href="http://www.6453.net/" target="_blank" rel="noopener">外文期刊检索与下载</a></h2><p>偶然发现的一个外文期刊检索与下载的网站，里面集合了很多可以下载外文期刊的链接。</p><p>还有一个相似的网站 ：  <a href="http://www.4243.net/" target="_blank" rel="noopener">http://www.4243.net/</a> 。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
      <category term="weekly" scheme="https://erdong.site/tags/weekly/"/>
    
  </entry>
  
  <entry>
    <title>第17周分享</title>
    <link href="https://erdong.site/weekly/weekly17.html"/>
    <id>https://erdong.site/weekly/weekly17.html</id>
    <published>2019-04-28T03:06:24.000Z</published>
    <updated>2019-10-14T11:17:12.340Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="教程"><a href="#教程" class="headerlink" title="教程"></a>教程</h1><h2 id="1-上海交通大学课程分享"><a href="#1-上海交通大学课程分享" class="headerlink" title="1. 上海交通大学课程分享"></a>1. <a href="https://github.com/CoolPhilChen/SJTU-Courses" target="_blank" rel="noopener">上海交通大学课程分享</a></h2><p>上海交通大学的课程分享。目前主要以计算机相关课程为主。</p><h2 id="2-浙江大学课程攻略共享计划"><a href="#2-浙江大学课程攻略共享计划" class="headerlink" title="2. 浙江大学课程攻略共享计划"></a>2. <a href="https://github.com/QSCTech/zju-icicles" target="_blank" rel="noopener">浙江大学课程攻略共享计划</a></h2><p>浙江大学课程共享，目前主要以计算机为主，也有英语、马克思、物理、化学等课程。</p><h2 id="3-传承-amp-交大"><a href="#3-传承-amp-交大" class="headerlink" title="3. 传承&amp;交大"></a>3. <a href="http://share.sjtu.edu.cn" target="_blank" rel="noopener">传承&amp;交大</a></h2><p>上海交大传承团队出品的课程，可以找到很多上海交大的课程资料。</p><h2 id="4-广东工业大学计算机学院课程"><a href="#4-广东工业大学计算机学院课程" class="headerlink" title="4. 广东工业大学计算机学院课程"></a>4. <a href="https://github.com/brenner8023/gdut-course" target="_blank" rel="noopener">广东工业大学计算机学院课程</a></h2><p>该仓库收集该校从大一到大四各门课程的资料。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
      <category term="weekly" scheme="https://erdong.site/tags/weekly/"/>
    
  </entry>
  
  <entry>
    <title>【翻译】Prometheus 2.8.0 新特性</title>
    <link href="https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-8-0.html"/>
    <id>https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-8-0.html</id>
    <published>2019-04-24T22:09:34.000Z</published>
    <updated>2019-10-14T11:10:13.176Z</updated>
    
    <content type="html"><![CDATA[<p>Prometheus <a href="https://github.com/prometheus/prometheus/releases/tag/v2.8.0" target="_blank" rel="noopener">2.8.0</a> 现在(2019.03.18)已经发布，在上个月的 <a href="http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-7-0.html">2.7.0</a> 之后又进行了一些修正和改进。</p><a id="more"></a><p>这个版本中最大的变化是远程写现在通过 WAL 工作，使它更加可靠，资源使用更加可预测。另一个改进是TSDB现在支持压缩重叠块，将来的特性将使用这些重叠块来支持批量导入。</p><p>需要注意的一件事是，如果您指定了–storage.tsdb.retention。那么默认的时间保留将不适用。您还可以指定时间保留，在这种情况下两者都适用。</p><p>还有其他一些小的改进，包括PromQL 多对多匹配出现错误时显示违规的标签，重新加载配置对警报的影响已经减少，现在表达式浏览器度量自动完成有10k的限制，以避免包含标签的度量名称过多，导致浏览器退出。</p><p>还有许多改进、bug修复和其他更改，可以查看 <a href="https://github.com/prometheus/prometheus/releases/tag/v2.8.0" target="_blank" rel="noopener">release notes</a> 来获取更多的信息。</p><h1 id="原文链接"><a href="#原文链接" class="headerlink" title="原文链接"></a>原文链接</h1><ul><li><a href="https://www.robustperception.io/new-features-in-prometheus-2-8-0" target="_blank" rel="noopener">https://www.robustperception.io/new-features-in-prometheus-2-8-0</a> ， By Brian Brazil</li></ul><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Prometheus &lt;a href=&quot;https://github.com/prometheus/prometheus/releases/tag/v2.8.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2.8.0&lt;/a&gt; 现在(2019.03.18)已经发布，在上个月的 &lt;a href=&quot;http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-7-0.html&quot;&gt;2.7.0&lt;/a&gt; 之后又进行了一些修正和改进。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="New-Features" scheme="https://erdong.site/categories/Prometheus/New-Features/"/>
    
    
      <category term="Prometheus" scheme="https://erdong.site/tags/Prometheus/"/>
    
      <category term="Features" scheme="https://erdong.site/tags/Features/"/>
    
      <category term="release" scheme="https://erdong.site/tags/release/"/>
    
  </entry>
  
  <entry>
    <title>【翻译】Prometheus 2.9.0 新特性</title>
    <link href="https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-9-0.html"/>
    <id>https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-9-0.html</id>
    <published>2019-04-24T22:09:34.000Z</published>
    <updated>2019-10-14T11:10:22.388Z</updated>
    
    <content type="html"><![CDATA[<p>Prometheus <a href="https://github.com/prometheus/prometheus/releases/tag/v2.9.0" target="_blank" rel="noopener">2.9.0</a> 现在(2019.04.15)已经发布，在上个月的 <a href="http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-8-0.html">2.8.0</a> 之后又进行了一些修正和改进。</p><a id="more"></a><p>在 2.8.0 中引入的从 WAL 远程写读取时缺少时间序列的问题已经解决。这还应该修复启动时的 “unknown series references” 警告。为了让问题消失，需要一个干净的WAL(或等待所有的时间序列粗制滥造)。节省了远程写的内存使用，降低了片状目标对CPU的影响，并且对于连续第三个版本，针对 TSDB 中的索引也有了改进。</p><p>有一个 <code>honor_timestamp</code> 选项来处理异常目标产生的不必要和有问题的时间戳。TLS 证书现在从磁盘自动重新加载，现在 scrapes 交错跨 Prometheus 服务间(以前它们只交错在 Prometheus 服务中)。在服务发现中，OpenStack 和 Kubernetes 有更多的元数据，Consul 现在支持更多的 tags 如果你使用 tag ( 现在是 tags )配置字段来提高性能，。</p><p>还有其他一些小的改进，包括可读性稍强的日志输出、状态页包含更多信息以及其他端点通过POST工作。</p><p>还有许多改进、bug修复和其他更改，可以查看 <a href="https://github.com/prometheus/prometheus/releases/tag/v2.9.0" target="_blank" rel="noopener">release notes</a> 来获取更多的信息。</p><h1 id="原文链接"><a href="#原文链接" class="headerlink" title="原文链接"></a>原文链接</h1><ul><li><a href="https://www.robustperception.io/new-features-in-prometheus-2-7-0" target="_blank" rel="noopener">https://www.robustperception.io/new-features-in-prometheus-2-7-0</a> ， By Brian Brazil</li></ul><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Prometheus &lt;a href=&quot;https://github.com/prometheus/prometheus/releases/tag/v2.9.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2.9.0&lt;/a&gt; 现在(2019.04.15)已经发布，在上个月的 &lt;a href=&quot;http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-8-0.html&quot;&gt;2.8.0&lt;/a&gt; 之后又进行了一些修正和改进。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="New-Features" scheme="https://erdong.site/categories/Prometheus/New-Features/"/>
    
    
      <category term="Prometheus" scheme="https://erdong.site/tags/Prometheus/"/>
    
      <category term="Features" scheme="https://erdong.site/tags/Features/"/>
    
      <category term="release" scheme="https://erdong.site/tags/release/"/>
    
  </entry>
  
  <entry>
    <title>第16周分享</title>
    <link href="https://erdong.site/weekly/weekly16.html"/>
    <id>https://erdong.site/weekly/weekly16.html</id>
    <published>2019-04-21T03:06:24.000Z</published>
    <updated>2019-10-14T11:17:05.746Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="工具"><a href="#工具" class="headerlink" title="工具"></a>工具</h1><h2 id="1-snip"><a href="#1-snip" class="headerlink" title="1. snip"></a>1. <a href="https://mathpix.com" target="_blank" rel="noopener">snip</a></h2><p>Mathpix 出品的 Snip 是一个免费的的工具，可用把各种公式转换成 LaTeX。除了印刷的公式，手写公式也能识别转换，但是要求字迹工整。除了公式，化学方程式和矩阵也能识别，支持 Mac、Windows、Ubuntu。</p><h1 id="资源"><a href="#资源" class="headerlink" title="资源"></a>资源</h1><h2 id="1-wallpaperwide"><a href="#1-wallpaperwide" class="headerlink" title="1. wallpaperwide"></a>1. <a href="http://wallpaperswide.com" target="_blank" rel="noopener">wallpaperwide</a></h2><p>一个高清壁纸网站，分类比较齐全。</p><ol start="2"><li><a href="https://interfacelift.com/wallpaper/downloads/date/any/" target="_blank" rel="noopener">InterfaceLIFT</a></li></ol><p>一个高清壁纸网站，有各种高分辨率的图片，还可以针对部分设备型号进行下载。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
      <category term="weekly" scheme="https://erdong.site/tags/weekly/"/>
    
  </entry>
  
  <entry>
    <title>第15周分享</title>
    <link href="https://erdong.site/weekly/weekly15.html"/>
    <id>https://erdong.site/weekly/weekly15.html</id>
    <published>2019-04-14T03:06:24.000Z</published>
    <updated>2019-10-14T11:16:57.284Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="新闻"><a href="#新闻" class="headerlink" title="新闻"></a>新闻</h1><h2 id="1-Developer-Survey-Results-2019"><a href="#1-Developer-Survey-Results-2019" class="headerlink" title="1. Developer Survey Results 2019"></a>1. <a href="https://insights.stackoverflow.com/survey/2019" target="_blank" rel="noopener">Developer Survey Results 2019</a></h2><p>Stack Overflow 发布了 Developer Survey Results 2019 报告，今年，有将近 90000 名开发者在 Stack Overflow 上提交了他们的反馈。</p><h1 id="工具"><a href="#工具" class="headerlink" title="工具"></a>工具</h1><h2 id="1-Aroma"><a href="#1-Aroma" class="headerlink" title="1. Aroma"></a>1. <a href="http://www.eeworld.com.cn/mp/QbitAI/a64179.jspx" target="_blank" rel="noopener">Aroma</a></h2><p>Facebook 在其官方博客上宣布，推出面向程序员的工具Aroma。它能帮助程序员轻松地找到可以“参考使用”的代码，节省他们日常开发工作流程中的时间和精力。</p><h1 id="资源"><a href="#资源" class="headerlink" title="资源"></a>资源</h1><h2 id="1-Serverless-FaaS-的现状和未来"><a href="#1-Serverless-FaaS-的现状和未来" class="headerlink" title="1. Serverless/FaaS 的现状和未来"></a>1. <a href="http://jolestar.com/serverless-faas-current-status-and-future/" target="_blank" rel="noopener">Serverless/FaaS 的现状和未来</a></h2><p>这篇文章 Serverless 和 FaaS 说的还比较明白。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
      <category term="weekly" scheme="https://erdong.site/tags/weekly/"/>
    
  </entry>
  
  <entry>
    <title>第14周分享</title>
    <link href="https://erdong.site/weekly/weekly14.html"/>
    <id>https://erdong.site/weekly/weekly14.html</id>
    <published>2019-04-07T03:06:24.000Z</published>
    <updated>2019-10-14T11:16:50.335Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="教程"><a href="#教程" class="headerlink" title="教程"></a>教程</h1><h2 id="1-tensorflow-internals"><a href="#1-tensorflow-internals" class="headerlink" title="1. tensorflow-internals"></a>1. <a href="https://github.com/horance-liu/tensorflow-internals" target="_blank" rel="noopener">tensorflow-internals</a></h2><p>一个程序员父亲对女儿的爱</p><p>书在内容上并没有涉及到如何使用TensorFlow构建机器学习模型，也不涉及应用TensorFlow最佳实践，它是通过剖析源码的方式，向读者揭示 TensorFlow 的系统架构、领域模型、工作原理、及其实现模式等相关内容，虽然不适合完全零基础的人，但是也相对友好。</p><p>试想，人家的女儿已经默认掌握了机器学习相关基本概念与理论，并且熟悉Python、C++等程序设计语言……</p><h1 id="工具"><a href="#工具" class="headerlink" title="工具"></a>工具</h1><h2 id="1-LayAuto"><a href="#1-LayAuto" class="headerlink" title="1. LayAuto"></a>1. <a href="https://sspai.com/post/4152" target="_blank" rel="noopener">LayAuto</a></h2><p>LayAuto 2.0 版本已经发布，作为一个窗口管理工具，它以解放双手的全自动化的桌面窗口整理和体贴的多分辨率显示器智能适配为卖点，从许多优秀 Mac 窗口管理工具的红海中杀出重围。文中介绍了 layauto 的新功能特点。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
      <category term="weekly" scheme="https://erdong.site/tags/weekly/"/>
    
  </entry>
  
  <entry>
    <title>第13周分享</title>
    <link href="https://erdong.site/weekly/weekly13.html"/>
    <id>https://erdong.site/weekly/weekly13.html</id>
    <published>2019-03-31T03:06:24.000Z</published>
    <updated>2019-10-14T11:16:43.848Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="资源"><a href="#资源" class="headerlink" title="资源"></a>资源</h1><h2 id="1-Language-Design-in-the-Service-of-Software-Engineering"><a href="#1-Language-Design-in-the-Service-of-Software-Engineering" class="headerlink" title="1. Language Design in the Service of Software Engineering"></a>1. <a href="https://talks.golang.org/2012/splash.article" target="_blank" rel="noopener">Language Design in the Service of Software Engineering</a></h2><p>2012 年的老文章，Rob 伯伯讲述 Go 很多设计的初衷是什么。凡事必有因，了解背后的故事更有利于理解事物本身。</p><h2 id="2-Redox"><a href="#2-Redox" class="headerlink" title="2. Redox"></a>2. <a href="https://www.redox-os.org/" target="_blank" rel="noopener">Redox</a></h2><p>Redox是一个用Rust语言编写的类UNIX操作系统 , 它的目标是把Rust语言的创新带入到一个现代的微内核和全系列的应用程序。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
      <category term="weekly" scheme="https://erdong.site/tags/weekly/"/>
    
  </entry>
  
  <entry>
    <title>第12周分享</title>
    <link href="https://erdong.site/weekly/weekly12.html"/>
    <id>https://erdong.site/weekly/weekly12.html</id>
    <published>2019-03-24T03:06:24.000Z</published>
    <updated>2019-10-14T11:16:37.037Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="工具"><a href="#工具" class="headerlink" title="工具"></a>工具</h1><h2 id="1-Aetos"><a href="#1-Aetos" class="headerlink" title="1. Aetos"></a>1. <a href="https://github.com/project-aetos/Aetos" target="_blank" rel="noopener">Aetos</a></h2><p>Aetos is a mobile application for monitoring the health &amp; performance of GKE Kubernetes clusters.</p><p>上边是官方的介绍，虽然官方定义为 K8s 的监控，应该可以把 Grafana 里的 Prometheus 数据进行展示，目前只有 iOS 版本。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
      <category term="weekly" scheme="https://erdong.site/tags/weekly/"/>
    
  </entry>
  
  <entry>
    <title>第11周分享</title>
    <link href="https://erdong.site/weekly/weekly11.html"/>
    <id>https://erdong.site/weekly/weekly11.html</id>
    <published>2019-03-17T03:06:24.000Z</published>
    <updated>2019-10-14T11:16:31.071Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="资源"><a href="#资源" class="headerlink" title="资源"></a>资源</h1><h2 id="1-自学是门手艺"><a href="#1-自学是门手艺" class="headerlink" title="1. 自学是门手艺"></a>1. <a href="https://github.com/selfteaching/the-craft-of-selfteaching" target="_blank" rel="noopener">自学是门手艺</a></h2><p>自学能力，对每个个体来说，是在这个变化频率和变化幅度都在不断加大的时代里最具价值的能力。具备这个能力，不一定能直接增加一个人的幸福感（虽然实际上常常确实能），但，它一定会缓解甚至消除一个人的焦虑 —— 若是在一个以肉眼可见的方式变化着的环境里生存，却心知肚明自己已然原地踏步许久，自己正在被这个时代甩在身后，谁能不焦虑呢？</p><p>这本书或者能帮你很好的学习。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
      <category term="weekly" scheme="https://erdong.site/tags/weekly/"/>
    
  </entry>
  
  <entry>
    <title>微信公众号如何创建赞赏账户</title>
    <link href="https://erdong.site/article/wechat-appreciates.html"/>
    <id>https://erdong.site/article/wechat-appreciates.html</id>
    <published>2019-03-17T02:57:15.000Z</published>
    <updated>2019-10-14T11:14:07.645Z</updated>
    
    <content type="html"><![CDATA[<p>开始写微信公众号有一段时间了，经常看到别人的公众号内可以给作者赞赏。如果作者的文章可以收到赞赏也是对作者能力的一种认可。</p><p>翻了翻网站的帮助手册，以及搜索引擎的搜索结果。现在总结一下吧。</p><p>微信公众号平台可能会经常更新，所以现在基于的版本是2018年6月6号以后的赞赏功能。</p><a id="more"></a><h2 id="开通条件"><a href="#开通条件" class="headerlink" title="开通条件"></a>开通条件</h2><p>首先你需要有一个邀请你的公众号，这个公众号可以是你自己的，也可以是别人的，但是需要你关注这个公众号。对于赞赏账户来说，需要有一个公众号邀请你开通，你才能开通。而不是你开通了以后入驻某个公众号，有个先后顺序的问题。</p><p>那么微信公众号如何获得邀请资格呢？</p><p>在微信公众号官网上提到，从2018年6月6号起，公众号每以同一作者名发表3篇或3篇以上的原创文章，即可创建一个赞赏账户，用于赞赏收款。但是这个也是有数量限制的，同一公众号最多可以邀请开通3个赞赏账户。</p><p>需要注意两点，一是，需要先发3篇文章才能邀请，而且是需要标明原创的。二是一个公众号只能开通3个赞赏账户。</p><p>那么问题来了，如果公众号有很多作者，可不可以有多个赞赏账户收取赞赏？</p><p>答案是可以。同一赞赏账户，可在多个公众号中使用。对于已经创建的赞赏账户，公众号就不需要再次邀请了，这样就可以不占用三个邀请名额。</p><p>只要赞赏账号在他的微信小程序 “赞赏账户”的 “可收款公众号” 里添加这个公众号，公众号对文章声明原创时，输入已经开通赞赏账户的账户名，文章作者即可收取赞赏。</p><h2 id="如何开通"><a href="#如何开通" class="headerlink" title="如何开通"></a>如何开通</h2><p>开通赞赏账户有两个步骤，一是公众号满足邀请条件以后，邀请个人微信号。二是个人微信号收到邀请以后填写信息开通。</p><h3 id="首先是公众号邀请"><a href="#首先是公众号邀请" class="headerlink" title="首先是公众号邀请"></a>首先是公众号邀请</h3><p>满足条件的公众号，可以进入左侧 “功能” 大项，点击下边的 “赞赏功能” ，会进入赞赏页面，在赞赏页面的 “赞赏账户” 选项卡里会有邀请按钮，点击后即可邀请个人微信号开通赞赏账户 。</p><p>有如下接个地方需要注意</p><ul><li>被邀请者需要关注该公众号</li><li>填写被邀请者的个人微信号，填写微信绑定的手机或QQ无效</li><li>填写个人微信号以后，在当前版本需要点击右侧的搜索按钮（一个放大镜的图例）搜索被邀请者，搜索到后，点击选择被邀请这。</li><li>如果发出邀请24小时被邀请者未注册则释放名额，名额的消耗和释放会通过站内信通知。</li></ul><h3 id="其次是个人微信设置赞赏账户"><a href="#其次是个人微信设置赞赏账户" class="headerlink" title="其次是个人微信设置赞赏账户"></a>其次是个人微信设置赞赏账户</h3><p>公众号发送赞赏账户开通邀请后，个人微信会收到一个服务通知，通知里是开通账户的邀请，点击会进入一个微信小程序，在这个小程序里进行设置。</p><p>相关注意事项如下：</p><p>赞赏账户名：名称只允许含有中文、英文大小写，长度为4-30个字符（1个汉字等于2个字符），且不可与公众号名称重复。名称不得涉及侵权、违反法律法规以及平台运营规范的内容；<br>头像：可以拍摄一张照片或从手机相册选取图片作为头像；<br>简介：长度4-120个字符，不得涉及侵权、违反法律法规以及平台运营规范的内容；<br>性别：设置作者性别；<br>地区：填写作者地区；<br>实名信息：填写作者真实的姓名、身份证号码（实名信息不会对外展示），且需与当前操作的个人微信实名信息一致，提交后实名信息不支持修改，每个人（以身份证统计）只能开通一个赞赏账户。</p><p>经常遇到的一个问题是创建赞赏账户时提示“名称与已有公众号或作者重复，不能申请使用？”</p><p>原因是为了保护赞赏账户不被抢注，赞赏账户名称和公众号小程序共用一套名称体系，整个体系内名称唯一。此外，微信公众号对部分名人名称做了关键词保护，防止滥用。</p><p>在注册的过程中有一点需要注意，只有从邀请绑定的模板消息进入小程序才可以注册，从其他渠道打开小程序会提示无法注册，而且该小程序的所有页面无法分享。</p><h2 id="管理赞赏账户"><a href="#管理赞赏账户" class="headerlink" title="管理赞赏账户"></a>管理赞赏账户</h2><p>赞赏账户的作者信息可以修改，但是只能修改一次，实名信息无法修改。修改方法是，进入“赞赏账户”小程序，点击上方的作者名-“我的信息”，即可修改作者信息。</p><p>旧名字将会有7天保护期，在7天内可以撤销新名字，恢复原来名称。如果不选择恢复，7天后旧名称就会释放，其它人都可以注册这一名称。需要注意的是，撤销也会占用改名机会，撤销后也不能再进行名称修改。</p><p>如果这个账户要在多个公众号内收款，那么在“赞赏账户”小程序里，点击上方的作者名-“收款公众号”，可以添加或移除设置自己作为原创文章赞赏收款账户的公众号。</p><p>赞赏账户收款的设置是这样，作者可以设置赞赏的六个金额和一句引导语，引导语对全局生效，即每篇文章的赞赏都展示这条，修改引导语也会影响已发布的文章。赞赏支持回复读者，会以“微信公众平台”官方公众号的名义通过服务通知下发，而且每个赞赏只能回复一次。</p><h2 id="赞赏功能"><a href="#赞赏功能" class="headerlink" title="赞赏功能"></a>赞赏功能</h2><p>作者授权公众号后，公众号群发文章可以选择已授权的作者，文章若有勾选“赞赏”读者阅读文章时在底部会有“喜欢作者”选项，读者可以自愿赞赏作者，赞赏的资金平台会结算到开通作者的个人微信号，结算周期为 T+7。作者可以通过“赞赏账户”小程序查看赞赏明细。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;开始写微信公众号有一段时间了，经常看到别人的公众号内可以给作者赞赏。如果作者的文章可以收到赞赏也是对作者能力的一种认可。&lt;/p&gt;
&lt;p&gt;翻了翻网站的帮助手册，以及搜索引擎的搜索结果。现在总结一下吧。&lt;/p&gt;
&lt;p&gt;微信公众号平台可能会经常更新，所以现在基于的版本是2018年6月6号以后的赞赏功能。&lt;/p&gt;
    
    </summary>
    
    
      <category term="article" scheme="https://erdong.site/categories/article/"/>
    
    
      <category term="wechat" scheme="https://erdong.site/tags/wechat/"/>
    
  </entry>
  
  <entry>
    <title>解决 EXT4 使用无法挂载</title>
    <link href="https://erdong.site/linux/system/ext4-error-loading-journal.html"/>
    <id>https://erdong.site/linux/system/ext4-error-loading-journal.html</id>
    <published>2019-03-12T10:49:09.000Z</published>
    <updated>2019-10-14T11:07:01.283Z</updated>
    
    <content type="html"><![CDATA[<h1 id="现象"><a href="#现象" class="headerlink" title="现象"></a>现象</h1><p>使用新版本的操作系统自带的文件系统格式化工具进行分区格式化以后，在较低的操作系统版本上会有提示，提示如下：</p><a id="more"></a><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# mount -t ext4 &#x2F;dev&#x2F;sdb1 &#x2F;root&#x2F;test</span><br><span class="line">mount: 文件系统类型错误、选项错误、&#x2F;dev&#x2F;sdb1 上有坏超级块、</span><br><span class="line">       缺少代码页或助手程序，或其他错误</span><br><span class="line"></span><br><span class="line">       有些情况下在 syslog 中可以找到一些有用信息- 请尝试</span><br><span class="line">       dmesg | tail  这样的命令看看。</span><br></pre></td></tr></table></figure><p>按照提示查看日志发现</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">Mar 12 01:12:20 localhost kernel: JBD2: Unrecognised features on journal</span><br><span class="line">Mar 12 01:12:20 localhost kernel: EXT4-fs (sdb1): error loading journal</span><br></pre></td></tr></table></figure><h1 id="原因分析"><a href="#原因分析" class="headerlink" title="原因分析"></a>原因分析</h1><p>造成上述问题的原因是在新的操作系统上使用系统自带的 mkfs.ext4 对文件系统进行了格式化，默认会使用一些新的的特性，这些新的特性在旧的系统上是无法使用的。</p><p>比如在 Ubuntu 18.04  上进行使用 mkfs.ext4 进行格式化的磁盘，在 CentOS 7.4 1708 上 是可以正常使用的，在 CentOS 7.0 1406 以及以下版本是就是提示上述错误。</p><p>Ubuntu 18.04 的 mkfs 版本是 1.44.1-1 ，CentOS 7.0 1406 的 mkfs 版本是 1.42.9-4。造成了这个差异。CentOS 7.4 1708 的 mkfs 版本是 1.42.9-10 ，Redhat 内部在小版本上新增了这个特性的支持。</p><h1 id="解决办法"><a href="#解决办法" class="headerlink" title="解决办法"></a>解决办法</h1><p>按照日志提示，Unrecognised features on journal  ， 不支持 journal 。</p><p>那么查看文件系统特性：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">#tune2fs -l &#x2F;dev&#x2F;sdb1</span><br><span class="line">Filesystem features: has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super large_file</span><br></pre></td></tr></table></figure><p>文件系统含有一个 has_journal 特性，删除这个特性，删除方式如下：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">#tune2fs -O ^has_journal &#x2F;dev&#x2F;sdb1 &#x2F;&#x2F; 去除has_journal选项</span><br><span class="line">#tune2fs -O has_journal &#x2F;dev&#x2F;sdb1 &#x2F;&#x2F; add has_journal选项</span><br></pre></td></tr></table></figure><p>验证是否删除：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">#tune2fs -l &#x2F;dev&#x2F;sdb1</span><br><span class="line">Filesystem features: ext_attr resize_inode dir_index filetype</span><br></pre></td></tr></table></figure><p>可以看到已经没有这个特性了，再次尝试挂载，</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# mount -t ext4 &#x2F;dev&#x2F;sdb1 &#x2F;root&#x2F;test</span><br><span class="line">[root@localhost ~]# cd test&#x2F;</span><br><span class="line">[root@localhost test]# ls</span><br><span class="line">lost+found  test_dir  test_file.txt</span><br><span class="line">[root@localhost test]# cat test_file.txt</span><br><span class="line">kkdkdkdkkak</span><br><span class="line">kldkjfalkf</span><br><span class="line">kjfklaf</span><br><span class="line">kjafkdj</span><br><span class="line"></span><br><span class="line">[root@localhost test]#</span><br></pre></td></tr></table></figure><p>可以看到，已经可以正常挂载，挂载后的文件也可以正常显示。</p><h1 id="couldn’t-mount-RDWR"><a href="#couldn’t-mount-RDWR" class="headerlink" title="couldn’t mount RDWR"></a>couldn’t mount RDWR</h1><p>在上述的现象里，如果挂载 ext4 到 CentOS 6.5 等更老一些的系统的时候，也会提示部分不支持的特性，在日志里如果出现了如下提示：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">kernel: EXT4-fs (sdb1): couldn&#39;t mount RDWR because of unsupported optional features (400)</span><br></pre></td></tr></table></figure><p>这种情况是因为mkfs.ext4的时候制定的参数，旧的内核不支持导致.</p><p>The ext4 feature (400) is the new metadata_csum feature. If this feature is enabled and old tools are used to mount the filesystem they will only be able to mount read-only.</p><p><a href="https://ext4.wiki.kernel.org/index.php/Ext4_Metadata_Checksums" target="_blank" rel="noopener">https://ext4.wiki.kernel.org/index.php/Ext4_Metadata_Checksums</a></p><p>解决办法一样，可以在创建的时候不使用该特性，或者删除该特性后再 CentOS 6.5 上使用。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# tune2fs -O ^metadata_csum &#x2F;dev&#x2F;sdb1</span><br><span class="line">tune2fs 1.43.1 (08-Jun-2016)</span><br><span class="line"></span><br><span class="line">请在这个文件系统上运行 e2fsck.</span><br></pre></td></tr></table></figure><p>系统提示需要 运行 e2fsck 进行磁盘检查，那么按照要求进行检查, e2fsck 的参数请大家自己选择。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# e2fsck -f -a -v &#x2F;dev&#x2F;sdb1</span><br><span class="line"></span><br><span class="line">          13 inodes used (0.00%, out of 30531584)</span><br><span class="line">           0 non-contiguous files (0.0%)</span><br><span class="line">           0 non-contiguous directories (0.0%)</span><br><span class="line">             # of inodes with ind&#x2F;dind&#x2F;tind blocks: 0&#x2F;0&#x2F;0</span><br><span class="line">             Extent depth histogram: 4</span><br><span class="line">     1935198 blocks used (1.58%, out of 122096637)</span><br><span class="line">           0 bad blocks</span><br><span class="line">           1 large file</span><br><span class="line"></span><br><span class="line">           1 regular file</span><br><span class="line">           3 directories</span><br><span class="line">           0 character device files</span><br><span class="line">           0 block device files</span><br><span class="line">           0 fifos</span><br><span class="line">           0 links</span><br><span class="line">           0 symbolic links (0 fast symbolic links)</span><br><span class="line">           0 sockets</span><br><span class="line">------------</span><br><span class="line">           4 files</span><br></pre></td></tr></table></figure><p>检查完以后，就可以尝试移除这个特性了，期间会询问，请按照实际选择。移除以后挂载就正常了。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# tune2fs -O ^metadata_csum &#x2F;dev&#x2F;sdb1</span><br><span class="line">tune2fs 1.43.1 (08-Jun-2016)</span><br><span class="line">Disabling checksums could take some time.</span><br><span class="line">Proceed anyway (or wait 5 seconds) ? (y,n) y</span><br><span class="line">[root@localhost ~]# mount -t ext4 &#x2F;dev&#x2F;sdb1 &#x2F;root&#x2F;test</span><br><span class="line">[root@localhost ~]# cd test&#x2F;</span><br><span class="line">[root@localhost test]# ls</span><br><span class="line">lost+found  test_dir  test_file.txt</span><br><span class="line">[root@localhost test]#</span><br></pre></td></tr></table></figure><h1 id="tune2fs-版本较低"><a href="#tune2fs-版本较低" class="headerlink" title="tune2fs 版本较低"></a>tune2fs 版本较低</h1><p>执行 tune2fs 如果遇到如下提示：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# tune2fs -O ^has_journal &#x2F;dev&#x2F;sdb1</span><br><span class="line">tune2fs 1.42.9 (28-Dec-2013)</span><br><span class="line">tune2fs: Filesystem has unsupported read-only feature(s) while trying to open &#x2F;dev&#x2F;sdb1</span><br><span class="line">Couldn&#39;t find valid filesystem superblock.</span><br><span class="line">[root@localhost ~]#</span><br></pre></td></tr></table></figure><p>那么说明 tune2fs 版本较低，不支持 has_journal 特性，需要升级到 1.43.1以上才可以。</p><p>在 CentOS 6.5 中， tune2fs 版本更低，是 1.41.12，也需要升级。</p><h1 id="后记"><a href="#后记" class="headerlink" title="后记"></a>后记</h1><p>如果确认是新旧版本的问题导致的无法挂载，那么上述方法就可以解决了。</p><p>如果不是新旧版本的问题，那么还有一种可能，就是磁盘坏了，在这种情况下可以使用下列命令尝试修复。</p><p>特别提示，磁盘修复请慎重选择。本文不保证数据安全性和完整性，只提供一个可供参考的选择。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# e2fsck -f -c -v &#x2F;dev&#x2F;sdb1</span><br><span class="line">e2fsck 1.42.9 (28-Dec-2013)</span><br><span class="line">&#x2F;dev&#x2F;sdb1 has unsupported feature(s): metadata_csum</span><br><span class="line">e2fsck: Get a newer version of e2fsck!</span><br><span class="line">[root@localhost ~]#</span><br></pre></td></tr></table></figure><p>该提示显示 e2fsck 工具不支持 新的特性，meadata_csum , 解决版本是 升级 e2fsck 工具的版本， e2fsck 工具由 e2fsprogs 和 e2fsprogs-libs 两个工具包来提供，升级这两个工具包的版本就可以，最少要升级到 1.43.1 版本以上才可以。</p><p>Ubuntu 可以参考如下链接进行解决。</p><blockquote><p><a href="https://askubuntu.com/questions/1053404/e2fsck-how-to-handle-the-metadata-csum-error-by-advancing-the-e2fsck-version?noredirect=1&amp;lq=1" target="_blank" rel="noopener">https://askubuntu.com/questions/1053404/e2fsck-how-to-handle-the-metadata-csum-error-by-advancing-the-e2fsck-version?noredirect=1&amp;lq=1</a></p></blockquote><p>关于 CentOS 可以去下列地址查找对应的 rpm 包来进行升级。</p><blockquote><p><a href="http://www.rpmfind.net/linux/RPM/index.html" target="_blank" rel="noopener">http://www.rpmfind.net/linux/RPM/index.html</a></p></blockquote><p>更推荐的方法是用源码进行编译。过程如下</p><h3 id="安装-GCC-编译器"><a href="#安装-GCC-编译器" class="headerlink" title="安装 GCC 编译器"></a>安装 GCC 编译器</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">yum install gcc -y</span><br></pre></td></tr></table></figure><h3 id="下载源码包，"><a href="#下载源码包，" class="headerlink" title="下载源码包，"></a>下载源码包，</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget http:&#x2F;&#x2F;downloads.sourceforge.net&#x2F;project&#x2F;e2fsprogs&#x2F;e2fsprogs&#x2F;v1.43.1&#x2F;e2fsprogs-1.43.1.tar.gz</span><br></pre></td></tr></table></figure><h3 id="解压安装包进行编译"><a href="#解压安装包进行编译" class="headerlink" title="解压安装包进行编译"></a>解压安装包进行编译</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">tar -zxf e2fsprogs-1.43.1.tar.gz</span><br><span class="line">cd e2fsprogs-1.43.1</span><br><span class="line">.&#x2F;configure</span><br><span class="line">make</span><br></pre></td></tr></table></figure><p>此时已经编译好了，进入 e2fsck 文件夹就可以看到新编译的版本了，</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">[root@loaclhost ~]cd e2fsck</span><br><span class="line">[root@localhost ~]# e2fsck -V</span><br><span class="line">e2fsck 1.43.1 (08-Jun-2016)</span><br><span class="line">Using EXT2FS Library version 1.43.1, 08-Jun-2016</span><br></pre></td></tr></table></figure><p>如果希望替换系统的 e2fsck 工具，那么执行 make install 。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">cd e2fsprogs-1.43.1</span><br><span class="line">make install</span><br></pre></td></tr></table></figure><h1 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h1><p>出现上述问题的主要原因是，新版的操作系统默认支持了很多新的特性，这些新特性在旧版本的操作系统上是不支持的。<br>如果在磁盘使用前就已经知道了磁盘将要使用的操作系统，应该依据操作系统的差别，然后有意的关闭一些参数，使得新旧操作系统的磁盘是兼容的。</p><p>如果无法预知操作系统，那么在实际使用中遇到了问题，可以查找是哪个新的特性导致的该问题，尝试移除这个文件系统的特性，之后就可以正常使用了。但是贸然移除某个特性，可能会导致磁盘上的数据丢失，这个应该做过充分的调研确认以后再操作。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;h1 id=&quot;现象&quot;&gt;&lt;a href=&quot;#现象&quot; class=&quot;headerlink&quot; title=&quot;现象&quot;&gt;&lt;/a&gt;现象&lt;/h1&gt;&lt;p&gt;使用新版本的操作系统自带的文件系统格式化工具进行分区格式化以后，在较低的操作系统版本上会有提示，提示如下：&lt;/p&gt;
    
    </summary>
    
    
      <category term="linux" scheme="https://erdong.site/categories/linux/"/>
    
      <category term="system" scheme="https://erdong.site/categories/linux/system/"/>
    
    
      <category term="ext4" scheme="https://erdong.site/tags/ext4/"/>
    
  </entry>
  
  <entry>
    <title>第10周分享</title>
    <link href="https://erdong.site/weekly/weekly10.html"/>
    <id>https://erdong.site/weekly/weekly10.html</id>
    <published>2019-03-10T00:35:49.000Z</published>
    <updated>2019-10-14T11:16:21.952Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="新闻"><a href="#新闻" class="headerlink" title="新闻"></a>新闻</h1><h2 id="1-杨超越杯编程大赛"><a href="#1-杨超越杯编程大赛" class="headerlink" title="1. 杨超越杯编程大赛"></a>1. <a href="https://github.com/ccyyycy/ycy" target="_blank" rel="noopener">杨超越杯编程大赛</a></h2><p>杨超越的粉丝在 Github 上发起了一场编程比赛来应援，他们的介绍如下</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">YCY is the abbreviation of ChaoYue Yang , who is a famous star in China,and we are her fans.</span><br><span class="line"></span><br><span class="line">We are now organize a programming competition. All ideas are submitted on GitHub issues.</span><br><span class="line"></span><br><span class="line">We welcome all friends to visit our GitHub and attend this competition.</span><br></pre></td></tr></table></figure><p>这年头，没有两把刷子，追星都不好追。几天时间，这个项目已经 1500+ star 了。</p><h1 id="资源"><a href="#资源" class="headerlink" title="资源"></a>资源</h1><h2 id="1-cloudycluster"><a href="#1-cloudycluster" class="headerlink" title="1. cloudycluster"></a>1. <a href="http://cloudycluster.com" target="_blank" rel="noopener">cloudycluster</a></h2><p>认识到越来越多的人需要使用高性能计算(HPC)资源，Omnibond 设计了 CloudyCluster 来减少时间并简化按需创建HPC环境所需的工作。CloudyCluster 允许任何人在 Amazon Web Services (AWS) 上为 HPC 任务快速设置和配置 HPC 环境。</p><h2 id="2-dev域名注册"><a href="#2-dev域名注册" class="headerlink" title="2. .dev域名注册"></a>2. <a href="https://get.dev" target="_blank" rel="noopener">.dev域名注册</a></h2><p>据悉，谷歌已经在2月19日开放公众早期访问阶段并允许普通用户进行注册，自美国时间2月19日8:00到2月28日7:59期间内注册.dev顶级域名，需要向谷歌缴纳不等的费用，美国时间2月28日之后，将免费开放注册。</p><p>　　关于.dev顶级域名，早在2015年的时候，谷歌就因为对这个域名的新权力在开发者当中引起了小小的公愤，因为许多公司都使用.dev域名进行内部测试网站。两年后，谷歌收购.dev，以及与Chrome和其他浏览器的整合导致许多这些测试页面完全拒绝打开。</p><p>　　当然，Google正在为开发人员调整.dev顶级域名，这可能是为了修复最初获取.dev名称造成的损害。值得一提的是，就像今年早些时候推出的.app顶级域名一样，HTTPS安全性也是默认开启的！那些有需要的朋友，现在就可以行动起来了。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
  </entry>
  
  <entry>
    <title>常见 DNS 地址</title>
    <link href="https://erdong.site/linux/system/dns-server-ip.html"/>
    <id>https://erdong.site/linux/system/dns-server-ip.html</id>
    <published>2019-03-04T13:51:58.000Z</published>
    <updated>2019-10-14T11:06:40.897Z</updated>
    
    <content type="html"><![CDATA[<p>如果您是程序员、系统管理员或任何类型的 IT 工作者，那么您可能有自己最喜欢的用于故障排除的 IP 地址。而且你可能已经用了好几年了。</p><p>这些 ip 可用于:</p><ul><li>ping 测试连接</li><li>使用 dig 或 nslookup 检查 DNS 解析</li><li>更新系统的永久DNS设置</li></ul><p>大多数DNS服务器允许您 ping 它们。</p><a id="more"></a><h1 id="Google-DNS-servers"><a href="#Google-DNS-servers" class="headerlink" title="Google DNS servers"></a>Google DNS servers</h1><p>如果在国外的话，那么最常用的可能是 Google 的 DNS 服务地址了。</p><p>Google 的地址如下：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">8.8.8.8 </span><br><span class="line">8.8.4.4</span><br><span class="line"></span><br><span class="line">2001:4860:4860::8888</span><br><span class="line">2001:4860:4860::8844</span><br></pre></td></tr></table></figure><p>但是这两个地址没有启用任何过滤功能，</p><h1 id="OpenDNS"><a href="#OpenDNS" class="headerlink" title="OpenDNS"></a>OpenDNS</h1><p>OpenDNS是一个免费的域名解析服务提供商（DNS）。创建于2006年，长期以来致力于为广大个人用户以及商务企业用户和公共领域提供免费的域名解析服务。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">208.67.222.222 </span><br><span class="line">208.67.220.220</span><br></pre></td></tr></table></figure><p>另有两个为Family Shield Servers， 可以阻挡成人网站和含有恶意网站</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">208.67.222.123</span><br><span class="line">208.67.220.123</span><br></pre></td></tr></table></figure><h1 id="IBM-Quad9"><a href="#IBM-Quad9" class="headerlink" title="IBM Quad9"></a>IBM Quad9</h1><p>OpenDNS的服务器很棒，但我总是得去查。然后，几年前，出现了一组新的DNS服务器，它们不仅关注速度和功能，还关注内存。</p><p>第一个容易记住的过滤选项是IBM的Quad 9，它的IP地址为4个9:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">9.9.9.9</span><br></pre></td></tr></table></figure><h1 id="CloudFlare-DNS"><a href="#CloudFlare-DNS" class="headerlink" title="CloudFlare DNS"></a>CloudFlare DNS</h1><p>CloudFlare 他们没有提供过滤功能，而是关注隐私。</p><blockquote><p>其他一些递归DNS服务可能声称它们的服务是安全的，因为它们支持DNSSEC。虽然这是一个很好的安全实践，但具有讽刺意味的是，这些服务的用户并没有受到DNS公司本身的保护。许多公司从DNS客户那里收集数据用于商业目的。另外，1.1.1.1不挖掘任何用户数据。为了调试目的，日志被保存24小时，然后清除它们。</p></blockquote><p>也许对我来说最酷的是他们的记忆评级，基本上是完美无缺的:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">1.1.1.1 </span><br><span class="line">1.0.0.1</span><br><span class="line"></span><br><span class="line">2001:2001:: </span><br><span class="line">2001:2001:2001::</span><br></pre></td></tr></table></figure><p>所以他们不会过滤你的url，但他们会有意识地避免记录或跟踪你，这很好。</p><h1 id="Norton-ConnectSafe-DNS"><a href="#Norton-ConnectSafe-DNS" class="headerlink" title="Norton ConnectSafe DNS"></a>Norton ConnectSafe DNS</h1><p>诺顿还有一个公共 DNS 服务，它有一个有趣的特性，即多级URL内容过滤。</p><p>封锁恶意和欺诈网站</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">199.85.126.10 </span><br><span class="line">199.85.127.10</span><br></pre></td></tr></table></figure><p>阻止色情内容</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">199.85.126.20 </span><br><span class="line">199.85.127.20</span><br></pre></td></tr></table></figure><h1 id="阿里云-dns"><a href="#阿里云-dns" class="headerlink" title="阿里云 dns"></a>阿里云 dns</h1><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">223.5.5.5 </span><br><span class="line">223.6.6.6</span><br></pre></td></tr></table></figure><h1 id="腾讯-dns"><a href="#腾讯-dns" class="headerlink" title="腾讯 dns"></a>腾讯 dns</h1><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">119.29.29.29</span><br></pre></td></tr></table></figure><h1 id="百度-dns"><a href="#百度-dns" class="headerlink" title="百度 dns"></a>百度 dns</h1><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">180.76.76.76  </span><br><span class="line">2400:da00::6666</span><br></pre></td></tr></table></figure><h1 id="我的建议"><a href="#我的建议" class="headerlink" title="我的建议"></a>我的建议</h1><p>对于上边提到的 DNS 地址，如果您关心隐私、速度和最大内存，可以尝试 CloudFlare:</p><p>如果你想要URL过滤，可以尝试 IBM 的 Quad9，因为它更容易记住，而且似乎专注于拥有多个威胁情报来源。</p><p>如果你想要多级URL过滤，你可以使用诺顿的产品，但我个人更喜欢用 IBM Quad9来完成。但我认为诺顿仍然是一个很酷的选择，就像保护整个学校或通过强迫他们的DNS通过最严格的选择。</p><p>在国内，选择 BAT 任意一家的 DNS ，性能应该都不错。</p><h1 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h1><ul><li><a href="https://dns.iui.im" target="_blank" rel="noopener">https://dns.iui.im</a></li><li><a href="http://alidns.com" target="_blank" rel="noopener">http://alidns.com</a></li></ul><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;如果您是程序员、系统管理员或任何类型的 IT 工作者，那么您可能有自己最喜欢的用于故障排除的 IP 地址。而且你可能已经用了好几年了。&lt;/p&gt;
&lt;p&gt;这些 ip 可用于:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ping 测试连接&lt;/li&gt;
&lt;li&gt;使用 dig 或 nslookup 检查 DNS 解析&lt;/li&gt;
&lt;li&gt;更新系统的永久DNS设置&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;大多数DNS服务器允许您 ping 它们。&lt;/p&gt;
    
    </summary>
    
    
      <category term="linux" scheme="https://erdong.site/categories/linux/"/>
    
      <category term="system" scheme="https://erdong.site/categories/linux/system/"/>
    
    
      <category term="DNS" scheme="https://erdong.site/tags/DNS/"/>
    
  </entry>
  
  <entry>
    <title>第09周分享</title>
    <link href="https://erdong.site/weekly/weekly09.html"/>
    <id>https://erdong.site/weekly/weekly09.html</id>
    <published>2019-03-03T15:10:13.000Z</published>
    <updated>2019-10-14T11:16:14.027Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="工具"><a href="#工具" class="headerlink" title="工具"></a>工具</h1><h2 id="1-arthas"><a href="#1-arthas" class="headerlink" title="1. arthas"></a>1. <a href="https://alibaba.github.io/arthas/" target="_blank" rel="noopener">arthas</a></h2><p>Arthas 是Alibaba开源的Java诊断工具，深受开发者喜爱。</p><p>当你遇到以下类似问题而束手无策时，Arthas可以帮助你解决：</p><p>这个类从哪个 jar 包加载的？为什么会报各种类相关的 Exception？<br>我改的代码为什么没有执行到？难道是我没 commit？分支搞错了？<br>遇到问题无法在线上 debug，难道只能通过加日志再重新发布吗？<br>线上遇到某个用户的数据处理有问题，但线上同样无法 debug，线下无法重现！<br>是否有一个全局视角来查看系统的运行状况？<br>有什么办法可以监控到JVM的实时运行状态？<br>Arthas支持JDK 6+，支持Linux/Mac/Winodws，采用命令行交互模式，同时提供丰富的 Tab 自动补全功能，进一步方便进行问题的定位和诊断。</p><h1 id="资源"><a href="#资源" class="headerlink" title="资源"></a>资源</h1><h2 id="1-中科大计算机资源"><a href="#1-中科大计算机资源" class="headerlink" title="1. 中科大计算机资源"></a>1. <a href="https://mbinary.xyz/ustc-cs/" target="_blank" rel="noopener">中科大计算机资源</a></h2><p>本着技术开源、知识分享的想法，近日一位名叫 mbinary 的贡献者在 GitHub上创建了一个 repo，叫做「USTC-CS-Courses-Resource」，一本正经地介绍中科大的相关课程资源。这位贡献者正是中科大计算机相关专业的在读生。</p><p>Github 地址<br><a href="https://github.com/mbinary/USTC-CS-Courses-Resource" target="_blank" rel="noopener">https://github.com/mbinary/USTC-CS-Courses-Resource</a></p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
  </entry>
  
  <entry>
    <title>【翻译】时序数据库为什么选 Prometheus</title>
    <link href="https://erdong.site/Prometheus/guide/prometheus-comparison-tsdb.html"/>
    <id>https://erdong.site/Prometheus/guide/prometheus-comparison-tsdb.html</id>
    <published>2019-03-02T03:39:13.000Z</published>
    <updated>2019-10-14T11:11:11.280Z</updated>
    
    <content type="html"><![CDATA[<h1 id="Prometheus-与-Graphite"><a href="#Prometheus-与-Graphite" class="headerlink" title="Prometheus 与 Graphite"></a>Prometheus 与 Graphite</h1><h2 id="范围"><a href="#范围" class="headerlink" title="范围"></a>范围</h2><p>Graphite 专注于成为一个具有查询语言和绘图功能的被动时间序列数据库。任何其他问题都由外部组件处理。</p><p>Prometheus 是一个完整的监控和趋势系统，包括内置和活动的抓取、存储、查询、绘图和基于时间序列数据的报警。它知道监控应该是什么样子(监控点应该存在，时间序列模式意味着什么问题，等等)，并积极地寻找错误。</p><a id="more"></a><h2 id="数据模型"><a href="#数据模型" class="headerlink" title="数据模型"></a>数据模型</h2><p>Graphite 存储命名时间序列的数字样本和 Prometheus 所做的一样。然而，Prometheus 的元数据模型更丰富。</p><p>Graphite metric 名称由点分隔的编码组成，这些编码较为隐藏。而 Prometheus 将显式地编码为 key-value 对称为 label，附加到 metric 名称上。这允许通过查询语言对这些 label 进行简单的筛选、分组和匹配。</p><p>此外，特别是当使用 Graphite 与 StatsD 结合使用时，通常只在所有被监视的实例上存储聚合数据，而不是将实例作为维度保存，并能够深入到各个有问题的实例中。</p><p>例如，Graphite / StatsD 存储 api-server 返回值为 500 的 HTTP 请求的数据会像下面一样</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">stats.api-server.tracks.post.500 -&gt; 93</span><br></pre></td></tr></table></figure><p>在 Prometheus 中，相同的数据会被编码成如下的样子，（假设有三个 api-server 实例）</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">api_server_http_requests_total&#123;method&#x3D;&quot;POST&quot;,handler&#x3D;&quot;&#x2F;tracks&quot;,status&#x3D;&quot;500&quot;,instance&#x3D;&quot;&lt;sample1&gt;&quot;&#125; -&gt; 34</span><br><span class="line">api_server_http_requests_total&#123;method&#x3D;&quot;POST&quot;,handler&#x3D;&quot;&#x2F;tracks&quot;,status&#x3D;&quot;500&quot;,instance&#x3D;&quot;&lt;sample2&gt;&quot;&#125; -&gt; 28</span><br><span class="line">api_server_http_requests_total&#123;method&#x3D;&quot;POST&quot;,handler&#x3D;&quot;&#x2F;tracks&quot;,status&#x3D;&quot;500&quot;,instance&#x3D;&quot;&lt;sample3&gt;&quot;&#125; -&gt; 31</span><br></pre></td></tr></table></figure><h2 id="数据存储"><a href="#数据存储" class="headerlink" title="数据存储"></a>数据存储</h2><p>Graphite 将时间序列数据以 Whisper 格式存储在本地磁盘上，Whisper 格式是一种期望样本定期到达 RRD-style 数据库。<br>每个时间序列都存储在一个单独的文件中，新的采样数据会在一段时间后覆盖旧的采样数据。</p><p>Prometheus 也为每个时间序列数据创建一个本地文件，允许在发生剪贴或规则评估时以任意间隔存储数据。<br>由于新数据只是简单地追加，旧数据可以任意地保持较长时间。<br>Prometheus 也适用于许多短暂的、频繁变化的时间序列。</p><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>Prometheus 提供了更丰富的数据模型和查询语句，并且更易于运行和集成到您的环境中。如果您想要能够长期保存历史数据的集群解决方案，那么 Graphite 可能是更好的选择。</p><h1 id="Prometheus-与-InfluxDB"><a href="#Prometheus-与-InfluxDB" class="headerlink" title="Prometheus 与 InfluxDB"></a>Prometheus 与 InfluxDB</h1><p>InfluxDB 是一个开放源码的时间序列数据库，具有可伸缩和集群的商业选项。<br>在 Prometheus 开发项目开始将近一年后，InfluxDB 项目发布了，因此我们当时无法考虑将其作为替代方案。<br>尽管如此，Prometheus 和 InfluxDB 之间仍然存在显著的差异，而且这两个系统都针对稍微不同的用例。</p><h2 id="范围-1"><a href="#范围-1" class="headerlink" title="范围"></a>范围</h2><p>为了进行公平的比较，我们还必须将 Kapacitor 和 InfluxDB 一起考虑，因为它们结合起来处理与 Prometheus 和 Alertmanager 相同的问题场景。</p><p>InfluxDB 提供连续查询，这相当于 Prometheus 记录规则。</p><p>Kapacitor 的场景是 Prometheus 记录规则、警报规则和 Alertmanager 通知功能的组合。<br>Prometheus 提供了一种更强大的查询语言，用于绘图和警报。<br>Prometheus 的 Alertmanager 还提供了分组，去重功能和静默功能。</p><h2 id="数据模型和存储"><a href="#数据模型和存储" class="headerlink" title="数据模型和存储"></a>数据模型和存储</h2><p>与 Prometheus 一样，InfluxDB 数据模型也有 key-value 作为 labels ，称为 tag。<br>此外，InfluxDB 还有一个二级 labels 称为 field ，在使用上更加有限。<br>InfluxDB 支持纳秒级的时间戳，以及float64、int64、bool和字符串数据类型。<br>相比之下，Prometheus 支持 float64 数据类型，但对字符串和毫秒级分辨率时间戳的支持有限。</p><p>InfluxDB 使用了用于存储的一个变种 具有写前日志的日志结构合并树 （<a href="https://docs.influxdata.com/influxdb/v1.2/concepts/storage_engine/" target="_blank" rel="noopener">Storage Engine</a>），用时间分片。<br>这比 Prometheus 的 “每个时间序列只添加一个文件” 方法更适合于事件日志记录。</p><p><a href="https://grafana.com/blog/2016/01/05/logs-and-metrics-and-graphs-oh-my/" target="_blank" rel="noopener">Logs and Metrics and Graphs, Oh My! </a> 这篇文章描述了事件日志记录和指标记录之间的差异。</p><h2 id="体系结构"><a href="#体系结构" class="headerlink" title="体系结构"></a>体系结构</h2><p>Prometheus 的服务器彼此独立运行，仅依赖本地存储实现核心功能:抓取、规则处理和警报。开源版本的  InfluxDB 也是类似的。</p><p>根据设计，商业的 InfluxDB 产品是一个分布式存储集群，存储和查询由多个节点同时处理。</p><p>这意味着商业的 InfluxDB 将更容易横向扩展，但也意味着您必须从一开始就管理分布式存储系统的复杂性。<br>Prometheus 将更易于运行，但在某些时候，您将需要根据可伸缩性边界(如产品、服务、数据中心或类似方面)显式地对服务器进行切分。独立服务器(可以冗余地并行运行)还可以提供更好的可靠性和故障隔离。</p><p>Kapacitor 的开源版本没有用于规则、警报或通知的内置的分布式/冗余选项，。<br>Kapacitor 的开源版本可以通过用户手工分片进行扩展，类似于 Prometheus 本身。<br>Influx 提供企业级的 Kapacitor，支持HA/冗余警报系统。</p><p>相比之下，Prometheus 和 Alertmanager 通过运行 Prometheus 的冗余副本并使用Alertmanager 的高可用性模式，提供了一个完全开源的冗余选项。</p><h2 id="总结-1"><a href="#总结-1" class="headerlink" title="总结"></a>总结</h2><p>这两个系统有许多相似之处。<br>它们都有 labels (在 InfluxDB 中称为 tag)来有效地支持多维 metric 。<br>两者使用的数据压缩算法基本相同。<br>两者都有广泛的集成，包括彼此之间的集成。<br>它们都有钩子，允许您进一步扩展它们，例如在统计工具中分析数据或执行自动化操作。</p><p>InfluxDB 的优点</p><ul><li>存储事件日志</li><li>商业版本提供集群功能，对于存储长期数据是有帮助的。</li><li>数据副本之间的视图是一致的</li></ul><p>Prometheus 的优点</p><ul><li>存储指标数据。</li><li>更强大的查询语言、警报和通知功能。</li><li>高可用、很好的绘图功能、警报功能。</li></ul><p>InfluxDB 由一个单一的商业公司遵循开放核心模型，提供高级功能，如闭源集群、托管和支持。<br>普罗米修斯是一个完全开源和独立的项目，由许多公司和个人维护，其中一些还提供商业服务和支持。</p><h1 id="Prometheus-与-OpenTSDB"><a href="#Prometheus-与-OpenTSDB" class="headerlink" title="Prometheus 与 OpenTSDB"></a>Prometheus 与 OpenTSDB</h1><p>OpenTSDB 是基于 Hadoop 和 HBase 的分布式时间序列数据库。</p><h2 id="范围-2"><a href="#范围-2" class="headerlink" title="范围"></a>范围</h2><p>这里适用的一般范围差异与 Graphite 的情况相同。</p><h2 id="数据模型-1"><a href="#数据模型-1" class="headerlink" title="数据模型"></a>数据模型</h2><p>OpenTSDB 的数据模型几乎与 Prometheus 的数据模型相同:时间序列由一组任意的 key-value 对(OpenTSDB 是 tag 而 Prometheus 是 label )。</p><p>所有 metric 数据存储在一起，限制了 metric 的基数。但是有一些细微的区别: Prometheus 允许在label 值中使用任意字符，而 OpenTSDB 的限制更严格。</p><p>OpenTSDB 也缺乏完整的查询语言，只允许通过其 API 进行简单的聚合和数学运算。</p><h2 id="数据存储-1"><a href="#数据存储-1" class="headerlink" title="数据存储"></a>数据存储</h2><p>OpenTSDB 的存储是在 Hadoop 和 HBase 上实现的。这意味着很容易横向扩展 OpenTSDB，但是您必须从一开始就接受运行 Hadoop/HBase 集群的总体复杂性。</p><p>Prometheus 最初运行起来会更简单，但一旦超过单个节点的容量，就需要手动的分开。</p><h2 id="总结-2"><a href="#总结-2" class="headerlink" title="总结"></a>总结</h2><p>Prometheus 提供了更丰富的查询语言，可以处理更高的基数指标，并构成一个完整监控系统的一部分。<br>如果您已经在运行 Hadoop，并且看重长期存储而不是这些好处，那么 OpenTSDB 是一个不错的选择。</p><h1 id="Prometheus-与-Nagios"><a href="#Prometheus-与-Nagios" class="headerlink" title="Prometheus 与 Nagios"></a>Prometheus 与 Nagios</h1><p>Nagios 是一种起源于20世纪90年代的监视系统，名为 NetSaint。</p><h2 id="范围-3"><a href="#范围-3" class="headerlink" title="范围"></a>范围</h2><p>Nagios 主要是基于脚本的退出代码发出警报。这些被称为“check”。有个别报警会静默，但没有分组，路由或重复数据删除。<br>Nagios 有各种各样的插件。例如，允许通过管道将几千字节的插件数据返回到时间序列数据库，如 Graphite ，或者使用 NRPE 在远程机器上运行检查。</p><h2 id="数据模型-2"><a href="#数据模型-2" class="headerlink" title="数据模型"></a>数据模型</h2><p>Nagios是基于主机的。每个主机可以有一个或多个服务，每个服务可以执行一个检查。<br>没有标签或查询语言的概念</p><h2 id="数据存储-2"><a href="#数据存储-2" class="headerlink" title="数据存储"></a>数据存储</h2><p>除了当前的检查状态外，Nagios本身没有存储。有一些插件可以存储数据，比如 visualisation。</p><h2 id="结构体系"><a href="#结构体系" class="headerlink" title="结构体系"></a>结构体系</h2><p>Nagios服务器是独立的。所有检查的配置都是通过文件进行的。</p><h2 id="总结-3"><a href="#总结-3" class="headerlink" title="总结"></a>总结</h2><p>Nagios适用于基本监视小型系统或者静态系统，在这些系统中，黑盒探测就足够了。<br>如果您想进行白盒监控，或者拥有一个动态或基于云的环境，那么 Prometheus 是一个不错的选择。</p><h1 id="Prometheus-与-Sensu"><a href="#Prometheus-与-Sensu" class="headerlink" title="Prometheus 与 Sensu"></a>Prometheus 与 Sensu</h1><p>Sensu 是一个可组合的监视工作流，可以复用现有的 Nagios 检查。</p><h2 id="范围-4"><a href="#范围-4" class="headerlink" title="范围"></a>范围</h2><p>这里适用的一般范围差异与 Nagios 的情况相同。</p><p>还有一个客户端套接字允许将特别的检查结果推送到Sensu中。</p><h2 id="数据模型-3"><a href="#数据模型-3" class="headerlink" title="数据模型"></a>数据模型</h2><p>Sensu 拥有与 Nagios 相同的粗略数据模型。</p><h2 id="数据存储-3"><a href="#数据存储-3" class="headerlink" title="数据存储"></a>数据存储</h2><p>Sensu使用Redis持久化监控数据，包括Sensu客户端注册表、检查结果、检查执行历史和当前事件数据。</p><h2 id="体系结构-1"><a href="#体系结构-1" class="headerlink" title="体系结构"></a>体系结构</h2><p>Sensu有许多组件。它使用RabbitMQ作为传输，使用Redis表示当前状态，使用单独的服务器进行处理和API访问。<br>可以对Sensu部署的所有组件(RabbitMQ、Redis和Sensu服务器/API)进行集群，以实现高可用性和冗余配置。</p><h2 id="总结-4"><a href="#总结-4" class="headerlink" title="总结"></a>总结</h2><p>如果您希望按原样扩展现有 Nagios 设置，或者希望利用 Sensu 的自动注册特性，那么 Sensu 是一个不错的选择。<br>如果您想进行白盒监控，或者拥有一个非常动态的或基于云的环境，那么 Prometheus 是一个不错的选择。</p><h1 id="原文链接"><a href="#原文链接" class="headerlink" title="原文链接"></a>原文链接</h1><ul><li><a href="https://prometheus.io/docs/introduction/comparison/" target="_blank" rel="noopener">https://prometheus.io/docs/introduction/comparison/</a> ， by Prometheus </li></ul><hr><p>欢迎访问网站 <a href="https://erdong.site">https://erdong.site</a> 来获取更多内容。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;h1 id=&quot;Prometheus-与-Graphite&quot;&gt;&lt;a href=&quot;#Prometheus-与-Graphite&quot; class=&quot;headerlink&quot; title=&quot;Prometheus 与 Graphite&quot;&gt;&lt;/a&gt;Prometheus 与 Graphite&lt;/h1&gt;&lt;h2 id=&quot;范围&quot;&gt;&lt;a href=&quot;#范围&quot; class=&quot;headerlink&quot; title=&quot;范围&quot;&gt;&lt;/a&gt;范围&lt;/h2&gt;&lt;p&gt;Graphite 专注于成为一个具有查询语言和绘图功能的被动时间序列数据库。任何其他问题都由外部组件处理。&lt;/p&gt;
&lt;p&gt;Prometheus 是一个完整的监控和趋势系统，包括内置和活动的抓取、存储、查询、绘图和基于时间序列数据的报警。它知道监控应该是什么样子(监控点应该存在，时间序列模式意味着什么问题，等等)，并积极地寻找错误。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="guide" scheme="https://erdong.site/categories/Prometheus/guide/"/>
    
    
      <category term="prometheus" scheme="https://erdong.site/tags/prometheus/"/>
    
      <category term="OpenTSDB" scheme="https://erdong.site/tags/OpenTSDB/"/>
    
      <category term="InfluxDB" scheme="https://erdong.site/tags/InfluxDB/"/>
    
      <category term="Graphite" scheme="https://erdong.site/tags/Graphite/"/>
    
      <category term="Nagios" scheme="https://erdong.site/tags/Nagios/"/>
    
      <category term="Sensu" scheme="https://erdong.site/tags/Sensu/"/>
    
  </entry>
  
  <entry>
    <title>Parted 创建 GPT 分区</title>
    <link href="https://erdong.site/tools/parted-create-gpt-partition.html"/>
    <id>https://erdong.site/tools/parted-create-gpt-partition.html</id>
    <published>2019-02-27T11:44:34.000Z</published>
    <updated>2019-10-14T11:10:58.268Z</updated>
    
    <content type="html"><![CDATA[<p>对于磁盘的分区表 MBR与GPT区别。<br>MBR：MBR分区表(即主引导记录)大家都很熟悉，是过去我们使用windows时常用的。<br>所支持的最大卷：2T，而且对分区有限制：最多4个主分区或3个主分区加一个扩展分区</p><p>GPT： GPT（即GUID分区表）。是源自EFI标准的一种较新的磁盘分区表结构的标准，是未来磁盘分区的主要形式。与MBR分区方式相比，具有如下优点。</p><a id="more"></a><p>突破MBR 4个主分区限制，每个磁盘最多支持128个分区。支持大于2T的分区，最大卷可达18EB。</p><p>对于 GPT 的分区，建议使用 parted 工具进行分区，fdisk 在 GPT 这块不是很好。</p><h1 id="Parted-介绍"><a href="#Parted-介绍" class="headerlink" title="Parted 介绍"></a>Parted 介绍</h1><p>Parted 命令分为两种模式：命令行模式和交互模式。</p><h2 id="命令行模式"><a href="#命令行模式" class="headerlink" title="命令行模式"></a>命令行模式</h2><p>parted [option] device [command] ,该模式可以直接在命令行下对磁盘进行分区操作，比较适合编程应用。如：</p><p>显示磁盘/dev/sdb分区。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">parted &#x2F;dev&#x2F;sdb print</span><br></pre></td></tr></table></figure><h2 id="交互模式"><a href="#交互模式" class="headerlink" title="交互模式"></a>交互模式</h2><p>parted [option] device 进入交互模式。尤其是对 parted 命令不是很熟悉的情况下建议使用交互模式。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">parted &#x2F;dev&#x2F;sdb</span><br></pre></td></tr></table></figure><h1 id="parted命令常用选项"><a href="#parted命令常用选项" class="headerlink" title="parted命令常用选项"></a>parted命令常用选项</h1><p>进入 交互模式下， 输入 <code>help</code> 可以看到如下提示，本文基于 Parted 3.2 进行说明。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line">test@test01:~$ sudo parted &#x2F;dev&#x2F;sdb</span><br><span class="line">GNU Parted 3.2</span><br><span class="line">使用 &#x2F;dev&#x2F;sdb</span><br><span class="line">欢迎使用 GNU Parted! 输入 &#39;help&#39;可获得命令列表.</span><br><span class="line">(parted) help</span><br><span class="line">  align-check TYPE N                        check partition N for TYPE(min|opt) alignment</span><br><span class="line">  help [COMMAND]                           print general help, or help on COMMAND</span><br><span class="line">  mklabel,mktable LABEL-TYPE               create a new disklabel (partition table)</span><br><span class="line">  mkpart 分区类型 [文件系统类型] 起始点 终止点      创建一个分区</span><br><span class="line">  name NUMBER 名称               将编号为NUMBER 的分区命名为“名称”</span><br><span class="line">  print [devices|free|list,all|NUMBER]     display the partition table, available devices, free space,</span><br><span class="line">        all found partitions, or a particular partition</span><br><span class="line">  quit                          退出程序</span><br><span class="line">  rescue 起始点 终止点  挽救临近“起始点”、“终止点”的遗失的分区</span><br><span class="line">  resizepart NUMBER END                    resize partition NUMBER</span><br><span class="line">  rm MINOR                      删除编号为 MINOR 的分区</span><br><span class="line">  选择设备  选择要编辑的设备</span><br><span class="line">  disk_set FLAG STATE                      change the FLAG on selected device</span><br><span class="line">  disk_toggle [FLAG]                       toggle the state of FLAG on selected device</span><br><span class="line">  set NUMBER FLAG STATE                    change the FLAG on partition NUMBER</span><br><span class="line">  toggle [NUMBER [FLAG]]                   切换分区 NUMBER 的 FLAG 标记</span><br><span class="line">  unit UNIT                                set the default unit to UNIT</span><br><span class="line">  version                                  display the version number and copyright information of GNU</span><br><span class="line">        Parted</span><br><span class="line">(parted)</span><br></pre></td></tr></table></figure><p>比较常用的几个选项是</p><ul><li>help 打印帮助信息</li><li>print 输出分区信息</li><li>mklabel 创建分区表， 即是使用msdos（MBR）还是使用gpt，或者是其他方式分区表</li><li>mkpart 创建新分区<br>格式：mkpart PART-TYPE  START END<br>PART-TYPE类型主要有primary（主分区）, extended（扩展分区）, logical（逻辑区）. 扩展分区和逻辑分区只对msdos。</li><li>rm  删除一个分区</li><li>resizepart 调整指定的分区的大小</li><li>quit 退出该交互界面</li></ul><h1 id="对磁盘进行分区"><a href="#对磁盘进行分区" class="headerlink" title="对磁盘进行分区"></a>对磁盘进行分区</h1><p>首先对于容量较大的磁盘使用 fdisk 工具会得到如下提示：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">test@test01:~$ sudo fdisk &#x2F;dev&#x2F;sdb</span><br><span class="line"></span><br><span class="line">欢迎使用 fdisk (util-linux 2.31.1)。</span><br><span class="line">更改将停留在内存中，直到您决定将更改写入磁盘。</span><br><span class="line">使用写入命令前请三思。</span><br><span class="line"></span><br><span class="line">设备不包含可识别的分区表。</span><br><span class="line">The size of this disk is 3.7 TiB (4000787030016 bytes). DOS partition table format cannot be used on drives for volumes larger than 2199023255040 bytes for 512-byte sectors. Use GUID partition table format (GPT).</span><br><span class="line"></span><br><span class="line">创建了一个磁盘标识符为 0x9f682389 的新 DOS 磁盘标签。</span><br><span class="line"></span><br><span class="line">命令(输入 m 获取帮助)：</span><br></pre></td></tr></table></figure><p>这个时候我们就需要更新 parted 来对磁盘进行分区。</p><h2 id="更改分区表"><a href="#更改分区表" class="headerlink" title="更改分区表"></a>更改分区表</h2><p>操作如下：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">(parted) mklabel gpt</span><br><span class="line">(parted) print</span><br><span class="line">Model: ATA ST4000DM004-2CV1 (scsi)</span><br><span class="line">磁盘 &#x2F;dev&#x2F;sdb: 4001GB</span><br><span class="line">Sector size (logical&#x2F;physical): 512B&#x2F;4096B</span><br><span class="line">分区表：gpt</span><br><span class="line">Disk Flags:</span><br><span class="line"></span><br><span class="line">数字  开始：  End  大小  文件系统  Name  标志</span><br><span class="line"></span><br><span class="line">(parted)</span><br></pre></td></tr></table></figure><h2 id="创建分区"><a href="#创建分区" class="headerlink" title="创建分区"></a>创建分区</h2><p>使用 mkpart 创建自己需要的大小的分区</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">(parted) mkpart primary 0 4TB</span><br><span class="line">(parted) p</span><br><span class="line">Model: ATA ST4000DM004-2CV1 (scsi)</span><br><span class="line">磁盘 &#x2F;dev&#x2F;sdb: 4001GB</span><br><span class="line">Sector size (logical&#x2F;physical): 512B&#x2F;4096B</span><br><span class="line">分区表：gpt</span><br><span class="line">Disk Flags:</span><br><span class="line"></span><br><span class="line">数字  开始：  End     大小    文件系统  Name     标志</span><br><span class="line"> 1    1049kB  4001GB  4001GB            primary</span><br><span class="line"></span><br><span class="line">(parted)</span><br></pre></td></tr></table></figure><p>创建好以后退出。</p><blockquote><p>parted 的每一个操作都是即时生效，和 fdisk 不同，fdisk 只有在最后使用 <code>w</code> 进行保存以后才会生效 。</p></blockquote><h2 id="格式化分区"><a href="#格式化分区" class="headerlink" title="格式化分区"></a>格式化分区</h2><p>格式化成你需要的文件系统。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">mkfs.ext4 &#x2F;dev&#x2F;sdb1</span><br></pre></td></tr></table></figure><p>整个分区创建过程就结束了。</p><h1 id="对齐分区以得到最优性能"><a href="#对齐分区以得到最优性能" class="headerlink" title="对齐分区以得到最优性能"></a>对齐分区以得到最优性能</h1><p>当分区不对齐时，parted 会提示如下</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">警告: The resulting partition is not properly aligned for best performance.</span><br><span class="line">忽略&#x2F;Ignore&#x2F;放弃&#x2F;Cancel?</span><br></pre></td></tr></table></figure><p>对于这个提示，只要分区对齐就好。如果你的设计，就是要不对齐，那么可以忽略这个提示。</p><p>对齐分区有两个方法，</p><p>方法一，使用百分比来表示要分区的的空间大小，那么到100%的时候自然是对齐的。示例如下：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">(parted) mkpart primary 0% 100%</span><br><span class="line">(parted) p</span><br><span class="line">Model: ATA ST4000DM004-2CV1 (scsi)</span><br><span class="line">磁盘 &#x2F;dev&#x2F;sdb: 4001GB</span><br><span class="line">Sector size (logical&#x2F;physical): 512B&#x2F;4096B</span><br><span class="line">分区表：gpt</span><br><span class="line">Disk Flags:</span><br><span class="line"></span><br><span class="line">数字  开始：  End     大小    文件系统  Name     标志</span><br><span class="line"> 1    1049kB  4001GB  4001GB            primary</span><br><span class="line"></span><br><span class="line">(parted)</span><br></pre></td></tr></table></figure><p>方法二，如果是使用容量来进行空间大小的话，那么 <code>-1</code> 这个值代表的是最后的位置。示例如下：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">(parted) mkpart primary 0TB -1</span><br><span class="line">(parted) p</span><br><span class="line">Model: ATA ST4000DM004-2CV1 (scsi)</span><br><span class="line">磁盘 &#x2F;dev&#x2F;sdb: 4001GB</span><br><span class="line">Sector size (logical&#x2F;physical): 512B&#x2F;4096B</span><br><span class="line">分区表：gpt</span><br><span class="line">Disk Flags:</span><br><span class="line"></span><br><span class="line">数字  开始：  End     大小    文件系统  Name     标志</span><br><span class="line"> 1    1049kB  4001GB  4001GB            primary</span><br><span class="line"></span><br><span class="line">(parted)</span><br></pre></td></tr></table></figure><p>方法三，手动进行计算。</p><p>下边这篇博客的作者描述了如何计算磁盘的扇区来保证分区对齐。</p><p><a href="https://rainbow.chard.org/2013/01/30/how-to-align-partitions-for-best-performance-using-parted/" target="_blank" rel="noopener">https://rainbow.chard.org/2013/01/30/how-to-align-partitions-for-best-performance-using-parted/</a></p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;对于磁盘的分区表 MBR与GPT区别。&lt;br&gt;MBR：MBR分区表(即主引导记录)大家都很熟悉，是过去我们使用windows时常用的。&lt;br&gt;所支持的最大卷：2T，而且对分区有限制：最多4个主分区或3个主分区加一个扩展分区&lt;/p&gt;
&lt;p&gt;GPT： GPT（即GUID分区表）。是源自EFI标准的一种较新的磁盘分区表结构的标准，是未来磁盘分区的主要形式。与MBR分区方式相比，具有如下优点。&lt;/p&gt;
    
    </summary>
    
    
      <category term="tools" scheme="https://erdong.site/categories/tools/"/>
    
    
      <category term="parted" scheme="https://erdong.site/tags/parted/"/>
    
      <category term="fdisk" scheme="https://erdong.site/tags/fdisk/"/>
    
      <category term="GPT" scheme="https://erdong.site/tags/GPT/"/>
    
      <category term="MBR" scheme="https://erdong.site/tags/MBR/"/>
    
  </entry>
  
  <entry>
    <title>【转载】Prometheus 不完全避坑指南</title>
    <link href="https://erdong.site/Prometheus/guide/prometheus-incomplete-guide.html"/>
    <id>https://erdong.site/Prometheus/guide/prometheus-incomplete-guide.html</id>
    <published>2019-02-26T13:23:57.000Z</published>
    <updated>2019-10-14T11:11:21.826Z</updated>
    
    <content type="html"><![CDATA[<p>Prometheus 是一个开源监控系统，它本身已经成为了云原生中指标监控的事实标准，几乎所有 k8s 的核心组件以及其它云原生系统都以 Prometheus 的指标格式输出自己的运行时监控信息。我在工作中也比较深入地使用过 Prometheus，最大的感受就是它非常容易维护，突出一个简单省心成本低。当然，这当中也免不了踩过一些坑，下面就总结一下。</p><blockquote><p>假如你没有用过 Prometheus，建议先看一遍 官方文档</p></blockquote><a id="more"></a><h1 id="接受准确性与可靠性的权衡"><a href="#接受准确性与可靠性的权衡" class="headerlink" title="接受准确性与可靠性的权衡"></a>接受准确性与可靠性的权衡</h1><p>Prometheus 作为一个基于指标(Metric)的监控系统，在设计上就放弃了一部分数据准确性：</p><ul><li>比如在两次采样的间隔中，内存用量有一个瞬时小尖峰，那么这次小尖峰我们是观察不到的；</li><li>再比如 QPS、RT、P95、P99 这些值都只能估算，无法和日志系统一样做到 100% 准确，下面也会讲一个相关的坑；</li></ul><p>放弃一点准确性得到的是更高的可靠性，这里的可靠性体现为架构简单、数据简单、运维简单。假如你维护过 ELK 或其它日志架构的话，就会发现相比于指标，日志系统想要稳定地跑下去需要付出几十倍的机器成本与人力成本。既然是权衡，那就没有好或不好，只有适合不适合，我推荐在应用 Prometheus 之初就要先考虑清楚这个问题，并且将这个权衡明确地告诉使用方。</p><h1 id="首先做好自监控"><a href="#首先做好自监控" class="headerlink" title="首先做好自监控"></a>首先做好自监控</h1><p>不知道你有没有考虑过一个问题，其它系统都用 Prometheus 监控起来了，报警规则也设置好了，那 Prometheus 本身由谁来监控？</p><p>答案是”另一个监控系统”，而这个监控系统可以是另一个 Prometheus。按照官方的 quickstart 或 helm 部署的 Prometheus 单实例自己监控自己的，我们当然不能指望一个系统挂掉之后自己发现自己挂了。因此我强烈建议在上生产环境之前，一定要确保至少有两个独立的 Prometheus 实例互相做交叉监控。交叉监控的配置也很简单，每台 Prometheus 都拉取其余所有 Prometheus 的指标即可。</p><p>还有一个点是警报系统(Alertmanager)，我们再考虑一下警报系统挂掉的情况：这时候 Prometheus 可以监控到警报系统挂了，但是因为警报挂掉了，所以警报自然就发不出来，这也是应用 Prometheus 之前必须搞定的问题。这个问题可以通过给警报系统做 HA 来应对。除此之外还有一个经典的兜底措施叫做 “Dead man’s switch”: 定义一条永远会触发的告警，不断通知，假如哪天这条通知停了，那么说明报警链路出问题了。</p><h1 id="不要使用-NFS-做存储"><a href="#不要使用-NFS-做存储" class="headerlink" title="不要使用 NFS 做存储"></a>不要使用 NFS 做存储</h1><p>如题，Prometheus 维护者也在 <a href="https://github.com/prometheus/prometheus/issues/3534" target="_blank" rel="noopener">issue 中表示过不支持 NFS </a>。这点我们有血泪教训（我们曾经有一台 Prometheus 存储文件发生损坏丢失了历史数据）。</p><h1 id="尽早干掉维度-Cardinality-过高的指标"><a href="#尽早干掉维度-Cardinality-过高的指标" class="headerlink" title="尽早干掉维度(Cardinality)过高的指标"></a>尽早干掉维度(Cardinality)过高的指标</h1><p>根据我们的经验，Prometheus 里有 50% 以上的存储空间和 80% 以上的计算资源(CPU、内存)都是被那么两三个维度超高的指标用掉的。而且这类维度超高的指标由于数据量很大，稍微查得野一点就会 OOM 搞死 Prometheus 实例。</p><p>首先要明确这类指标是对 Prometheus 的滥用，类似需求完全应该放到日志流或数仓里去算。但是指标的接入方关注的往往是业务上够不够方便，假如足够方便的话什么都可以往 label 里塞。这就需要我们防患于未然，一个有效的办法是用警报规则找出维度过高的坏指标，然后在 Scrape 配置里 Drop 掉导致维度过高的 label。</p><p>警报规则的例子：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"># 统计每个指标的时间序列数，超出 10000 的报警</span><br><span class="line">count by (__name__)(&#123;__name__&#x3D;~&quot;.+&quot;&#125;) &gt; 10000</span><br></pre></td></tr></table></figure><p>“坏指标”报警出来之后，就可以用 metric_relabel_config 的 drop 操作删掉有问题的 label（比如 userId、email 这些一看就是问题户），这里的配置方式可以查阅文档</p><p>对了，这条的关键词是尽早，最好就是部署完就搞上这条规则，否则等哪天 Prometheus 容量满了再去找业务方说要删 label，那业务方可能就要忍不住扇你了……</p><h1 id="Rate-类函数-Recording-Rule-的坑"><a href="#Rate-类函数-Recording-Rule-的坑" class="headerlink" title="Rate 类函数 + Recording Rule 的坑"></a>Rate 类函数 + Recording Rule 的坑</h1><p>可能你已经知道了 PromQL 里要先 rate() 再 sum()，不能 sum() 完再 rate()（不知道也没事，马上讲）。但当 rate() 已经同类型的函数如 increase() 和 recording rule 碰到一起时，可能就会不小心掉到坑里去。</p><p>当时，我们已经有了一个维度很高的指标（只能继续维护了，因为没有尽早干掉），为了让大家查询得更快一点，我们设计了一个 Recording Rule，用 sum() 来去掉维度过高的 bad_label，得到一个新指标。那么只要不涉及到 bad_label，大家就可以用新指标进行查询，Recording Rule 如下：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sum(old_metric) without (bad_label)</span><br></pre></td></tr></table></figure><p>用了一段时候后，大家发现 new_metric 做 rate() 得到的 QPS 趋势图里经常有奇怪的尖峰，但 old_metric 就不会出现。这时我们恍然大悟：绕了个弯踩进了 rate() 的坑里。</p><p>这背后与 rate() 的实现方式有关，rate() 在设计上假定对应的指标是一个 Counter，也就是只有 incr(增加) 和 reset(归0) 两种行为。而做了 sum() 或其他聚合之后，得到的就不再是一个 Counter 了，举个例子，比如 sum() 的计算对象中有一个归0了，那整体的和会下降，而不是归零，这会影响 rate() 中判断 reset(归0) 的逻辑，从而导致错误的结果。写 PromQL 时这个坑容易避免，但碰到 Recording Rule 就不那么容易了，因为不去看配置的话大家也想不到 new_metric 是怎么来的。</p><p>要完全规避这个坑，可以遵守一个原则：Recording Rule 一步到位，直接算出需要的值，避免算出一个中间结果再拿去做聚合。</p><h1 id="警报和历史趋势图未必-Match"><a href="#警报和历史趋势图未必-Match" class="headerlink" title="警报和历史趋势图未必 Match"></a>警报和历史趋势图未必 Match</h1><p>最近半年常常被问两个问题：</p><ul><li>我的历史趋势图看上去超过水位线了，警报为什么没报？</li><li>我的历史趋势图看上去挺正常的，警报为什么报了？</li></ul><p>这其中有一个原因是：趋势图上每个采样点的采样时间和警报规则每次的计算时间不是严格一致的。当时间区间拉得比较大的时候，采样点非常稀疏，不如警报计算的间隔来得密集，这个现象尤为明显，比如时序图采样了 0秒，60秒，120秒三个点。而警报在15秒，30秒，45秒连续计算出了异常，那在图上就看不出来。另外，经过越多的聚合以及函数操作，不同时间点的数据差异会来得越明显，有时确实容易混淆。</p><p>这个其实不是问题，碰到时将趋势图的采样间隔拉到最小，仔细比对一下，就能验证警报的准确性。而对于聚合很复杂的警报，可以先写一条 Recording Rule, 再针对 Recording Rule 产生的新指标来建警报。这种范式也能帮助我们更高效地去建分级警报（超过不同阈值对应不同的紧急程度）</p><h1 id="Alertmanager-的-group-interval-会影响-resolved-通知"><a href="#Alertmanager-的-group-interval-会影响-resolved-通知" class="headerlink" title="Alertmanager 的 group_interval 会影响 resolved 通知"></a>Alertmanager 的 group_interval 会影响 resolved 通知</h1><p>Alertmanager 里有一个叫 group_interval 的配置，用于控制同一个 group 内的警报最快多久通知一次。这里有一个问题是 firing(激活) 和 resolved(已消除) 的警报通知是共享同一个 group 的。也就是说，假设我们的 group_interval 是默认的 5 分钟，那么一条警报激活十几秒后立马就消除了，它的消除通知会在报警通知的 5 分钟之后才到，因为在发完报警通知之后，这个 Group 需要等待 5 分钟的 group_interval 才能进行下一次通知。</p><p>这个设计让”警报消除就立马发送消除通知”变得几乎不可能，因为假如把 group_interval 变得很小的话，警报通知就会过于频繁，而调大的话，就会拖累到消除通知。</p><p>这个问题修改一点源码即可解决，不过无伤大雅，不修也完全没问题。</p><h1 id="最后一条：不要忘记因何而来"><a href="#最后一条：不要忘记因何而来" class="headerlink" title="最后一条：不要忘记因何而来"></a>最后一条：不要忘记因何而来</h1><p>最后一条撒点鸡汤：监控的核心目标还是护航业务稳定，保障业务的快速迭代，永远不要忘记因何而来</p><p>曾经有一端时间，我们追求”监控的覆盖率”，所有系统所有层面，一定要有指标，而且具体信息 label 分得越细越好，最后搞出几千个监控项，不仅搞得眼花缭乱还让 Prometheus 变慢了；</p><p>还有一段时间，我们追求”警报的覆盖率”，事无巨细必有要有警报，人人有责全体收警报（有些警报会发送给几十个人）。最后当然你也能预想到了，告警风暴让大家都对警报疲劳了；</p><p>这些事情乍看起来都是在努力工作，但其实一开始的方向就错了，监控的目标绝对不是为了达到 xxx 个指标，xxx 条警报规则，这些东西有什么意义？依我看，负责监控的开发就算不是 SRE 也要有 SRE 的心态和视野，不要为监控系统的功能或覆盖面负责（这样很可让导致开发在监控里堆砌功能和内容，变得越来越臃肿越来越不可靠），而要为整个业务的稳定性负责，同时站在稳定性的投入产出比角度去考虑每件事情的性质和意义，不要忘记我们因何而来。</p><p>作者： 吴叶磊</p><p>原文链接： <a href="https://aleiwu.com/post/prometheus-bp/" target="_blank" rel="noopener">https://aleiwu.com/post/prometheus-bp/</a></p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Prometheus 是一个开源监控系统，它本身已经成为了云原生中指标监控的事实标准，几乎所有 k8s 的核心组件以及其它云原生系统都以 Prometheus 的指标格式输出自己的运行时监控信息。我在工作中也比较深入地使用过 Prometheus，最大的感受就是它非常容易维护，突出一个简单省心成本低。当然，这当中也免不了踩过一些坑，下面就总结一下。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;假如你没有用过 Prometheus，建议先看一遍 官方文档&lt;/p&gt;
&lt;/blockquote&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="guide" scheme="https://erdong.site/categories/Prometheus/guide/"/>
    
    
      <category term="Prometheus" scheme="https://erdong.site/tags/Prometheus/"/>
    
  </entry>
  
  <entry>
    <title>OpenVPN linux 客户端安装使用</title>
    <link href="https://erdong.site/tools/openvpn-client-use.html"/>
    <id>https://erdong.site/tools/openvpn-client-use.html</id>
    <published>2019-02-25T14:07:32.000Z</published>
    <updated>2019-10-14T11:10:48.411Z</updated>
    
    <content type="html"><![CDATA[<h1 id="openVPN-linux-客户端安装使用"><a href="#openVPN-linux-客户端安装使用" class="headerlink" title="openVPN linux 客户端安装使用"></a>openVPN linux 客户端安装使用</h1><a id="more"></a><h1 id="安装软件"><a href="#安装软件" class="headerlink" title="安装软件"></a>安装软件</h1><p>安装openssl和lzo，lzo用于压缩通讯数据加快传输速度</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">yum -y install openssl openssl-devel</span><br><span class="line">yum -y install lzo</span><br></pre></td></tr></table></figure><p>安装 epel 第三方源，使得可以安装 openvpn ，CentOS 官方源内不含 openvpn 。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">yum -y install epel-release</span><br><span class="line">yum -y install openvpn</span><br></pre></td></tr></table></figure><p>将下面证书和密钥添加到 /etc/openvpn 下，新建一个 test-client 文件夹存放。client.ovpn 文件中的 .crt 以及 .key 等文件需要写绝对路径。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ca.crt  client1.crt  client1.key  client.ovpn  ta.key</span><br></pre></td></tr></table></figure><p>启动客户端服务</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br></pre></td><td class="code"><pre><span class="line">[root@hulk ~]# openvpn --config &#x2F;etc&#x2F;openvpn&#x2F;test-client&#x2F;client.ovpn</span><br><span class="line">Mon Feb 25 15:55:56 2019 OpenVPN 2.4.6 x86_64-redhat-linux-gnu [Fedora EPEL patched] [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH&#x2F;PKTINFO] [AEAD] built on Apr 26 2018</span><br><span class="line">Mon Feb 25 15:55:56 2019 library versions: OpenSSL 1.0.2k-fips  26 Jan 2017, LZO 2.06</span><br><span class="line">Mon Feb 25 15:55:56 2019 WARNING: No server certificate verification method has been enabled.  See http:&#x2F;&#x2F;openvpn.net&#x2F;howto.html#mitm for more info.</span><br><span class="line">Mon Feb 25 15:55:56 2019 Outgoing Control Channel Authentication: Using 160 bit message hash &#39;SHA1&#39; for HMAC authentication</span><br><span class="line">Mon Feb 25 15:55:56 2019 Incoming Control Channel Authentication: Using 160 bit message hash &#39;SHA1&#39; for HMAC authentication</span><br><span class="line">Mon Feb 25 15:55:56 2019 TCP&#x2F;UDP: Preserving recently used remote address: [AF_INET]59.172.178.16:1194</span><br><span class="line">Mon Feb 25 15:55:56 2019 Socket Buffers: R&#x3D;[212992-&gt;212992] S&#x3D;[212992-&gt;212992]</span><br><span class="line">Mon Feb 25 15:55:56 2019 UDP link local: (not bound)</span><br><span class="line">Mon Feb 25 15:55:56 2019 UDP link remote: [AF_INET]55.12.18.19:1194</span><br><span class="line">Mon Feb 25 15:55:56 2019 TLS: Initial packet from [AF_INET]55.12.18.19:1194, sid&#x3D;602b3fe8 336d7976</span><br><span class="line">Mon Feb 25 15:55:56 2019 Control Channel: TLSv1.2, cipher TLSv1&#x2F;SSLv3 DHE-RSA-AES256-GCM-SHA384, 2048 bit RSA</span><br><span class="line">Mon Feb 25 15:55:56 2019 [server] Peer Connection Initiated with [AF_INET]55.12.18.19:1194</span><br><span class="line">Mon Feb 25 15:55:57 2019 SENT CONTROL [server]: &#39;PUSH_REQUEST&#39; (status&#x3D;1)</span><br><span class="line">Mon Feb 25 15:55:57 2019 PUSH: Received control message: &#39;PUSH_REPLY,route 202.114.96.0 255.255.255.0,route 10.0.0.0 255.0.0.0,route 172.29.0.1,topology net30,ping 10,ping-restart 120,ifconfig 172.29.2.170 172.29.2.169&#39;</span><br><span class="line">Mon Feb 25 15:55:57 2019 OPTIONS IMPORT: timers and&#x2F;or timeouts modified</span><br><span class="line">Mon Feb 25 15:55:57 2019 OPTIONS IMPORT: --ifconfig&#x2F;up options modified</span><br><span class="line">Mon Feb 25 15:55:57 2019 OPTIONS IMPORT: route options modified</span><br><span class="line">Mon Feb 25 15:55:57 2019 Outgoing Data Channel: Cipher &#39;BF-CBC&#39; initialized with 128 bit key</span><br><span class="line">Mon Feb 25 15:55:57 2019 WARNING: INSECURE cipher with block size less than 128 bit (64 bit).  This allows attacks like SWEET32.  Mitigate by using a --cipher with a larger block size (e.g. AES-256-CBC).</span><br><span class="line">Mon Feb 25 15:55:57 2019 Outgoing Data Channel: Using 160 bit message hash &#39;SHA1&#39; for HMAC authentication</span><br><span class="line">Mon Feb 25 15:55:57 2019 Incoming Data Channel: Cipher &#39;BF-CBC&#39; initialized with 128 bit key</span><br><span class="line">Mon Feb 25 15:55:57 2019 WARNING: INSECURE cipher with block size less than 128 bit (64 bit).  This allows attacks like SWEET32.  Mitigate by using a --cipher with a larger block size (e.g. AES-256-CBC).</span><br><span class="line">Mon Feb 25 15:55:57 2019 Incoming Data Channel: Using 160 bit message hash &#39;SHA1&#39; for HMAC authentication</span><br><span class="line">Mon Feb 25 15:55:57 2019 WARNING: cipher with small block size in use, reducing reneg-bytes to 64MB to mitigate SWEET32 attacks.</span><br><span class="line">Mon Feb 25 15:55:57 2019 ROUTE_GATEWAY 172.18.0.1&#x2F;255.255.240.0 IFACE&#x3D;eth0 HWADDR&#x3D;fa:23:62:87:31:00</span><br><span class="line">Mon Feb 25 15:55:57 2019 TUN&#x2F;TAP device tun0 opened</span><br><span class="line">Mon Feb 25 15:55:57 2019 TUN&#x2F;TAP TX queue length set to 100</span><br><span class="line">Mon Feb 25 15:55:57 2019 do_ifconfig, tt-&gt;did_ifconfig_ipv6_setup&#x3D;0</span><br><span class="line">Mon Feb 25 15:55:57 2019 &#x2F;sbin&#x2F;ip link set dev tun0 up mtu 1500</span><br><span class="line">Mon Feb 25 15:55:57 2019 &#x2F;sbin&#x2F;ip addr add dev tun0 local 172.29.2.170 peer 172.29.2.169</span><br><span class="line">Mon Feb 25 15:55:57 2019 &#x2F;sbin&#x2F;ip route add 202.114.96.0&#x2F;24 via 172.29.2.169</span><br><span class="line">Mon Feb 25 15:55:57 2019 &#x2F;sbin&#x2F;ip route add 10.0.0.0&#x2F;8 via 172.29.2.169</span><br><span class="line">Mon Feb 25 15:55:57 2019 &#x2F;sbin&#x2F;ip route add 172.29.0.1&#x2F;32 via 172.29.2.169</span><br><span class="line">Mon Feb 25 15:55:57 2019 WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this</span><br><span class="line">Mon Feb 25 15:55:57 2019 Initialization Sequence Completed</span><br></pre></td></tr></table></figure><p>ifconfig 查看网卡，会多出一块 tun0 的网卡，ping 对端的机器，可以 ping 通。</p><p>按 crtl + C 中断前台进程，即可退出 VPN 。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">^@^CMon Feb 25 15:58:37 2019 event_wait : Interrupted system call (code&#x3D;4)</span><br><span class="line">Mon Feb 25 15:58:37 2019 &#x2F;sbin&#x2F;ip route del 202.114.96.0&#x2F;24</span><br><span class="line">Mon Feb 25 15:58:37 2019 &#x2F;sbin&#x2F;ip route del 10.0.0.0&#x2F;8</span><br><span class="line">Mon Feb 25 15:58:37 2019 &#x2F;sbin&#x2F;ip route del 172.29.0.1&#x2F;32</span><br><span class="line">Mon Feb 25 15:58:37 2019 Closing TUN&#x2F;TAP interface</span><br><span class="line">Mon Feb 25 15:58:37 2019 &#x2F;sbin&#x2F;ip addr del dev tun0 local 172.29.2.170 peer 172.29.2.169</span><br><span class="line">Mon Feb 25 15:58:37 2019 SIGINT[hard,] received, process exiting</span><br><span class="line">[root@hulk ~]#</span><br></pre></td></tr></table></figure><p>为了使用简单，可以把该进程放在后台运行，或者使用 supervisor 来进行守护，增加易用性和可靠性。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;h1 id=&quot;openVPN-linux-客户端安装使用&quot;&gt;&lt;a href=&quot;#openVPN-linux-客户端安装使用&quot; class=&quot;headerlink&quot; title=&quot;openVPN linux 客户端安装使用&quot;&gt;&lt;/a&gt;openVPN linux 客户端安装使用&lt;/h1&gt;
    
    </summary>
    
    
      <category term="tools" scheme="https://erdong.site/categories/tools/"/>
    
    
      <category term="openvpn" scheme="https://erdong.site/tags/openvpn/"/>
    
  </entry>
  
  <entry>
    <title>第08周分享</title>
    <link href="https://erdong.site/weekly/weekly08.html"/>
    <id>https://erdong.site/weekly/weekly08.html</id>
    <published>2019-02-24T14:49:58.000Z</published>
    <updated>2019-10-14T11:16:06.323Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="工具"><a href="#工具" class="headerlink" title="工具"></a>工具</h1><h2 id="1-Md2All"><a href="#1-Md2All" class="headerlink" title="1. Md2All"></a>1. <a href="http://md.aclickall.com" target="_blank" rel="noopener">Md2All</a></h2><p>作者是 颜家大少 ，用来将 Markdown 格式的文档转换成富文本形式，然后可以发表在微信公众号、CSDN、博客园、知乎等平台。试用了几个同类型的在线工具，这应该是最好用的一个。</p><h1 id="资源"><a href="#资源" class="headerlink" title="资源"></a>资源</h1><h2 id="1-前端九部-入门者手册2019"><a href="#1-前端九部-入门者手册2019" class="headerlink" title="1. 前端九部 - 入门者手册2019"></a>1. <a href="https://www.yuque.com/fe9/basic" target="_blank" rel="noopener">前端九部 - 入门者手册2019</a></h2><p>前段的入门手册，供大家参考。</p><h2 id="2-Golang-微服务系列教程"><a href="#2-Golang-微服务系列教程" class="headerlink" title="2. Golang 微服务系列教程"></a>2. <a href="https://wuyin.io/tags/微服务/" target="_blank" rel="noopener">Golang 微服务系列教程</a></h2><p>Golang 微服务系列教程 源码，每一节对应一个分支。</p><p><a href="https://github.com/wuYin/shippy" target="_blank" rel="noopener">https://github.com/wuYin/shippy</a></p><h2 id="3-80款免费字体"><a href="#3-80款免费字体" class="headerlink" title="3. 80款免费字体"></a>3. <a href="https://app.programmingfonts.org/#source-code-pro" target="_blank" rel="noopener">80款免费字体</a></h2><p>80 多个免费编程字体。</p><ul><li>左侧选字体，包括字体创造年份、下载链接；</li><li>右侧实时预览，并且可敲代码测试；</li><li>非常方便。</li></ul><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
  </entry>
  
  <entry>
    <title>阿里云云栖社区博客相关问题</title>
    <link href="https://erdong.site/life/gossip/yunqi-blog.html"/>
    <id>https://erdong.site/life/gossip/yunqi-blog.html</id>
    <published>2019-02-22T08:58:27.000Z</published>
    <updated>2019-10-14T11:18:49.913Z</updated>
    
    <content type="html"><![CDATA[<p>最近在阿里云的云栖社区内发表了多篇博客，发现一些奇怪的问题。比如，博客发布以后，会处于审核中的状态，这个审核要多久，都审核什么，一直是处于未知状态。经过几天的摸索，对于几个问题有了一些答案，记录在这里，和大家分享一下。</p><a id="more"></a><h2 id="博客审核问题和审核时间"><a href="#博客审核问题和审核时间" class="headerlink" title="博客审核问题和审核时间"></a>博客审核问题和审核时间</h2><p>首先说一下博客，在云栖社区里编写博客除了正文，还有标题、标签、文章类型（原创、翻译、转载）、摘要。</p><p>标题自取。</p><p>标签可以自己添加，发布的时候，系统会默认生成一些。如果觉得的生成的标签有不准确的，可以进行修改。</p><p>文章类型可以选原创、翻译和转载，但是发布以后，好像这几类文章没有什么明显的标识。可能就是用来记录积分的用处吧。</p><p>摘要可以自己写，也可以让系统自己抓取。</p><p>博客发布以后会进入一个 “审核中” 的状态，这个状态没有任何的提示，比如大概什么时候会审核结束，或者整个审核是分几个步骤，现在进行到第几步了。没有任何提示。</p><p>按照我的经验，审核如果是机审的话，大概10分钟能结束吧。人工审核大概要 3~4 个小时。而且我的好几篇文章都是人工审核。</p><p>吐个槽，话说机审不应该很快吗？而且发布博客以后，要刷新好几次，大概1分钟以后才能看到我发布的博客，在这一分钟当中系统都不显示我发布了这篇博客，让我一度以为自己网络有问题。</p><p>而且当发布的博客处于审核状态的时候，请大家尽量不要修改博客的任何内容，比如标签、正文等等，这个操作会导致两个问题。问题一：博客审核终止，进入正常阅读状态。问题二：该篇博客不会记录经验值和积分。  这是用经验值换来的经验啊。</p><p>关于为什么这样，我也不知道。我会到阿里云的聆听平台去反馈，看看会不会有结果。</p><h2 id="专辑审核问题和审核时间"><a href="#专辑审核问题和审核时间" class="headerlink" title="专辑审核问题和审核时间"></a>专辑审核问题和审核时间</h2><p>在博客的发布过程中，我也整理了几篇博客汇总成了一个专辑，这个专辑也是让我很是费解。主要是以下几个问题。</p><p>我创建了一个专辑，创建完以后就处于审核中，整个专辑不可以进行编辑，这个审核过程，持续了大约36个小时，期间没有任何提示和进度显示，我一度以为我这个专辑是不是不会通过审核。</p><p>还有就是专辑的 logo 图片，在我的专辑管理页面看到的 logo 是正常的。但是在用户的阅读页面，这个 logo 是被压扁的，整个视觉体验非常差。</p><p>总的来说，云栖的博客系统还有很多要改进的地方。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;最近在阿里云的云栖社区内发表了多篇博客，发现一些奇怪的问题。比如，博客发布以后，会处于审核中的状态，这个审核要多久，都审核什么，一直是处于未知状态。经过几天的摸索，对于几个问题有了一些答案，记录在这里，和大家分享一下。&lt;/p&gt;
    
    </summary>
    
    
      <category term="life" scheme="https://erdong.site/categories/life/"/>
    
      <category term="gossip" scheme="https://erdong.site/categories/life/gossip/"/>
    
    
      <category term="博客" scheme="https://erdong.site/tags/%E5%8D%9A%E5%AE%A2/"/>
    
  </entry>
  
  <entry>
    <title>QDS03 pip</title>
    <link href="https://erdong.site/QDS/qds03.html"/>
    <id>https://erdong.site/QDS/qds03.html</id>
    <published>2019-02-21T12:19:47.000Z</published>
    <updated>2019-10-14T11:12:58.519Z</updated>
    
    <content type="html"><![CDATA[<p>QDS （Quick Deployment Series）快速的部署一个软件。这次我们来部署 pip 。</p><p>pip 是 Python 包管理工具，该工具提供了对Python 包的查找、下载、安装、卸载的功能。<br>pip 官网：<a href="https://pypi.org/project/pip/" target="_blank" rel="noopener">https://pypi.org/project/pip/</a></p><a id="more"></a><h1 id="安装"><a href="#安装" class="headerlink" title="安装"></a>安装</h1><p>首先下载安装脚本 get-pip.py , 大约 1.7 MiB 。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curl https:&#x2F;&#x2F;bootstrap.pypa.io&#x2F;get-pip.py -o get-pip.py</span><br></pre></td></tr></table></figure><p>安装 python2  的 pip 执行下列命令</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">python get-pip.py</span><br></pre></td></tr></table></figure><p>安装 python3  的 pip 执行下列命令</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">python3 get-pip.py</span><br></pre></td></tr></table></figure><h1 id="验证"><a href="#验证" class="headerlink" title="验证"></a>验证</h1><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[root@node31 ~]# pip --version</span><br><span class="line">pip 19.0.3 from &#x2F;usr&#x2F;lib&#x2F;python2.7&#x2F;site-packages&#x2F;pip (python 2.7)</span><br><span class="line">[root@node31 ~]#</span><br></pre></td></tr></table></figure><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;QDS （Quick Deployment Series）快速的部署一个软件。这次我们来部署 pip 。&lt;/p&gt;
&lt;p&gt;pip 是 Python 包管理工具，该工具提供了对Python 包的查找、下载、安装、卸载的功能。&lt;br&gt;pip 官网：&lt;a href=&quot;https://pypi.org/project/pip/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://pypi.org/project/pip/&lt;/a&gt;&lt;/p&gt;
    
    </summary>
    
    
      <category term="QDS" scheme="https://erdong.site/categories/QDS/"/>
    
    
      <category term="QDS" scheme="https://erdong.site/tags/QDS/"/>
    
      <category term="pip" scheme="https://erdong.site/tags/pip/"/>
    
  </entry>
  
  <entry>
    <title>QDS04 TensorFlow</title>
    <link href="https://erdong.site/QDS/qds04.html"/>
    <id>https://erdong.site/QDS/qds04.html</id>
    <published>2019-02-21T12:19:47.000Z</published>
    <updated>2019-10-14T11:13:07.541Z</updated>
    
    <content type="html"><![CDATA[<p>QDS （Quick Deployment Series）快速的部署一个软件。这次我们来部署 TensorFlow。</p><a id="more"></a><h1 id="系统要求"><a href="#系统要求" class="headerlink" title="系统要求"></a>系统要求</h1><p>Ubuntu 16.04 或更高版本（64 位）<br>macOS 10.12.6 (Sierra) 或更高版本（64 位）（不支持 GPU）<br>Windows 7 或更高版本（64 位）（仅支持 Python 3）<br>Raspbian 9.0 或更高版本</p><h1 id="硬件要求"><a href="#硬件要求" class="headerlink" title="硬件要求"></a>硬件要求</h1><p>从 TensorFlow 1.6 开始，二进制文件使用 AVX 指令，这些指令可能无法在旧版 CPU 上运行。</p><p>CUDA® 计算能力为 3.5 或更高的 NVIDIA® GPU 卡。</p><h1 id="软件要求"><a href="#软件要求" class="headerlink" title="软件要求"></a>软件要求</h1><p>必须在系统中安装以下 NVIDIA® 软件：</p><ul><li>NVIDIA® GPU 驱动程序 - CUDA 9.0 需要 384.x 或更高版本。</li><li>CUDA® 工具包 - TensorFlow 支持 CUDA 9.0。</li><li>CUDA 工具包附带的 CUPTI。</li><li>cuDNN SDK（7.2 及更高版本）</li><li>（可选）NCCL 2.2，可实现多 GPU 支持。</li><li>（可选）TensorRT 4.0，可缩短在某些模型上进行推断的延迟并提高吞吐量。</li></ul><h1 id="安装"><a href="#安装" class="headerlink" title="安装"></a>安装</h1><h2 id="环境检测"><a href="#环境检测" class="headerlink" title="环境检测"></a>环境检测</h2><p>python 2 环境检测，如果没有某个部分，请补装。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">python --version</span><br><span class="line">pip --version</span><br></pre></td></tr></table></figure><p>python3 和 python2 类似，换成 python3 的命令即可。</p><h2 id="安装-1"><a href="#安装-1" class="headerlink" title="安装"></a>安装</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">pip install tensorflow  &#x2F;&#x2F; 安装 TensorFlow CPU 版本</span><br><span class="line">pip install tensorflow-gpu  &#x2F;&#x2F; 安装 TensorFlow GPU 版本</span><br><span class="line">pip install tf-nightly    &#x2F;&#x2F; 安装 TensorFlow CPU 暗夜版本 不稳定</span><br><span class="line">pip install tf-nightly-gpu   &#x2F;&#x2F; 安装 TensorFlow GPU 暗夜版本 不稳定</span><br></pre></td></tr></table></figure><p>不过这样通过 pip 安装速度有点慢啊，使用了 pip 官方的源。</p><p>换阿里云的 pip 源以后很快就完成了。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pip install -i https:&#x2F;&#x2F;mirrors.aliyun.com&#x2F;pypi&#x2F;simple tensorflow-gpu</span><br></pre></td></tr></table></figure><h1 id="验证"><a href="#验证" class="headerlink" title="验证"></a>验证</h1><p>依次输入如下命令：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">[root@node31 ~]# python</span><br><span class="line">Python 2.7.5 (default, Jul 13 2018, 13:06:57)</span><br><span class="line">[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2</span><br><span class="line">Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.</span><br><span class="line">&gt;&gt;&gt; import tensorflow as tf</span><br><span class="line">&gt;&gt;&gt; tf.__version__</span><br><span class="line">&#39;1.12.0&#39;</span><br><span class="line">&gt;&gt;&gt; tf.__path__</span><br><span class="line">[&#39;&#x2F;usr&#x2F;lib&#x2F;python2.7&#x2F;site-packages&#x2F;tensorflow&#39;, &#39;&#x2F;usr&#x2F;lib&#x2F;python2.7&#x2F;site-packages&#x2F;tensorflow&#x2F;python&#x2F;estimator&#x2F;api&#39;, &#39;&#x2F;usr&#x2F;lib&#x2F;python2.7&#x2F;site-packages&#x2F;tensorflow&#x2F;_api&#x2F;v1&#39;]</span><br><span class="line">&gt;&gt;&gt;</span><br></pre></td></tr></table></figure><p>可以看到，已经安装了 TensorFlow 的 1.12 版本和安装的路径。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;QDS （Quick Deployment Series）快速的部署一个软件。这次我们来部署 TensorFlow。&lt;/p&gt;
    
    </summary>
    
    
      <category term="QDS" scheme="https://erdong.site/categories/QDS/"/>
    
    
      <category term="QDS" scheme="https://erdong.site/tags/QDS/"/>
    
      <category term="TensorFlow" scheme="https://erdong.site/tags/TensorFlow/"/>
    
  </entry>
  
  <entry>
    <title>QDS02 Docker</title>
    <link href="https://erdong.site/QDS/qds02.html"/>
    <id>https://erdong.site/QDS/qds02.html</id>
    <published>2019-02-20T12:19:47.000Z</published>
    <updated>2021-10-22T09:59:44.906Z</updated>
    
    <content type="html"><![CDATA[<p>QDS （Quick Deployment Series）快速的部署一个软件。这次我们来部署 Docker 。</p><a id="more"></a><h1 id="系统要求"><a href="#系统要求" class="headerlink" title="系统要求"></a>系统要求</h1><p>对于 CentOS 系统要安装 Docker CE，您需要一个 CentOS 7 的维护版本。不支持测试版本和存档版本。</p><p>必须启用 centos-extras 源。默认情况下，这个源是启用的，但是如果您禁用了它，则需要重新启用它。</p><p>建议使用 overlay2 存储驱动程序。</p><h1 id="安装"><a href="#安装" class="headerlink" title="安装"></a>安装</h1><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">yum install -y yum-utils  device-mapper-persistent-data  lvm2</span><br><span class="line">yum-config-manager --add-repo http:&#x2F;&#x2F;mirrors.aliyun.com&#x2F;docker-ce&#x2F;linux&#x2F;centos&#x2F;docker-ce.repo</span><br><span class="line">yum install -y docker-ce</span><br></pre></td></tr></table></figure><p>说明：</p><ul><li>yum-utils 提供了 yum-config-manager 命令</li><li>device-mapper-persistent-data 和 lvm2 是 devicemapper 存储设备需要的。</li><li>命令中使用了阿里云的 yum 源，建议使用这个。如果一定要用官方的，地址为 <a href="https://download.docker.com/linux/centos/docker-ce.repo" target="_blank" rel="noopener">https://download.docker.com/linux/centos/docker-ce.repo</a></li></ul><h1 id="启动"><a href="#启动" class="headerlink" title="启动"></a>启动</h1><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl start docker</span><br></pre></td></tr></table></figure><h1 id="验证"><a href="#验证" class="headerlink" title="验证"></a>验证</h1><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[root@promtail01 ~]# docker --version</span><br><span class="line">Docker version 20.10.9, build 6247962</span><br><span class="line">[root@promtail01 ~]#</span><br></pre></td></tr></table></figure><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;QDS （Quick Deployment Series）快速的部署一个软件。这次我们来部署 Docker 。&lt;/p&gt;
    
    </summary>
    
    
      <category term="QDS" scheme="https://erdong.site/categories/QDS/"/>
    
    
      <category term="QDS" scheme="https://erdong.site/tags/QDS/"/>
    
      <category term="Docker" scheme="https://erdong.site/tags/Docker/"/>
    
  </entry>
  
  <entry>
    <title>QDS01 Grafana</title>
    <link href="https://erdong.site/QDS/qds01.html"/>
    <id>https://erdong.site/QDS/qds01.html</id>
    <published>2019-02-20T12:19:36.000Z</published>
    <updated>2019-10-14T11:12:03.377Z</updated>
    
    <content type="html"><![CDATA[<p>QDS （Quick Deployment Series）快速的部署一个软件。这次我们来部署 Grafana 。</p><a id="more"></a><p>添加 Grafana 的 yum 源文件 /etc/yum.repos.d/grafana.repo</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">[grafana]</span><br><span class="line">name&#x3D;grafana</span><br><span class="line">baseurl&#x3D;https:&#x2F;&#x2F;packages.grafana.com&#x2F;oss&#x2F;rpm</span><br><span class="line">repo_gpgcheck&#x3D;1</span><br><span class="line">enabled&#x3D;1</span><br><span class="line">gpgcheck&#x3D;1</span><br><span class="line">gpgkey&#x3D;https:&#x2F;&#x2F;packages.grafana.com&#x2F;gpg.key</span><br><span class="line">sslverify&#x3D;1</span><br><span class="line">sslcacert&#x3D;&#x2F;etc&#x2F;pki&#x2F;tls&#x2F;certs&#x2F;ca-bundle.crt</span><br></pre></td></tr></table></figure><p>执行下列命令可以安装最新版本的 Grafana 。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">yum install grafana</span><br></pre></td></tr></table></figure><h1 id="启动服务"><a href="#启动服务" class="headerlink" title="启动服务"></a>启动服务</h1><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl start grafana-server</span><br></pre></td></tr></table></figure><h1 id="验证"><a href="#验证" class="headerlink" title="验证"></a>验证</h1><p>通过浏览器访问 <a href="http://localhost:3000" target="_blank" rel="noopener">http://localhost:3000</a> 即可访问 Grafana 。默认的 账号密码是 admin/admin ，首次登陆需要修改密码。</p><p>如果有防火墙，请放开对应端口。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;QDS （Quick Deployment Series）快速的部署一个软件。这次我们来部署 Grafana 。&lt;/p&gt;
    
    </summary>
    
    
      <category term="QDS" scheme="https://erdong.site/categories/QDS/"/>
    
    
      <category term="Grafana" scheme="https://erdong.site/tags/Grafana/"/>
    
      <category term="QDS" scheme="https://erdong.site/tags/QDS/"/>
    
  </entry>
  
  <entry>
    <title>Prometheus 由于时间不同步导致数据不显示</title>
    <link href="https://erdong.site/uncategorized/prometheus-time-difference.html"/>
    <id>https://erdong.site/uncategorized/prometheus-time-difference.html</id>
    <published>2019-02-17T13:11:00.000Z</published>
    <updated>2019-10-14T11:11:54.892Z</updated>
    
    <content type="html"><![CDATA[<h1 id="现象描述"><a href="#现象描述" class="headerlink" title="现象描述"></a>现象描述</h1><p>将 Prometheus 数据在 Grafana 中进行展示，Grafana 中 Graph 数据显示有延迟，其他类型 Singlestat 和 Table 都显示 N/A 。 </p><a id="more"></a><h1 id="排查"><a href="#排查" class="headerlink" title="排查"></a>排查</h1><h2 id="1-排查数据库"><a href="#1-排查数据库" class="headerlink" title="1. 排查数据库"></a>1. 排查数据库</h2><p>发现 Prometheus 数据库端一切正常，</p><h2 id="2-查看-web-端"><a href="#2-查看-web-端" class="headerlink" title="2. 查看 web 端"></a>2. 查看 web 端</h2><p>打开 Prometheus web 发现有明显提示 ，如下</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Warning! Detected 437.83 seconds time difference between your browser and the server. Prometheus relies on accurate time and time drift might cause unexpected query results.</span><br></pre></td></tr></table></figure><p>看到这里就找到了数据不显示的原因，是因为时间不同步。</p><h1 id="结论"><a href="#结论" class="headerlink" title="结论"></a>结论</h1><p>数据库端的时间和浏览器端的时间不同步导致浏览器端无法正常显示数据，将数据库端的时间与浏览器端的时间进行同步即可。</p><p>本次问题中 Grafana 页面刷新间隔为 5min 。</p><p>在 Prometheus web 中偏差大于 5 min 时，无法查询到任何数据，当时间偏差小于 5min 时，可以查到数据，并且正常在 Grafana 中显示。</p><p>不确定 Grafana 和 Prometheus 的这两个是值是偶然相同还是有必然联系，留待以后验证。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;h1 id=&quot;现象描述&quot;&gt;&lt;a href=&quot;#现象描述&quot; class=&quot;headerlink&quot; title=&quot;现象描述&quot;&gt;&lt;/a&gt;现象描述&lt;/h1&gt;&lt;p&gt;将 Prometheus 数据在 Grafana 中进行展示，Grafana 中 Graph 数据显示有延迟，其他类型 Singlestat 和 Table 都显示 N/A 。 &lt;/p&gt;
    
    </summary>
    
    
    
      <category term="prometheus" scheme="https://erdong.site/tags/prometheus/"/>
    
      <category term="time" scheme="https://erdong.site/tags/time/"/>
    
  </entry>
  
  <entry>
    <title>第07周分享</title>
    <link href="https://erdong.site/weekly/weekly07.html"/>
    <id>https://erdong.site/weekly/weekly07.html</id>
    <published>2019-02-17T01:31:23.000Z</published>
    <updated>2019-10-14T11:15:57.385Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="资源"><a href="#资源" class="headerlink" title="资源"></a>资源</h1><h2 id="1-代码整洁之道"><a href="#1-代码整洁之道" class="headerlink" title="1. 代码整洁之道"></a>1. <a href="https://book.douban.com/subject/4199741/" target="_blank" rel="noopener">代码整洁之道</a></h2><p>中文书名：代码整洁之道<br>英文书名：The Clean Coder – A Handbook of Agile Software Craftmanship<br>出版社：人民邮电出版社<br>作者：[美] Robert C. Martin<br>译者：韩磊</p><h2 id="2-代码整洁之道-程序员的职业素养"><a href="#2-代码整洁之道-程序员的职业素养" class="headerlink" title="2. 代码整洁之道:程序员的职业素养"></a>2. <a href="https://book.douban.com/subject/26919457/" target="_blank" rel="noopener">代码整洁之道:程序员的职业素养</a></h2><p>中文书名：代码整洁之道–程序员的职业素养<br>英文书名：The Clean Coder – A Code of Conduct for Professional Programmers<br>出版社：中国工信出版集团  人民邮电出版社<br>作者：[美] Robert C. Martin<br>译者：余晟 彰显洲</p><h2 id="3-架构整洁之道"><a href="#3-架构整洁之道" class="headerlink" title="3. 架构整洁之道"></a>3. <a href="https://book.douban.com/subject/30333919/" target="_blank" rel="noopener">架构整洁之道</a></h2><p>中文书名：架构整洁之道<br>英文书名：Clean Architecture<br>出版社：中国工信出版集团  人民邮电出版社<br>作者：[美] Robert C. Martin<br>译者：孙宇聪</p><p>三本书都是创造 “Clean神话” 的 Bob 大叔撰写，推荐大家阅读。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
  </entry>
  
  <entry>
    <title>第06周分享</title>
    <link href="https://erdong.site/weekly/weekly06.html"/>
    <id>https://erdong.site/weekly/weekly06.html</id>
    <published>2019-02-11T01:31:23.000Z</published>
    <updated>2019-10-14T11:15:50.279Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="资源"><a href="#资源" class="headerlink" title="资源"></a>资源</h1><h2 id="1-美团技术团队"><a href="#1-美团技术团队" class="headerlink" title="1. 美团技术团队"></a>1. <a href="https://tech.meituan.com" target="_blank" rel="noopener">美团技术团队</a></h2><p>美团技术团队的博客，也有对应的微信公众号，会不定时分享美团的经验。</p><p>在2019年初，美团总结了2018年的技术分享，现在把下载链接分享给大家。</p><p>温馨提醒：文件过大，约350M，建议通过WIFI下载，或将地址复制到PC端，使用浏览器下载。</p><p>【前端系列】：<a href="http://dpurl.cn/DWVhPpS" target="_blank" rel="noopener">http://dpurl.cn/DWVhPpS</a><br>【后台系列】：<a href="http://dpurl.cn/obtIVn" target="_blank" rel="noopener">http://dpurl.cn/obtIVn</a><br>【系统系列】：<a href="http://dpurl.cn/zTDWq8Q" target="_blank" rel="noopener">http://dpurl.cn/zTDWq8Q</a><br>【算法系列】：<a href="http://dpurl.cn/ODj5qAB" target="_blank" rel="noopener">http://dpurl.cn/ODj5qAB</a><br>【运维系列】：<a href="http://dpurl.cn/6zjgHFj" target="_blank" rel="noopener">http://dpurl.cn/6zjgHFj</a><br>【测试系列】：<a href="http://dpurl.cn/wfKQqy" target="_blank" rel="noopener">http://dpurl.cn/wfKQqy</a><br>【工程师成长系列】：<a href="http://dpurl.cn/p5sPoKT" target="_blank" rel="noopener">http://dpurl.cn/p5sPoKT</a><br>【2018美团点评技术文章合辑】：<a href="http://dpurl.cn/iLGBtuS" target="_blank" rel="noopener">http://dpurl.cn/iLGBtuS</a></p><h2 id="2-2019-2020中国互联网趋势报告"><a href="#2-2019-2020中国互联网趋势报告" class="headerlink" title="2. 2019-2020中国互联网趋势报告"></a>2. <a href="https://mp.weixin.qq.com/s/BXAVztTFIAdJBxdFkPj-Qg" target="_blank" rel="noopener">2019-2020中国互联网趋势报告</a></h2><p>《2019-2020中国互联网趋势报告》，寻找中国互联网的“未饱和”.</p><p>在“更大的中国”这个范畴里，我们可能都是陌生人。</p><p>有些事情向上，有些事情向下。有些事情正在饱和，有些事情正在生长。</p><p>2019年到2020年，当我们期望于科技和互联网时，我们该期望些什么？</p><p>如果“饱和”，已经成为一种实实在在的压力，那么，中国互联网的“未饱和”部分，到底在哪里？</p><p>本报告由腾讯新闻和企鹅智库联合出品，2019年1月。</p><h2 id="3-HTTP2-amp-HTTP3"><a href="#3-HTTP2-amp-HTTP3" class="headerlink" title="3. HTTP2 &amp; HTTP3"></a>3. HTTP2 &amp; HTTP3</h2><p>这两部分详细讲解了 http2 和 http3 ，对于理解 http 是很好的资料。</p><p>HTTP3 详解 <a href="https://daniel.haxx.se/http3-explained/" target="_blank" rel="noopener">https://daniel.haxx.se/http3-explained/</a> </p><p>HTTP2 详解 <a href="https://daniel.haxx.se/http2/" target="_blank" rel="noopener">https://daniel.haxx.se/http2/</a></p><p>HTTP3 中文 gitbook ：<a href="https://http3-explained.haxx.se/zh/" target="_blank" rel="noopener">https://http3-explained.haxx.se/zh/</a></p><p>HTTP2 中文 gitbook ：<a href="https://http2-explained.haxx.se/content/zh/" target="_blank" rel="noopener">https://http2-explained.haxx.se/content/zh/</a></p><p>Curl 作者 Daniel Stenberg 出品</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
  </entry>
  
  <entry>
    <title>第05周分享</title>
    <link href="https://erdong.site/weekly/weekly05.html"/>
    <id>https://erdong.site/weekly/weekly05.html</id>
    <published>2019-02-02T09:31:10.000Z</published>
    <updated>2019-10-14T11:15:42.440Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="教程"><a href="#教程" class="headerlink" title="教程"></a>教程</h1><h2 id="1-Learn-Go-with-tests"><a href="#1-Learn-Go-with-tests" class="headerlink" title="1. Learn Go with tests"></a>1. <a href="https://studygolang.gitbook.io/learn-go-with-tests" target="_blank" rel="noopener">Learn Go with tests</a></h2><p>Go 教程，基于 TDD （Test Driven Development）的 Go 教程。一边学 Go ，一边还体验了 TDD。体验一下 TDD 还是不错的，强迫自己可以捋清楚需求，而且测试用例完备，对写出的代码也比较有信心，唯一的缺点就是代码量偏大。</p><p>深度解读 TDD <a href="https://www.jianshu.com/p/62f16cd4fef3" target="_blank" rel="noopener">https://www.jianshu.com/p/62f16cd4fef3</a></p><h1 id="工具"><a href="#工具" class="headerlink" title="工具"></a>工具</h1><h2 id="1-微软对联"><a href="#1-微软对联" class="headerlink" title="1. 微软对联"></a>1. <a href="http://duilian.msra.cn/app/couplet.aspx" target="_blank" rel="noopener">微软对联</a></h2><p>微软对联是由微软亚洲研究院自然语言计算组研发的计算机自动对联系统。 首先用户给定上联，然后系统自动提供若干下联供用户选择， 用户可以通过交互手段优选字词来生成满意的下联；当确定一副对联后还可以生成若干四字横批供用户参考。 目前本系统可处理十字以下的对联。</p><h2 id="2-绝句"><a href="#2-绝句" class="headerlink" title="2. 绝句"></a>2. <a href="http://duilian.msra.cn/jueju/" target="_blank" rel="noopener">绝句</a></h2><p>微软绝句是由微软亚洲研究院自然语言计算组研发的计算机自动写诗系统。 首先用户选择一些关键词，系统根据用户确定的关键词生成第一句，用户可以手动选择第一句，也可以自行输入；接下来，用户点击第二句的输入框，系统根据第一句自动生成第二句；同理，第三句和第四句的生成也考虑已生成前文的信息。当四句诗生成结束后，用户可以点击“写诗题”输入诗题和姓名，之后可以根据诗歌内容进行诗配画并保存或分享。</p><p>当前绝句生成使用的主题词来源于清代学者刘文蔚创作的《诗学含英》一书，包含了二级分类，收集了《声韵启蒙》、《训蒙骈句》、《笠翁对韵》三本训练对偶技巧和声韵格律的工具书，包含若干主题，例如天文、时令、节序、地舆、楼馆、人伦、文学、游眺、饮食、器用、花草、竹木、飞禽、走兽等，对常见的古体诗有很好的覆盖。</p><h1 id="资源"><a href="#资源" class="headerlink" title="资源"></a>资源</h1><h2 id="1-Golang-Example"><a href="#1-Golang-Example" class="headerlink" title="1. Golang Example"></a>1. <a href="https://golangexample.com" target="_blank" rel="noopener">Golang Example</a></h2><p>该网站收集 Go 语言的各种应用实例。</p><h1 id="随笔"><a href="#随笔" class="headerlink" title="随笔"></a>随笔</h1><p>一年又过去了，送走了 2018，迎来了 2019 。生活上 2018 年有太多的坎坷和磨难，希望 2019 可以顺利一些。</p><p>2019 年有太多的事情想做，回家了好好规划规划，努力一下吧。</p><p>年底很多人喜欢写总结，可是我不知道该总结什么。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
      <category term="Newsletter" scheme="https://erdong.site/tags/Newsletter/"/>
    
  </entry>
  
  <entry>
    <title>CUDA 10.0 安装包浅析</title>
    <link href="https://erdong.site/GPU/cuda-introduction.html"/>
    <id>https://erdong.site/GPU/cuda-introduction.html</id>
    <published>2019-01-30T13:40:59.000Z</published>
    <updated>2019-10-14T11:06:31.049Z</updated>
    
    <content type="html"><![CDATA[<p>本文基于最新的 CUDA 10.0 CentOS 7 操作系统的 run 文件安装包来进行解压分析，看看里边都有些什么内容。有些可能遇到的问题放在最后的 FAQ 里了。CUDA 9.x 会和10.0 有一些差别，不过大部分还是比较接近的。</p><p>CUDA 的源代码在 <a href="https://developer.download.nvidia.cn/compute/cuda/opensource/10.0.130/" target="_blank" rel="noopener">https://developer.download.nvidia.cn/compute/cuda/opensource/10.0.130/</a></p><a id="more"></a><p>这里有安装指导  <a href="https://developer.download.nvidia.cn/compute/cuda/10.0/Prod/docs/sidebar/CUDA_Installation_Guide_Linux.pdf" target="_blank" rel="noopener">https://developer.download.nvidia.cn/compute/cuda/10.0/Prod/docs/sidebar/CUDA_Installation_Guide_Linux.pdf</a></p><p>有快速开始的指导 <a href="https://developer.download.nvidia.cn/compute/cuda/10.0/Prod/docs/sidebar/CUDA_Quick_Start_Guide.pdf" target="_blank" rel="noopener">https://developer.download.nvidia.cn/compute/cuda/10.0/Prod/docs/sidebar/CUDA_Quick_Start_Guide.pdf</a></p><h1 id="解压"><a href="#解压" class="headerlink" title="解压"></a>解压</h1><p>首先要下载安装包，我们下载CUDA 10.0 CentOS 7 的 run 文件安装包，其次我们使用 noexec 参数进行解压，操作如下：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">wget https:&#x2F;&#x2F;developer.nvidia.com&#x2F;compute&#x2F;cuda&#x2F;10.0&#x2F;Prod&#x2F;local_installers&#x2F;cuda_10.0.130_410.48_linux</span><br><span class="line">sh cuda_10.0.130_410.48_linux --noexec --target v10.0</span><br></pre></td></tr></table></figure><p>意思是不运行安装脚本，把 cuda_10.0.130_410.48_linux.run解压到v10.0目录。</p><blockquote><p>下载地址是从官网拷贝下来的，不知道为什么没有.run 的后缀，不过是个 run 包无疑。</p></blockquote><h1 id="总览"><a href="#总览" class="headerlink" title="总览"></a>总览</h1><p>我们进入的解压的目录里看看有什么</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">[root@cuda ~]# cd v10.0</span><br><span class="line">[root@cuda v10.0]# ll -h</span><br><span class="line">总用量 72K</span><br><span class="line">-rwxr-xr-x 1 root root  45K 9月  13 05:44 cuda-installer.pl</span><br><span class="line">-r-xr-xr-x 1 root root  13K 9月  13 05:44 InstallUtils.pm</span><br><span class="line">drwxrwxr-x 3 root root  196 1月  28 18:32 run_files</span><br><span class="line">-r-xr-xr-x 1 root root 7.6K 9月  13 05:44 uninstall_cuda.pl</span><br><span class="line">[root@cuda v10.0]#</span><br></pre></td></tr></table></figure><p>从上边的输出来看，解压以后最先看到的就是这三个文件和一个目录，他们分别是：</p><ul><li>cuda-installer.pl  perl 语言写的安装脚本</li><li>InstallUtils.pm package InstallUtils .</li><li>run_files   run 包的所有文件。</li><li>uninstall_cuda.pl  perl 语言写的卸载脚本，安装以后可以使用安装包来卸载已经安装好的 CUDA。</li></ul><p>我们接下来看一下 run_files 里有什么？</p><p>执行 ls 命令</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">[root@172-18-12-25 run_files]# ll -h</span><br><span class="line">总用量 1.9G</span><br><span class="line">-rwxrwxr-x 1 root root 1.8G 9月  13 05:44 cuda-linux.10.0.130-24817639.run</span><br><span class="line">-rwxrwxr-x 1 root root  83M 9月  13 05:44 cuda-samples.10.0.130-24817639-linux.run</span><br><span class="line">-r--r--r-- 1 root root  63K 9月  13 05:44 EULA.txt</span><br><span class="line">-r-xr-xr-x 1 root root 444K 9月  13 05:44 getpass</span><br><span class="line">-rwxr-xr-x 1 root root 102M 9月  13 05:44 NVIDIA-Linux-x86_64-410.48.run</span><br><span class="line">-r--r--r-- 1 root root  185 9月  13 05:44 pc_template.pc</span><br><span class="line">[root@172-18-12-25 run_files]#</span><br></pre></td></tr></table></figure><p>可以看到这些文件</p><ul><li>cuda-linux.10.0.130-24817639.run  CUDA 安装包</li><li>cuda-samples.10.0.130-24817639-linux.run  CUDA sample 例子的安装包</li><li>EULA.txt  End User License Agreement 终端用户 license 协议</li><li>getpass  一个二进制文件，用来获取一个口令</li><li>NVIDIA-Linux-x86_64-410.48.run  显卡驱动安装包</li><li>pc_template.pc pc 模板，用来显示一些基本的信息，内容如下：</li></ul><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">#pc_template.pc</span><br><span class="line">cudaroot&#x3D;$(CUDAPATH)</span><br><span class="line">libdir&#x3D;$(LIBDIR)</span><br><span class="line">includedir&#x3D;$&#123;cudaroot&#125;&#x2F;include</span><br><span class="line"></span><br><span class="line">Name: $(NAME)</span><br><span class="line">Description: $(DESCRIPTION)</span><br><span class="line">Version: $(VERSION)</span><br><span class="line">Libs: -L$&#123;libdir&#125; -l$(NAME)</span><br><span class="line">Cflags: -I$&#123;includedir&#125;</span><br></pre></td></tr></table></figure><h1 id="CUDA-安装包"><a href="#CUDA-安装包" class="headerlink" title="CUDA 安装包"></a>CUDA 安装包</h1><p>我们先把 cuda-samples.10.0.130-24817639-linux.run 解压，然后看看里边有什么内容。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line">[root@172-18-12-25 run_files]# sh cuda-linux.10.0.130-24817639.run --noexec --target cuda-linux</span><br><span class="line">[root@172-18-12-25 run_files]# cd cuda-linux</span><br><span class="line">[root@172-18-12-25 cuda-linux]# ll -h</span><br><span class="line">总用量 144K</span><br><span class="line">drwxrwxr-x 3 root root  331 9月  13 05:18 bin</span><br><span class="line">-rw-rw-r-- 1 root root 8.7K 9月  13 05:18 CUDA_Toolkit_Release_Notes.txt</span><br><span class="line">drwxrwxr-x 5 root root   40 9月  13 05:18 doc</span><br><span class="line">-rw-rw-r-- 1 root root  63K 9月  13 05:18 EULA.txt</span><br><span class="line">drwxrwxr-x 5 root root   89 9月  13 05:18 extras</span><br><span class="line">drwxrwxr-x 6 root root 8.0K 9月  13 05:18 include</span><br><span class="line">-rwxr-xr-x 1 root root  19K 9月  13 05:18 install-linux.pl</span><br><span class="line">-r-xr-xr-x 1 root root  13K 9月  13 05:18 InstallUtils.pm</span><br><span class="line">drwxrwxr-x 5 root root  185 9月  13 05:18 jre</span><br><span class="line">drwxrwxr-x 3 root root 4.0K 9月  13 05:18 lib64</span><br><span class="line">drwxrwxr-x 8 root root  226 9月  13 05:18 libnsight</span><br><span class="line">drwxrwxr-x 7 root root  209 9月  13 05:18 libnvvp</span><br><span class="line">drwxrwxr-x 8 root root  160 9月  13 05:18 NsightCompute-1.0</span><br><span class="line">drwxrwxr-x 2 root root   53 9月  13 05:18 nsightee_plugins</span><br><span class="line">drwxrwxr-x 3 root root   21 9月  13 05:18 nvml</span><br><span class="line">drwxrwxr-x 7 root root   85 9月  13 05:18 nvvm</span><br><span class="line">drwxrwxr-x 3 root root   17 9月  13 05:18 share</span><br><span class="line">drwxrwxr-x 2 root root  201 9月  13 05:18 src</span><br><span class="line">drwxrwxr-x 2 root root   43 9月  13 05:18 tools</span><br><span class="line">-r-xr-xr-x 1 root root 7.6K 9月  13 05:18 uninstall_cuda.pl</span><br><span class="line">-rw-rw-r-- 1 root root   22 9月  13 05:18 version.txt</span><br><span class="line">[root@172-18-12-25 cuda-linux]#</span><br></pre></td></tr></table></figure><ul><li>bin     编译好的命令                        </li><li>doc     文档</li><li>extras  cuda gdb 源码以及一些 demo 套件，包括 bandwidthTest、busGrind、deviceQuery、nbody、oceanFFT、randomFog、vectorAdd 。</li><li>install-linux.pl  perl 写的安装脚本</li><li>jre   Oracle java 的 jre， <a href="http://java.com/licensereadme" target="_blank" rel="noopener">http://java.com/licensereadme</a></li><li>libnsight  nsight 的 lib 库</li><li>NsightCompute-1.0  用于CUDA应用程序的交互式内核分析器。</li><li>nvml  一个简单的示例程序，演示如何构建一个 NVML 客户端。</li><li>share  里边有一个 gbd 目录</li><li>tools  有一个计算器</li><li>version.txt  版本信息</li><li>CUDA_Toolkit_Release_Notes.txt  CUDA 的 Release notes</li><li>EULA.txt  End User License Agreemen 终端用户 license 协议</li><li>include  各种 .h 文件</li><li>InstallUtils.pm   package InstallUtils</li><li>lib64  库文件</li><li>libnvvp   nvvp 库文件</li><li>nsightee_plugins   nsightee 的插件</li><li>nvvm  nvvm ，bin 目录下有一个 cicc 的命令</li><li>src   源码， 有一些 .h 结尾的文件</li><li>uninstall_cuda.pl  perl 写的卸载脚本</li></ul><p>CUDA 自身的内容大概就是这样，有需要的可以自行探索。</p><h1 id="CUDA-sample-例子的安装包"><a href="#CUDA-sample-例子的安装包" class="headerlink" title="CUDA sample 例子的安装包"></a>CUDA sample 例子的安装包</h1><p>我们先把 cuda-samples.10.0.130-24817639-linux.run 解压，然后看看里边有什么内容。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line">[root@172-18-12-25 run_files]# sh cuda-samples.10.0.130-24817639-linux.run</span><br><span class="line"> --noexec --target cuda-samples</span><br><span class="line">[root@172-18-12-25 run_files]# cd cuda-samples</span><br><span class="line">[root@172-18-12-25 cuda-samples]# ll -h</span><br><span class="line">总用量 36K</span><br><span class="line">-r-xr-xr-x  1 root root  784 9月  13 05:18 cuda-install-samples-10.0.sh</span><br><span class="line">-rwxr-xr-x  1 root root 7.3K 9月  13 05:18 install-sdk-linux.pl</span><br><span class="line">-r-xr-xr-x  1 root root  13K 9月  13 05:18 InstallUtils.pm</span><br><span class="line">drwxrwxr-x 11 root root  201 9月  13 05:18 samples</span><br><span class="line">-r-xr-xr-x  1 root root 7.6K 9月  13 05:18 uninstall_cuda.pl</span><br><span class="line">[root@172-18-12-25 cuda-samples]# cd samples</span><br><span class="line">[root@172-18-12-25 samples]# ll -h</span><br><span class="line">总用量 84K</span><br><span class="line">drwxrwxr-x 51 root root 4.0K 9月  13 05:18 0_Simple</span><br><span class="line">drwxrwxr-x  8 root root  145 9月  13 05:18 1_Utilities</span><br><span class="line">drwxrwxr-x 13 root root  241 9月  13 05:18 2_Graphics</span><br><span class="line">drwxrwxr-x 22 root root 4.0K 9月  13 05:18 3_Imaging</span><br><span class="line">drwxrwxr-x 10 root root  209 9月  13 05:18 4_Finance</span><br><span class="line">drwxrwxr-x 10 root root  150 9月  13 05:18 5_Simulations</span><br><span class="line">drwxrwxr-x 34 root root 4.0K 9月  13 05:18 6_Advanced</span><br><span class="line">drwxrwxr-x 38 root root 4.0K 9月  13 05:18 7_CUDALibraries</span><br><span class="line">drwxrwxr-x  6 root root   71 9月  13 05:18 common</span><br><span class="line">-rw-rw-r--  1 root root  63K 9月  13 05:18 EULA.txt</span><br><span class="line">-rw-rw-r--  1 root root 2.6K 9月  13 05:18 Makefile</span><br><span class="line">[root@172-18-12-25 samples]# cd ..</span><br></pre></td></tr></table></figure><p>我们可以看到第一级目录有如下文件：</p><ul><li>cuda-install-samples-10.0.sh  bash 写的 CUDA sample 安装脚本</li><li>install-sdk-linux.pl   perl 写的 SDK 安装脚本</li><li>InstallUtils.pm  package InstallUtils .</li><li>samples  sample 实例目录</li><li>uninstall_cuda.pl  perl 写的卸载脚本</li></ul><p>接下来看一下 samples 里有什么？</p><ul><li>0_Simple  </li><li>1_Utilities  </li><li>2_Graphics  </li><li>3_Imaging  </li><li>4_Finance  </li><li>5_Simulations  </li><li>6_Advanced  </li><li>7_CUDALibraries  </li></ul><p>上边这8个是 CUDA sample 的内容，主要用来做两件事情，一是举例某个接口或者某个功能该如何使用，二是用来验证某项功能是正常的。 个别项目可以用来测试性能。</p><ul><li>common  0-7里的源码编译要用到的，很重要.</li><li>EULA.txt  End User License Agreement 终端用户 license 协议</li><li>Makefile 编译的 Makefile 文件</li></ul><h1 id="显卡驱动安装包"><a href="#显卡驱动安装包" class="headerlink" title="显卡驱动安装包"></a>显卡驱动安装包</h1><p>首先解压 NVIDIA-Linux-x86_64-410.48.run 安装包，这次 noexec 这个参数不起作用了，查看了一下帮助，要求使用 -x 来进行解压 。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line">[root@172-18-12-25 run_files]# sh NVIDIA-Linux-x86_64-410.48.run -x --target nvidia-linux</span><br><span class="line">Creating directory nvidia-linux</span><br><span class="line">Verifying archive integrity... OK</span><br><span class="line">Uncompressing NVIDIA Accelerated Graphics Driver for Linux-x86_64 410.48.................................................................</span><br><span class="line">[root@172-18-12-25 run_files]# cd nvidia-linux&#x2F;</span><br><span class="line">[root@172-18-12-25 nvidia-linux]# ls</span><br><span class="line">10_nvidia.json                 libGL.la                        libnvidia-fatbinaryloader.so.410.48  libnvoptix.so.410.48                                  nvidia-cuda-mps-server            nvidia-settings.1.gz</span><br><span class="line">10_nvidia_wayland.json         libGL.so.1.7.0                  libnvidia-fbc.so.410.48              libOpenCL.so.1.0.0                                    nvidia-debugdump                  nvidia-settings.desktop</span><br><span class="line">32                             libGL.so.410.48                 libnvidia-glcore.so.410.48           libOpenGL.so.0                                        nvidia-drm-outputclass.conf       nvidia-settings.png</span><br><span class="line">html                           libglvnd_install_checker        libnvidia-glsi.so.410.48             libvdpau_nvidia.so.410.48                             nvidia_drv.so                     nvidia-smi</span><br><span class="line">kernel                         libGLX_nvidia.so.410.48         libnvidia-glvkspirv.so.410.48        LICENSE                                               nvidia.icd                        nvidia-smi.1.gz</span><br><span class="line">libcuda.so.410.48              libglxserver_nvidia.so.410.48   libnvidia-gtk2.so.410.48             makeself-help-script.sh                               nvidia_icd.json.template          nvidia-xconfig</span><br><span class="line">libEGL_nvidia.so.410.48        libGLX.so.0                     libnvidia-gtk3.so.410.48             makeself.sh                                           nvidia-installer                  nvidia-xconfig.1.gz</span><br><span class="line">libEGL.so.1.1.0                libnvcuvid.so.410.48            libnvidia-ifr.so.410.48              mkprecompiled                                         nvidia-installer.1.gz             pkg-history.txt</span><br><span class="line">libEGL.so.410.48               libnvidia-cbl.so.410.48         libnvidia-ml.so.410.48               nvidia-application-profiles-410.48-key-documentation  nvidia-modprobe                   README.txt</span><br><span class="line">libGLdispatch.so.0             libnvidia-cfg.so.410.48         libnvidia-opencl.so.410.48           nvidia-application-profiles-410.48-rc                 nvidia-modprobe.1.gz              tls</span><br><span class="line">libGLESv1_CM_nvidia.so.410.48  libnvidia-compiler.so.410.48    libnvidia-ptxjitcompiler.so.410.48   nvidia-bug-report.sh                                  nvidia-persistenced               tls_test</span><br><span class="line">libGLESv1_CM.so.1.2.0          libnvidia-eglcore.so.410.48     libnvidia-rtcore.so.410.48           NVIDIA_Changelog                                      nvidia-persistenced.1.gz          tls_test_dso.so</span><br><span class="line">libGLESv2_nvidia.so.410.48     libnvidia-egl-wayland.so.1.1.0  libnvidia-tls.so.410.48              nvidia-cuda-mps-control                               nvidia-persistenced-init.tar.bz2</span><br><span class="line">libGLESv2.so.2.1.0             libnvidia-encode.so.410.48      libnvidia-wfb.so.410.48              nvidia-cuda-mps-control.1.gz                          nvidia-settings</span><br><span class="line">[root@172-18-12-25 nvidia-linux]#</span><br></pre></td></tr></table></figure><p>可以看到解压以后都是安装驱动需要的库文件 。</p><h1 id="FAQ"><a href="#FAQ" class="headerlink" title="FAQ"></a>FAQ</h1><blockquote><p>某些情况下安装 run 包会提示 Can’t locate InstallUtils.pm ，报错提示如下</p></blockquote><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">Can&#39;t locate InstallUtils.pm in @INC (you may need to install the InstallUtils module) (@INC contains: &#x2F;etc&#x2F;perl &#x2F;usr&#x2F;local&#x2F;lib&#x2F;x86_64-linux-gnu&#x2F;perl&#x2F;5.26.1 &#x2F;usr&#x2F;local&#x2F;share&#x2F;perl&#x2F;5.26.1 &#x2F;usr&#x2F;lib&#x2F;x86_64-linux-gnu&#x2F;perl5&#x2F;5.26 &#x2F;usr&#x2F;share&#x2F;perl5 &#x2F;usr&#x2F;lib&#x2F;x86_64-linux-gnu&#x2F;perl&#x2F;5.26 &#x2F;usr&#x2F;share&#x2F;perl&#x2F;5.26 &#x2F;usr&#x2F;local&#x2F;lib&#x2F;site_perl &#x2F;usr&#x2F;lib&#x2F;x86_64-linux-gnu&#x2F;perl-base) at .&#x2F;install-sdk-linux.pl line 6.</span><br><span class="line"> </span><br><span class="line">BEGIN failed--compilation aborted at .&#x2F;install-sdk-linux.pl line 6.</span><br><span class="line"> </span><br><span class="line">&#39;uninstall_cuda_8.0.pl&#39; -&gt; &#39;&#x2F;usr&#x2F;local&#x2F;cuda-8.0&#x2F;bin&#x2F;uninstall_cuda_8.0.pl&#39;</span><br></pre></td></tr></table></figure><p>出现上述问题的原因就是 InstallUtils.pm 文件没有复制到指定的位置，解决方案也很简单安装本文最开始的使用 noexec 将对应的 run 包解压，拷贝 InstallUtils.pm 到 @INC contains 的某个目录下就可以。</p><p>例如 可以拷贝到 perl 的目录下：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">cp InstallUtils.pm &#x2F;usr&#x2F;share&#x2F;perl5</span><br></pre></td></tr></table></figure><p>在重新执行 run 包即可。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;本文基于最新的 CUDA 10.0 CentOS 7 操作系统的 run 文件安装包来进行解压分析，看看里边都有些什么内容。有些可能遇到的问题放在最后的 FAQ 里了。CUDA 9.x 会和10.0 有一些差别，不过大部分还是比较接近的。&lt;/p&gt;
&lt;p&gt;CUDA 的源代码在 &lt;a href=&quot;https://developer.download.nvidia.cn/compute/cuda/opensource/10.0.130/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer.download.nvidia.cn/compute/cuda/opensource/10.0.130/&lt;/a&gt;&lt;/p&gt;
    
    </summary>
    
    
      <category term="GPU" scheme="https://erdong.site/categories/GPU/"/>
    
    
      <category term="cuda" scheme="https://erdong.site/tags/cuda/"/>
    
  </entry>
  
  <entry>
    <title>【翻译】Prometheus 2.7.0 新特性</title>
    <link href="https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-7-0.html"/>
    <id>https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-7-0.html</id>
    <published>2019-01-29T22:09:34.000Z</published>
    <updated>2019-10-14T11:10:03.128Z</updated>
    
    <content type="html"><![CDATA[<p>Prometheus <a href="https://github.com/prometheus/prometheus/releases/tag/v2.7.0" target="_blank" rel="noopener">2.7.0</a> 现在(2019.01.28)已经发布，在上个月的 <a href="http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-6-0.html">2.6.0</a> 之后又进行了一些修正和改进。</p><a id="more"></a><p>首先，在 2.6.0 中对的 Docker 文件更改被还原回 2.5.0 中的设置，因为它产生了意外的影响。如果您已经更新了 2.6.0 更改的设置，那么您可能希望使用 2.7.0 进行恢复。</p><p>TSDB 为 blocks 添加了实验性 size-based 的保留，time-based 的保留也适用。我还对某些选择器进行了性能改进，虽然这并不是普罗米修斯的技术性变化，但 tsdbutil 现在有了一个 analyze 子命令，可以帮助确定哪些内容占用了空间并造成了混乱。</p><p>PromQL 添加了子查询支持，因此对于特殊查询，您不再需要遵循 PromQL 中的组合范围向量函数。除了其他每个规则组指标外，现在还有一个<code>rule_group_rules_loaded</code>指标。</p><p>对于服务发现，Azure现在可以进行托管身份验证，还可以获得租户和订阅ID元数据。OpenStack现在支持应用程序凭据。Consul added service 标记地址元数据 ，Consul gained servic 标记地址元数据 。</p><p>在API/UI方面，现在可以控制允许哪些CORS源。</p><p>还有许多改进、bug修复和其他更改，可以查看 <a href="https://github.com/prometheus/prometheus/releases/tag/v2.7.0" target="_blank" rel="noopener">release notes</a> 来获取更多的信息。</p><h1 id="原文链接"><a href="#原文链接" class="headerlink" title="原文链接"></a>原文链接</h1><ul><li><a href="https://www.robustperception.io/new-features-in-prometheus-2-7-0" target="_blank" rel="noopener">https://www.robustperception.io/new-features-in-prometheus-2-7-0</a> ， By Brian Brazil</li></ul><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Prometheus &lt;a href=&quot;https://github.com/prometheus/prometheus/releases/tag/v2.7.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2.7.0&lt;/a&gt; 现在(2019.01.28)已经发布，在上个月的 &lt;a href=&quot;http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-6-0.html&quot;&gt;2.6.0&lt;/a&gt; 之后又进行了一些修正和改进。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="New-Features" scheme="https://erdong.site/categories/Prometheus/New-Features/"/>
    
    
      <category term="Prometheus" scheme="https://erdong.site/tags/Prometheus/"/>
    
      <category term="Features" scheme="https://erdong.site/tags/Features/"/>
    
      <category term="release" scheme="https://erdong.site/tags/release/"/>
    
  </entry>
  
  <entry>
    <title>计算机中遇到的单位该怎么换算</title>
    <link href="https://erdong.site/linux/system/computer-unit-conversion.html"/>
    <id>https://erdong.site/linux/system/computer-unit-conversion.html</id>
    <published>2019-01-29T01:39:21.000Z</published>
    <updated>2019-10-14T11:06:11.994Z</updated>
    
    <content type="html"><![CDATA[<p>在计算机行业经常进行单位换算，这些单位到底该怎么换算，通过本文来说明一下。</p><a id="more"></a><p>** bit **</p><p>bit 是字长，意思是一个字所包含二进制输的位数，一个 bit 存放一位二进制数，即 0 或 1，最小的存储单位，简写为 b 。字长越长，运算速度越快，计算精度越高</p><p>** byte **</p><p>byte 是字节，计算机中处理信息的最小单位，以八位二进制信息，简写为 B 。</p><p>byte 和 bit 之间的换算是 8 ，原因是一个字节需要 8个字长</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">1 byte &#x3D; 8 bit</span><br><span class="line"></span><br><span class="line">或者</span><br><span class="line"></span><br><span class="line">1 B &#x3D; 8 b</span><br></pre></td></tr></table></figure><p>** K M G T P E 是什么**</p><p>K M G T P E 等是国际单位制(SI)中所规定的词头(prefix)。词头加在SI单位(非SI单位也可以使用并通常遵循此用法)之前表示10的整数幂次，譬如k表示10^3=1000，M表示10^6=1,000,000，G则表示10^9=1,000,000,000. </p><p>举些例子，1kg=1000g，1km=1000m, 都是大家所熟悉的用法 。</p><p>那我们接下来看这些单位怎么换算。</p><h2 id="CPU-主频单位换算"><a href="#CPU-主频单位换算" class="headerlink" title="CPU 主频单位换算"></a>CPU 主频单位换算</h2><p>在计算机的使用过程中，我们会经常用到 CPU 的主频，那么主频是怎么换算呢？</p><p>所谓CPU的主频，就是说这块CPU的工作频率，也就是说这块CPU是在以哪个频率在进行运算处理。CPU的工作频率单位是以Hz（赫）计量，随着科技发展，CPU的制造工艺越来越先进，其主频也得到大幅度提升。现今，虽然CPU主频的计量单位Hz（赫）没变，但我们往往都会在单位前面加上M，甚至G，也就是我们常说的主频MHz（兆赫）和GHz（吉赫）。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">1 GHz &#x3D; 1000 MHz</span><br></pre></td></tr></table></figure><p>对于 CPU 来说，除了主频以外还有更重要的一个参数叫做浮点性能，有单精度和双精度，个别情况下会用到半精度，他们的单位是 FLOPS，那么浮点性能的单位怎么换算呢？</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">1 TFLOPS &#x3D; 1000 GFLOPS</span><br></pre></td></tr></table></figure><p>相邻两个单位之间的进制 1000 。</p><h2 id="速率单位换算"><a href="#速率单位换算" class="headerlink" title="速率单位换算"></a>速率单位换算</h2><p>我们在下载文件或者拷贝数据时经常用到一个单位 Mbps 来描述数据拷贝的快慢或者网络带宽的大小，这个 Mbps 的意思是 Mb 每秒，及在一秒内可以传输的数据量为多少 Mb ，p 的 per 的简写。</p><p>我们在一些提供下载功能的软件里经常可以看到下载是数据是 MB/s ，那么这个单位和上边的 Mbps 有什么区别呢？</p><p>区别有两点</p><ul><li>表示方法不统一。也就是说，二者同样的表示方式应该是 Mbps 和 MBps 或者 Mb/s 和 MB/s 。</li><li>b 和 B 的区别。这个我们在最开始的时候说过了，一个是字节一个是字长。</li></ul><p>那么他们应该这么换算呢？</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">1 MB&#x2F;s &#x3D; 8Mb&#x2F;s</span><br><span class="line"></span><br><span class="line">1 GB&#x2F;s &#x3D; 1024MB&#x2F;s &#x3D; 8192 Mb&#x2F;s</span><br><span class="line">1 Gb&#x2F;s &#x3D; 1024Gb&#x2F;s</span><br></pre></td></tr></table></figure><p>这样就清楚了，我们一般口头说的网络带宽的单位一般是 Mb/s , 下载文件和拷贝文件的单位一般是 MB/s ， 下次我们就可以自己换算一下了。</p><h2 id="存储单位换算"><a href="#存储单位换算" class="headerlink" title="存储单位换算"></a>存储单位换算</h2><p>我们经常看到的存储单位有 KB、MB、GB、TB、PB 等，这些单位在计算机操作系统内的换算情况是这样的</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">1 PB &#x3D; 1024 TB</span><br><span class="line">1 TB &#x3D; 1024 GB</span><br><span class="line">1 GB &#x3D; 1024 MB</span><br><span class="line">1 MB &#x3D; 1024 KB</span><br><span class="line">1 KB &#x3D; 1024 B</span><br></pre></td></tr></table></figure><p>在硬盘厂商的宣传里是这样的</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">1 PB &#x3D; 1000 TB</span><br><span class="line">1 TB &#x3D; 1000 GB</span><br><span class="line">1 GB &#x3D; 1000 MB</span><br><span class="line">1 MB &#x3D; 1000 KB</span><br><span class="line">1 KB &#x3D; 1000 B</span><br></pre></td></tr></table></figure><p>造成这种差异的原因是，起先计算机的存储容量低到可怜，几千个 Byte 算是很奢侈的容量，由于计算机的二进制特性，这个容量通常是 2 的整数次幂，用起来不方便。IT工程师们发现 2^10=1024 与 k=10^3 接近，相差不过 2%。于是就有人偷懒以 1kB 表示 2^10B 也就是1024B，初看起来一切都好，2% 的差距并不大，时间长了大家也就接受了。</p><p>但问题在于，随着计算机的存储容量依摩尔定律(Moore’s Law)以指数增长，这个差值会越来越大。1kB与1KiB(稍后解释)相差不过2%，1MB 与 1MiB 相差近 5%，1GB 与 1GiB 相差7%，1TB 和 1TiB 足足差了10%。可以预见，随着硬盘容量的进一步扩大，这个差别会越来越大。</p><p>时至今日，在IT业中已经形成了这种混乱的局面，为了解决这个混乱的局面，还是有人做过努力。早在 1998 年 SI 手册中明确要求 SI 词头不应用于 2 的幂次。而同年国际电工委员会(IEC)推出了一套适用于2进制的词头，并且得到了 IEEE 的批准 (IEEE 1541)——不过这还是一个试用的标准。简单来说就是在 SI 词头后加”i”。比如说 K 就成了 Ki，M 成了 Mi，G 成了 Gi。发音把原来SI词头的第二个音节换成[bi]。譬如Ki念 [kibi]，Mi念[mebi],Gi则是[Gibi]等等依此类推。这样，kMG 之类的的 SI 词头回复原来的含义，表示2幂次重任就交给了 Ki= 2^10=1024，Mi=2^20=1048576，Gi=2^30=1073741824 等等。这么一来，当表述一台电脑是3.15GHz CPU/2GiB内存/320GB硬盘时，G/Gi的含义就不存在歧义。</p><p>很简明易懂的解决方案，然而很不幸似乎买 IEC 帐的着实不多，目前支持IEC词头的软件屈指可数。更糟糕的是 1G=1024M 这种约定俗成的错误观念已经根深蒂固。</p><h2 id="进制的选择依据"><a href="#进制的选择依据" class="headerlink" title="进制的选择依据"></a>进制的选择依据</h2><p>看了上边各项单位的换算，不知道大家有没有发现什么规律。</p><p>在计算机里相邻两个单位之间的换算有 1000 和 1024 ，那么什么时候是1000，什么时候是 1024 ？</p><p>其实，一般的换算按照国际单位制(SI) 的规定，相邻两个单位之间的换算是 1000 。</p><p>那么什么时候用 1024 呢？</p><p>那就是单位里含有 byte 或者 bit 的时候，用 1024 来进行换算。其实按照 IEC 的规定，使用 Mi 和 M 进行区分就不会有这样的歧义和疑惑了。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;在计算机行业经常进行单位换算，这些单位到底该怎么换算，通过本文来说明一下。&lt;/p&gt;
    
    </summary>
    
    
      <category term="linux" scheme="https://erdong.site/categories/linux/"/>
    
      <category term="system" scheme="https://erdong.site/categories/linux/system/"/>
    
    
      <category term="unit" scheme="https://erdong.site/tags/unit/"/>
    
      <category term="conversion" scheme="https://erdong.site/tags/conversion/"/>
    
  </entry>
  
  <entry>
    <title>第04周分享</title>
    <link href="https://erdong.site/weekly/weekly04.html"/>
    <id>https://erdong.site/weekly/weekly04.html</id>
    <published>2019-01-26T00:47:50.000Z</published>
    <updated>2019-10-14T11:15:32.347Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="新闻"><a href="#新闻" class="headerlink" title="新闻"></a>新闻</h1><h2 id="1-InfluxDB-2-0"><a href="#1-InfluxDB-2-0" class="headerlink" title="1. InfluxDB 2.0"></a>1. <a href="https://v2.docs.influxdata.com/v2.0/get-started/" target="_blank" rel="noopener">InfluxDB 2.0</a></h2><p>Infoq 对该事件的报到： <a href="https://www.infoq.cn/article/662MdX6QNzcL-5D4axKb" target="_blank" rel="noopener">https://www.infoq.cn/article/662MdX6QNzcL-5D4axKb</a></p><p>InfluxDB 2.0 alpha 发布，更像 Prometheus 了。在2.0 版本中支持 Prometheus 格式，支持 PromQL 语言查询。</p><h1 id="工具"><a href="#工具" class="headerlink" title="工具"></a>工具</h1><h2 id="1-wondershaper"><a href="#1-wondershaper" class="headerlink" title="1. wondershaper"></a>1. <a href="https://github.com/magnific0/wondershaper" target="_blank" rel="noopener">wondershaper</a></h2><p>一个命令行下限制本地网络接口的传入和传出流量的工具，及其简单易用，本质是一个 shell 脚本，通过 iproute 的 tc 命令来实现，建议从 github 上下载最新版进行使用，系统和仓库里带的老版本使用效果上比新版本差一些。</p><p><a href="https://www.linuxidc.com/Linux/2018-10/154645.htm" target="_blank" rel="noopener">https://www.linuxidc.com/Linux/2018-10/154645.htm</a></p><h1 id="资源"><a href="#资源" class="headerlink" title="资源"></a>资源</h1><h2 id="1-晶格化图片"><a href="#1-晶格化图片" class="headerlink" title="1. 晶格化图片"></a>1. <a href="http://www.conceptfarm.ca/2013/portfolio/image-triangulator/" target="_blank" rel="noopener">晶格化图片</a></h2><p>手机里自带很多拍照特效，如果觉得不合适，那么这个晶格化特效一定会让你眼前一亮，做微信头像，做照片墙都非常不错。</p><p>彩色几何色块风格的设计正式名称叫做 Low Poly 3D，翻译过来叫做低面设计或低多边形设计。</p><p>低多边形最初起源于 3D 建模，通常设计师会运用大量的多边形来让 3D 模型 (譬如人物) 的线条更圆润自然，看起来更接近真实。然而，低多边形设计却是反道而行，它使用少量的多边形来表现出棱角分明的矢量晶格化艺术风格，让图片看起来有点像折纸工艺品，极具简约的现代感……</p><p>搜索 image triangulator 会有很多相同风格的图片。官方在contact 里的图片如下：</p><p><img src="http://www.conceptfarm.ca/2013/wp-content/uploads/2012/09/PigeonFinal.jpg" alt=""></p><h2 id="2-AutoDraw"><a href="#2-AutoDraw" class="headerlink" title="2. AutoDraw"></a>2. <a href="https://www.autodraw.com" target="_blank" rel="noopener">AutoDraw</a></h2><p>Google 出品，脑洞逆天。AutoDraw 是谷歌推出的深度学习项目，类似一个你画我猜的东西，可以说是业余设计者的福音，你随便画几笔，他就知道你要画什么，还会给你神补全。</p><h2 id="3-人工智能图片放大"><a href="#3-人工智能图片放大" class="headerlink" title="3. 人工智能图片放大"></a>3. <a href="http://bigjpg.com" target="_blank" rel="noopener">人工智能图片放大</a></h2><p>使用最新人工智能深度学习技术——深度卷积神经网络（Deep Convolutional Neural Networks, based on waifu2x）。它会将噪点和锯齿的部分进行补充，实现图片的无损放大。<br>动漫、插画图片的放大几乎可以说是完美的。将小图片放大后，无论是色彩、细节、边缘，效果都很出色。同时也兼容普通的照片放大。</p><h2 id="4-人工智能抠图"><a href="#4-人工智能抠图" class="headerlink" title="4. 人工智能抠图"></a>4. <a href="https://www.remove.bg" target="_blank" rel="noopener">人工智能抠图</a></h2><p>remove  是一个人工智能抠图工具，尽管现在很多人工智能的应用都是噱头，但是这个抠图工具一定会让你给一个大大的服字！即便是在背景较复杂的图片中，人物也能够被很好地抠出来，废话不说，看效果：</p><p><img src="https://www.remove.bg/images/samples/combined/s4.jpg" alt="源站图片，可能比较慢"></p><h2 id="5-你真的会高效的在GitHub搜索开源项目吗"><a href="#5-你真的会高效的在GitHub搜索开源项目吗" class="headerlink" title="5. 你真的会高效的在GitHub搜索开源项目吗?"></a>5. <a href="https://zhuanlan.zhihu.com/p/55294261" target="_blank" rel="noopener">你真的会高效的在GitHub搜索开源项目吗?</a></h2><p>本文首发于微信公众号「Tomcat那些事儿」，作者<a href="https://zhuanlan.zhihu.com/p/55294261" target="_blank" rel="noopener">知乎文章链接</a> , CSDN <a href="https://blog.csdn.net/csdnnews/article/details/86570635" target="_blank" rel="noopener">转载链接</a></p><p>作者用简单的实例和清晰的文风向大家介绍了如何高效的在 Github 搜索开源项目，提高大家的搜索效率。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
  </entry>
  
  <entry>
    <title>IB 速率 SDR DDR QDR FDR EDR 缩写介绍</title>
    <link href="https://erdong.site/tools/ib-speed.html"/>
    <id>https://erdong.site/tools/ib-speed.html</id>
    <published>2019-01-26T00:44:50.000Z</published>
    <updated>2019-10-14T11:07:28.636Z</updated>
    
    <content type="html"><![CDATA[<p>InfiniBand（直译为“无限带宽”技术，缩写为IB）是一个用于高性能计算的计算机网络通信标准，它具有极高的吞吐量和极低的延迟，用于计算机与计算机之间的数据互连。InfiniBand也用作服务器与存储系统之间的直接或交换互连，以及存储系统之间的互连。</p><a id="more"></a><p>Link Speed<br>SDR – Single Data Rate - 2.5Gb/s per lane (10Gb/s for 4x)<br>DDR – Double Data Rate - 5Gb/s per lane (20Gb/s for 4x)<br>QDR – Quad Data Rate - 10Gb/s per lane (40Gb/s for 4x)<br>FDR – Fourteen Data Rate - 14Gb/s per lane (56Gb/s for 4x)<br>EDR – Enhanced Data rate - 25Gb/s per lane (100Gb/s for 4x)</p><p>关于 IB 的介绍可以查看该文档 </p><p><a href="https://hpc.uiowa.edu/sites/hpc.uiowa.edu/files/Infiniband%20Overview.pdf" target="_blank" rel="noopener">Infiniband Overview</a></p><p><a href="https://mp.weixin.qq.com/s/6ifysnYjZptorr3RBv9ASw" target="_blank" rel="noopener">一文掌握InfiniBand技术和架构</a></p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;InfiniBand（直译为“无限带宽”技术，缩写为IB）是一个用于高性能计算的计算机网络通信标准，它具有极高的吞吐量和极低的延迟，用于计算机与计算机之间的数据互连。InfiniBand也用作服务器与存储系统之间的直接或交换互连，以及存储系统之间的互连。&lt;/p&gt;
    
    </summary>
    
    
      <category term="tools" scheme="https://erdong.site/categories/tools/"/>
    
    
      <category term="ib" scheme="https://erdong.site/tags/ib/"/>
    
  </entry>
  
  <entry>
    <title>第03周分享</title>
    <link href="https://erdong.site/weekly/weekly03.html"/>
    <id>https://erdong.site/weekly/weekly03.html</id>
    <published>2019-01-19T17:49:48.000Z</published>
    <updated>2019-10-14T11:15:20.418Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="新闻"><a href="#新闻" class="headerlink" title="新闻"></a>新闻</h1><h2 id="1-ZFS-On-Linux-在-Linux-Kernel-5-0-上陷入了困境……"><a href="#1-ZFS-On-Linux-在-Linux-Kernel-5-0-上陷入了困境……" class="headerlink" title="1. ZFS On Linux 在 Linux Kernel 5.0 上陷入了困境……"></a>1. <a href="https://www.oschina.net/news/103578/zfs-on-linux-5-0-problem" target="_blank" rel="noopener">ZFS On Linux 在 Linux Kernel 5.0 上陷入了困境……</a></h2><p>Linux Kernel 5.0 首个 RC 版已发布，5.0 是一个重要的版本，带来了许多相当吸引人的新功能和改进，但对于那些依赖 ZFS On Linux (ZOL) 的用户，他们可能暂时不会希望尝鲜使用 Linux Kernel 5.0 的候选发布版本。</p><h2 id="2-Homebrew-1-9-发布"><a href="#2-Homebrew-1-9-发布" class="headerlink" title="2. Homebrew 1.9 发布"></a>2. <a href="https://www.infoq.cn/article/UjpE7pQTefQCM3dli*Pg" target="_blank" rel="noopener">Homebrew 1.9 发布</a></h2><p>Homebrew 1.9 版本于 1 月 9 日更新，距离 1.8 版本大约两个多月。1.9 版本最大的变化是开始尝试支持 Linux 和 Windows 10 。</p><h2 id="3-scp-客户端发现了隐藏-35-年的漏洞"><a href="#3-scp-客户端发现了隐藏-35-年的漏洞" class="headerlink" title="3. scp 客户端发现了隐藏 35 年的漏洞"></a>3. <a href="https://sintonen.fi/advisories/scp-client-multiple-vulnerabilities.txt" target="_blank" rel="noopener">scp 客户端发现了隐藏 35 年的漏洞</a></h2><p>SCP 的客户端发现了漏洞，大家可以检查一下自己常用的工具，升级一下。</p><h1 id="工具"><a href="#工具" class="headerlink" title="工具"></a>工具</h1><h2 id="1-juicesync"><a href="#1-juicesync" class="headerlink" title="1. juicesync"></a>1. <a href="https://github.com/juicedata/juicesync" target="_blank" rel="noopener">juicesync</a></h2><p>一个多云迁移工具，在多个云之间进行数据迁移的时候可以用到。</p><h2 id="2-domcomp"><a href="#2-domcomp" class="headerlink" title="2. domcomp"></a>2. <a href="https://www.domcomp.com" target="_blank" rel="noopener">domcomp</a></h2><p>一个域名比价网站，注册域名的时候对价格比较敏感的话可以对比一下。</p><h2 id="3-auth0"><a href="#3-auth0" class="headerlink" title="3. auth0"></a>3. <a href="https://auth0.com/blog/auth0-architecture-running-in-multiple-cloud-providers-and-regions/" target="_blank" rel="noopener">auth0</a></h2><p>Auth0为任何栈上的任何类型(移动、web、本机)的应用程序提供身份验证、授权和单点登录服务。对于绝大多数应用程序来说，身份验证是至关重要的。我们从一开始就设计了Auth0，这样它就可以在任何地方运行:在我们的云上，在您的云上，甚至在您自己的私有基础设施上。</p><h1 id="资源"><a href="#资源" class="headerlink" title="资源"></a>资源</h1><h2 id="1-10年博客的经验"><a href="#1-10年博客的经验" class="headerlink" title="1. 10年博客的经验"></a>1. 10年博客的经验</h2><p>原文<br><a href="https://ferrucc.io/posts/starting-a-blog/" target="_blank" rel="noopener">https://ferrucc.io/posts/starting-a-blog/</a></p><p>中文译文<br><a href="https://erdong.site/article/starting-a-blog.html">https://erdong.site/article/starting-a-blog.html</a></p><p>作者 Ferruccio 写博客已经超过10年，文中讲述了他在博客网站的经验，还有他的朋友对这件事的建议，对于想要搭建博客的同学很有帮助。</p><h2 id="2-收录各种好用的-Mac-软件"><a href="#2-收录各种好用的-Mac-软件" class="headerlink" title="2. 收录各种好用的 Mac 软件"></a>2. 收录各种好用的 Mac 软件</h2><p><a href="https://github.com/jaywcjlove/awesome-mac/blob/master/README-zh.md" target="_blank" rel="noopener">https://github.com/jaywcjlove/awesome-mac/blob/master/README-zh.md</a></p><p>如果你是一个 macOS 用户，那么各种用途的软件是必不可少的，这个链接里或许可以找到你需要的。</p><h2 id="3-The-Two-Types-of-Programmers"><a href="#3-The-Two-Types-of-Programmers" class="headerlink" title="3. The Two Types of Programmers"></a>3. <a href="https://blog.codinghorror.com/the-two-types-of-programmers/?utm_source=wanqu.co&utm_campaign=Wanqu+Daily&utm_medium=website" target="_blank" rel="noopener">The Two Types of Programmers</a></h2><p>2007年的老文章。世界上只有两种类型的程序员：20% 与 80%。所谓 20% 的程序员：用各种开源工具，紧跟最新技术发展。而 80% 的程序员是：编程是份工作，只用微软大礼包或者Java大礼包，不想知道外面的世界。</p><p>20% 的程序员不知道有其他 80% 程序员的存在（难道不是每个程序员都用 git？难道不是每个程序员都用 php、pyhon、ruby？都什么年代了，还有人用 .net 或 java？）；同样，80% 程序员也不知道其他 20% 程序员的存在（还有人在下班后去编程做自己的项目？难道不都是用 .net 或 java？）。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
  </entry>
  
  <entry>
    <title>【翻译】10年博客的经验</title>
    <link href="https://erdong.site/article/starting-a-blog.html"/>
    <id>https://erdong.site/article/starting-a-blog.html</id>
    <published>2019-01-18T01:42:15.000Z</published>
    <updated>2019-10-14T11:13:25.358Z</updated>
    
    <content type="html"><![CDATA[<p>我21岁，但我写博客已经快10年了。</p><p>我就是这样长大的。</p><a id="more"></a><p>我在互联网上写的东西已经影响了数百万人。我所写的大部分都是意大利语，但我用英语也可以写的很好。我在 Quora [译者注：一个获取和分享知识的地方。它是一个提问的平台，可以与那些提供独特见解和高质量答案的人联系。类似于国内的知乎] 上三个月内达到了40万人的关注。</p><p>通过写博客，我有机会周游世界，获得所有大型音乐节(Ultra, Tomorrowland……你能想到的都有)的免费门票，得到专业的宣传，采访我最喜欢的艺术家。</p><p>以下是我第一个博客 <a href="http://edmnews.it/" target="_blank" rel="noopener">EDMnews.it</a> ，现在我只能找到这个了，其他的域名过期了。</p><p><img src="https://ferrucc.io/starting-a-blog/edmnews-views.png" alt="图片描述"></p><p>最后，由于我没有时间写博客了，我的个人兴趣也从 EDM 转移到了这个网站，它也被同化成了EDM，它是一个谷歌的新闻来源，一个月的浏览量超过10万次。</p><p>因为我的网站使用 Wordpress，我被迫学习如何编程。如果没有写博客，我就不会是今天的我。</p><p>我发现写博客仍然是把你的信息传播出去，结识有趣的人的最好方法。</p><h1 id="打开天窗说亮话"><a href="#打开天窗说亮话" class="headerlink" title="打开天窗说亮话"></a><strong>打开天窗说亮话</strong></h1><p>以下是我对博客的全部了解:</p><ul><li>不要把第一行写得太长让人不想看，没人有时间读你这样的文章</li><li>网站的设计并不重要</li><li>开始的时候你不需要任何的软件</li><li>定义你的受众群体</li><li>弄清楚你的受众群体在哪里</li><li>为了SEO（Search Engine Optimization，搜索引擎优化）不要写短文章（&gt;2000 words）</li><li>一篇研究充分的文章胜过许多平庸的内容</li><li>花一半的时间写作，一半的时间推销。</li><li>把50%的写作时间花在实际写作上，剩下的时间用来调整、阅读和说明。细节是很重要的。</li><li>说出你知道的所有，不要担心你会江郎才尽，你不会的</li><li>没有规则，慢慢打造你独特的风格</li><li>回到你以前的帖子，把它们链接到新的上去</li><li>启动一个 Newsletter</li><li>做别人不敢做的事</li><li>向别人寻求帮助或提供建议</li></ul><p>精心制作一些真正能深入读者心灵的永恒的东西是困难的，但值得去做。</p><p>大多数时候，当你读一些东西的时候，你已经知道了一切。</p><p>10%的情况下，事情是不一样的，你觉得你的头脑中有一个开关打开了，突然看到了不同的东西。</p><p>当我找到让我有这种感觉的内容时，我会每天刷新网站的页面，检查我是否错过了一些新内容。像武痴那样疯狂。</p><p>这就是我们想要的，例如:</p><p>“这很有启发性，它在我的脑海中打开了一个充满可能性的世界。”</p><p>“我一直这么想，但没有勇气把它写下来，谢谢你这么做。”</p><p>“你的话让我终于明白了X没什么大不了的，谢谢。”</p><p>让我们一起来学习如何让这一切发生。</p><h1 id="受众人群"><a href="#受众人群" class="headerlink" title="受众人群"></a>受众人群</h1><p>创建博客的第一步是确定谁是你的读者。我认识的大多数人都会跳过这一步，但这很重要。脱口而出一些单词并在社交媒体上分享它们是很容易的。要创作出与你想接触的人产生共鸣的文章，难度要大得多。</p><p>为了解释如何做到这一点，我将向您展示我现在是如何为这个个人博客做这件事的。</p><p>直到现在，我用这个博客来帮助我思考，但在新的一年里，我决定更认真地对待它。</p><p>我的目标是什么?</p><p>这是我的个人博客。</p><p>它是一个 “个人” 博客并不意味着它是关于我的。</p><p>事实上，这意味着我能为你提供什么。</p><p>我的第一个实用技巧与此相关:</p><p>你博客里的“关于”页面必须是关于你能如何帮助别人，以及人们能从你那里得到什么。然后最终</p><p>关于你……</p><p>但说实话，没人在乎你，也没人在乎我。</p><p>我的受众人群是什么?</p><p>如果你要为你的公司创建一个博客，你必须了解你的客户通常是谁，或者哪些客户是你的理想受众并迎合他们。</p><p>以下是对我的现实读者的描述:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">你的名字是 Vincent，你是一个30岁的多面手，来自法国，你在工作日不会花很长的时间工作。</span><br><span class="line">你花了一些时间远程工作，但现在在美国很稳定。你已经开始了数不清的项目，有些项目是成功的。</span><br><span class="line">你对任何不寻常的东西都感兴趣，你天生就是一个逆向投资者。</span><br><span class="line">你从不回避争论，也从不被冒犯。你并不是真的对退休感兴趣，你更感兴趣的是尝试。</span><br><span class="line">有些人认为你是个混蛋，你一点也不在乎。</span><br></pre></td></tr></table></figure><p>一旦你定义了你的受众，你必须<del>弄清楚它是否足够大</del>。</p><p>拜托，这是互联网，别担心，它已经足够大了。</p><p>事实上，如果它对你来说足够大的话，我会考虑小众化。</p><h1 id="名字"><a href="#名字" class="headerlink" title="名字"></a>名字</h1><p>下一步是选择一个名字，这并不重要，只要确定它是你喜欢的，而且它不是太普通或不可能记住。不要在这上面花超过一天的时间，一旦你找到了一个名字，在确定下来之前，至少要睡上一晚。</p><p>在我的例子中，我选择了我的名字 Ferruccio 作为域名，因为我的名字非常罕见，而且我已经拥有了 ferrucc.io 域名。</p><p>不利的一面是，美国人不知道该怎么说，但我对此没有意见。这当然比某些印度名字更容易记住。</p><h1 id="风格"><a href="#风格" class="headerlink" title="风格"></a>风格</h1><p>你博客的风格，比如它的外观，在一开始并不重要。</p><p>另一方面，你的写作风格会带来很大的不同。</p><p>根据你的听众是谁，你必须调整谈话的语气。</p><p>例如，当我选择一个比我年长、经验丰富的人作为目标受众时，如果我的语气是 “无所不知”，那就没有意义了。我的听众不是以英语为母语的人，所以我不会让我的语言变得复杂，我将限制我的词汇量，以尽可能地清晰易懂。</p><p>如果你真的想做一些独特的东西，你可以做的一件事是在你的风格自定义插图。在你的博客里有一个连贯的插图风格可以让人们记住你。</p><p>除了大型企业的博客, <a href="https://waitbutwhy.com/" target="_blank" rel="noopener">Wait But Why</a>做得很好。</p><p>如果你不擅长绘画，学习如何使用 <a href="https://www.sketchapp.com" target="_blank" rel="noopener">Sketch</a>或 <a href="https://www.figma.com" target="_blank" rel="noopener">Figma</a>。</p><p>我仍然在为这个网站上的插图设计风格，但我认为它会是这样的: </p><p><img src="https://ferrucc.io/starting-a-blog/chat.png" alt="chat"></p><p>我有点痴迷于设计，但插图只是你可以做的脱颖而出的事情之一。</p><p>如果你是一名软件开发者，你可以尝试让你的文章里的小程序和用户是可以以可视化的方式交互式的互动。</p><p><a href="https://twitter.com/nealagarwal" target="_blank" rel="noopener">Neal Agarawall</a>的博客 <a href="https://neal.fun" target="_blank" rel="noopener">neal.fun</a> 就是一个很好的例子。看看他做的这个彩票模拟器，直观地解释了为什么赌博是一个坏主意:</p><p><img src="https://ferrucc.io/starting-a-blog/powerball.gif" alt=""></p><p>另一个例子是我创建的<a href="https://lab-cryptotrend.herokuapp.com/" target="_blank" rel="noopener">blockchain simulator</a>(意大利语)，它是我不久前创建的一个意大利加密货币博客的促销产品，一个月内增长到了10k。我还为这幅画创作了独特的插图。</p><p>如果你不具备以上任何一项技能，你可以通过实践来学习，也可以让一切都保持简单，只关注文本内容。为了证明你不需要做这些事情，这里有一些丑陋的博客与伟大的内容:</p><ul><li><a href="http://www.paulgraham.com/articles.html" target="_blank" rel="noopener">Paul Graham’s Blog</a></li><li><a href="https://www.kalzumeus.com/" target="_blank" rel="noopener">Patio11’s Blog</a></li><li><a href="https://sivers.org/" target="_blank" rel="noopener">Derek Sivers’s Blog</a></li><li><a href="https://www.gwern.net/" target="_blank" rel="noopener">Gwern’s blog</a></li></ul><p>以下是Gwern博客的样子:</p><p><img src="https://ferrucc.io/starting-a-blog/gwern-ugly.png" alt=""></p><p>有插图并不重要，但我可以把它们画出来，用视觉来表达我的信息，这一点帮助我脱颖而出。</p><p>所以，找到一些独特的你可以做的，并把它添加到你的网站! <strong>例如，一个不需要特殊技能的想法是添加一个帖子的音频版本。</strong></p><h1 id="写作过程"><a href="#写作过程" class="headerlink" title="写作过程"></a>写作过程</h1><p>在了解了博客的所有基础知识之后，你就可以开始写作了。</p><p>最好的方法是集思广益，想出几个你的读者感兴趣的题目，最好也是你感兴趣的题目，然后开始写作。<br>标题并不一定要描述文章的内容。</p><p>挑选文章标题的一个好方法是使用 <a href="https://en.wikipedia.org/wiki/E._Haldeman-Julius" target="_blank" rel="noopener">Julius Haldeman</a> 20世纪20年代的著作《第一个一亿》(“<a href="https://ferrucc.io/posts/old-school-marketers/" target="_blank" rel="noopener">The First Hundred Million</a>”)的内容。</p><p>显然，你的文章不可能完全脱离主题，但你的目标必须是吸引读者和提供信息。</p><p>根据你的目标读者在哪里，你也必须弄清楚你的文章应该是什么样的。例如，如果你的目标读者在subreddit 上，你可以写700-800字的帖子。</p><p>如果你想在搜索引擎上取得成功，你可能想让你的内容更长。<br>这里有一些数据显示了理想的字数:</p><p><img src="https://ferrucc.io/starting-a-blog/shares-data.png" alt=""></p><p>正如你所看到的，在大于 1000 字范围内的文章得到的分享比短内容多得多。超过 3000 字的分数看起来(字数)/(分享)的奖励开始减少，但没有严格的规则，做你认为合适的就可以。</p><p>你不能忽视的是，较长的内容显然与更多的集中的流量相关:</p><p><img src="https://ferrucc.io/starting-a-blog/hubspot.png" alt=""></p><p>所以我的建议是，如果你想让你的博客成长，那就写长点的内容。</p><p>但是这种相关性也可能是由外部因素造成的。也许写更长的文章平均需要更多的研究，以确保更高质量的内容，从而更多的共享。</p><p>如果你不知道如何写博客，你可以搜索你喜欢的文章，目标读者，解构他们试图找出一个重复的主题或模板结构，你可以遵循。</p><p>您的博客文章将是一个私人的事情，所以我不认为我可以提供其他建议，可以帮助您。</p><p>另一方面，如果你正在创建一个公司博客，一个好的建议是写与你的产品相关的内容。</p><p>例如，我在 <a href="https://boxysuite.com/" target="_blank" rel="noopener">Boxy Suite </a> 的朋友们制作的谷歌应用是Mac OS的原生应用。</p><p>他们最近还决定为公司开设一个博客来吸引更多的客户。</p><p>在他们的案例中，博客的目标是被Gmail的高级用户发现。所以他们的博客文章会是这样的内容:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">“10条Gmail捷径最大化生产力”</span><br><span class="line">“Gmail最好的Chrome扩展”</span><br></pre></td></tr></table></figure><p>在你的文章开始的时候，有时把自己限定为一个专家也是一个好主意，展示一些你为什么谈论某事以及为什么人们应该听你说话的背景。</p><p>在很多情况下这样做都有帮助，但这并不意味着你必须这么做。</p><h1 id="修改草稿"><a href="#修改草稿" class="headerlink" title="修改草稿"></a>修改草稿</h1><p>一旦你完成写作，等待一天，开始阅读你写的所有东西，修改打字错误，删除无用的单词。</p><p>如果一个句子没有任何价值，删除它。如果一个句子太长，就把它拆开。</p><p>为了提高可读性，用粗体和斜体突出重要的单词。</p><p>有时候，像我刚才做的那样，用几个短段落引出一个长段落也是一个很好的练习。避免长句子和长段落，它们不容易吸引读者的眼球，会导致人们浏览你的内容。</p><p>一旦你完成了你的文章。再睡一晚吧。</p><p>第二天就把它寄出去。</p><p>如果你第n次读的时候感觉不舒服，那么你可能已经做得很好了。</p><h1 id="促进工作"><a href="#促进工作" class="headerlink" title="促进工作"></a>促进工作</h1><p>当你确定了你的听众，你也知道你的听众在哪里。</p><p>在允许的平台上转发你的文章，比如你所在领域的媒体和看板。</p><p>在社交媒体上分享你的内容，甚至把它发短信给你可能关心它的朋友。</p><p>另一个必须做的，就是收集读者的邮件。如果有人访问了你的网站，然后离开了，他们可能永远不会回来，除非你设法拿到了他们的电子邮件。</p><p>电子邮件很重要，因为它让你直接与人接触，减少了大型媒体公司或社交媒体算法变化对受众的影响。</p><p>同时，开始接触那些拥有类似博客的人，向他们推销客座文章。</p><p>客座文章是一个很好的机会，以挖掘更广泛的受众和获得反向链接到您的网站。</p><h1 id="来自朋友的建议"><a href="#来自朋友的建议" class="headerlink" title="来自朋友的建议"></a>来自朋友的建议</h1><p>因为我想让这篇文章成为博客上最好的资源，我决定接触一些我钦佩的人。</p><p>下面是我的朋友们给我的一些很棒的建议:</p><h2 id="Pat-Walls-of-Starter-Story"><a href="#Pat-Walls-of-Starter-Story" class="headerlink" title="Pat Walls of Starter Story"></a><a href="https://twitter.com/thepatwalls" target="_blank" rel="noopener">Pat Walls</a> of <a href="https://www.starterstory.com" target="_blank" rel="noopener">Starter Story</a></h2><p>在2018年11月的 Starter Story上 有 19,470 个 uniques.</p><p>我不做任何关键字研究。我的大部分内容都是采访，所以我让别人来写。这让我可以做得更多，因为我不需要做所有的艰苦工作的写作。我的大部分工作是确保内容是好的，并与作者合作使其更好。我主要在 Reddit 和社交媒体上推广。在 Reddit 上，我发布“case studies“，主要是将我的博客内容作为一篇自述转发到 subReddit 上。</p><p>我的内容有重复的格式这一事实是一把双刃剑。</p><p>它使我能够系统化内容创建过程。</p><p>它也伤害了我的成长，尽管人们厌倦了同样的格式。</p><h2 id="Hugo-Di-Francesco-of-Code-with-Hugo"><a href="#Hugo-Di-Francesco-of-Code-with-Hugo" class="headerlink" title="Hugo Di Francesco of Code with Hugo"></a><a href="https://twitter.com/hugo__df" target="_blank" rel="noopener">Hugo Di Francesco</a> of <a href="https://codewithhugo.com" target="_blank" rel="noopener">Code with Hugo</a></h2><p>7个月内 0-12k Unique users/month</p><p>做广告并不坏，只要你没有什么可以代替它们。</p><p>基于广告的一切会让你只关注流量，而不是流量的质量。尝试 “让我们在网站上再增加10万用户” 的问题是，10万比10或100更难。</p><p>如果你有什么东西要卖，就卖吧，广告商付钱给你，意味着他们重视你的关注，而不是他们花了多少钱(更别提在中间商和费用上浪费了多少美元)。</p><p>重视你的受众的注意力，获得广告收入，但在你有更好的东西提供之前，把它当作一根拐杖。</p><h2 id="Ethan-of-Code-The-Web"><a href="#Ethan-of-Code-The-Web" class="headerlink" title="Ethan of Code The Web"></a><a href="https://twitter.com/booligoosh" target="_blank" rel="noopener">Ethan</a> of <a href="https://codetheweb.blog/" target="_blank" rel="noopener">Code The Web</a></h2><p><strong>创建邮件列表</strong></p><p>当有人访问你的博客时，他们不太可能经常回来。除非你开始写邮件!确保从一开始就在你的博客上放置一个订阅表单。你也可以通过提供一些PDF格式的特殊内容来鼓励人们加入。</p><p>通过编写 Web 代码，我最终意识到，那些注册的人不仅希望得到新文章的通知，他们还希望学习编写代码。所以我改变了格式，把它变成了每周发送 5-10 个链接到 web 开发教程的电子邮件。我将包括我的一些旧文章，以及一个链接到我的最新文章顶部。这需要更多的努力，但我的电子邮件列表在更改之后开始增长得更快。我还在 Product Hunt 上发布了这款应用，获得了大约500个注册用户(我现在每周都能收到一些!) </p><p>有一个电子邮件列表不仅有利于参与，而且它也可以帮助很多，如果你以后决定寻找赞助商!</p><p><strong>与读者建立联系</strong></p><p>这是运行博客的一个重要(但经常被忽视)方面。记住要表现得像一个真正的人——在你的文章、电子邮件和互动中。每次有新人在我的邮件列表上注册时，我都会给他们发一封邮件，邀请他们自我介绍，并问我任何问题。我最终通过电子邮件帮助了很多人!!这会让你的读者更加忠诚，让你对你的读者有第一手的了解。它也给我带来了一些很好的反馈，其中很多都可以作为我的证明!</p><p>像这样:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">“谢谢你花时间创造了一些有用的东西。内容创造者让这个社会变得更好，尤其是当他们免费分享劳动成果的时候。”</span><br><span class="line"></span><br><span class="line">“我真的很难理解，也很难理解这一切。但在我遇到你的解释之前，我还不够自信。</span><br><span class="line">多亏了你，我觉得我终于明白了，这些概念也不像我曾经想的那么陌生。</span><br><span class="line">我现在很受鼓舞，因为我可以坚持下去，并在这个过程中掌握更多的概念!”</span><br><span class="line"></span><br><span class="line">“我希望你能在很长一段时间内继续创作出令人惊叹、易于理解的内容”</span><br></pre></td></tr></table></figure><p><strong>有大量的头脑风暴想法</strong></p><p>在我写第一篇关于 Web 代码的文章之前，我进行了一次大规模的头脑风暴。我设定了一个目标，在一天结束前写下 60 篇博文。这很难!!我试着完全去除所有的心理过滤，只有当我把它们放下来的时候，我才能判断哪些是好的，哪些是坏的。</p><p>我确保这个数字永远不会低于50。我还养成了一种习惯，一旦想法突然出现在我脑海里，我就把它们写下来。我已经超过100了!!拥有一个庞大的博客帖子想法列表真的有助于激励。不知道写些什么真的很可怕，这是你写那篇博客文章的另一个心理障碍。为了获得额外的动力，你也可以给每个想法指定一个日期，然后你就有了一个要坚持的计划!如果你跳过一个星期，你将不得不重新安排其他所有星期的内容</p><p><strong>从标题开始</strong></p><p>这个技巧与你的博客文章的实际写作有关。从空白屏幕开始常常会让人觉得难以承受。事实上，它会导致拖延症或写作障碍!为了解决这个问题，我总是从写下文章的标题开始。这让我对文章的流程有了一个大致的了解，也给了我一个计划，这样我就不太可能放弃或者不知道接下来要写什么了!事实上，我在写这篇文章的时候就用了这个技巧。</p><p><strong>博客帮助你学习</strong></p><p>这不是一个小窍门，我只是想和大家分享一下。我开始以博客的形式编写Web代码，向初学者讲授Web开发。通过这个过程，我自己成为了一个更好的web开发人员。我相信教学是最好的学习方式，通过创建一个完整的学习web开发的路径，我成功地填补了我知识中的许多空白。我学到了很多很酷的东西，比如CSS flexbox、CSS grid、CSS变量、JavaScript箭头函数等等。写博客对读者和作者都有好处!</p><h2 id="KP-of-KP"><a href="#KP-of-KP" class="headerlink" title="KP of KP"></a><a href="https://twitter.com/thisiskp_" target="_blank" rel="noopener">KP</a> of <a href="http://thisiskp.com/" target="_blank" rel="noopener">KP</a></h2><p>每年超过1000篇文章 - 每年18000 独立用户在他的新博客</p><p>确保你拥有黑客一样的动力作为突破点。创建一个简单的例程和一个清晰的重复提示。我的提示是每天早上8:30，我使用的手段是 “打开我的笔记本电脑，输入一个完整的句子” 。因为这是一个可以实现的目标，所以坚持这个习惯变得很容易。当然，我写了不止一句话，但这是一个很好的开始。</p><p><strong>为什么广告是个坏主意</strong></p><p>你网站上的广告是指以下内容。</p><p>通过一个平台(通常会保留50%的资金)的人为推广一款产品所支付的费用是你的两倍。</p><p>这些人并不傻，他们这么做是因为他们期待投资回报。据我所知，他们已经这样做了30多年，到现在还没有停止。</p><p>这意味着这些广告是有效的，即使它们的针对性很差，而且在你看来价格过高。</p><p>我的建议很简单。你比任何广告商都更了解你的读者，所以卖给他们你知道他们想要的东西。</p><p>我和 <a href="https://twitter.com/hugo__df" target="_blank" rel="noopener">Hugo Di Francesco</a> of <a href="https://codewithhugo.com" target="_blank" rel="noopener">Code with Hugo</a> 讨论过，他告诉我，对他来说，网站上的大多数广告都是有意义的。</p><p>原因如下:</p><p>“广告商承担了风险。我降低了用户交互的风险。我不需要建立信任和卖东西就能赚钱。<br>重要的是，你觉得有用的文章的作者肯定比广告商更值得信任。”</p><p>事实上，在与Hugo交谈之后，我们一起意识到他的策略在那些与他销售的东西无关的帖子上效果很好。</p><p>在与他所卖的东西相关的帖子上，他会为自己填充一个广告，而不是普通的广告。</p><p><img src="https://ferrucc.io/starting-a-blog/hugo.png" alt=""></p><h1 id="结论"><a href="#结论" class="headerlink" title="结论"></a>结论</h1><p>写博客没有任何规则。</p><p>你可以从这些年来我学到的东西中得到一些启示，或者忽略一切，以自己的方式做事。</p><p>事实上，如果你违反了规定，给我发一封邮件，把你帖子的链接发给我。我一直在寻找灵感，并着迷于那些改变规则却仍能取得成果的人。</p><p>如果你没有得到结果，重读这篇文章，找出你做错了什么。</p><h1 id="原文链接"><a href="#原文链接" class="headerlink" title="原文链接"></a>原文链接</h1><ul><li><a href="https://ferrucc.io/posts/starting-a-blog/" target="_blank" rel="noopener">https://ferrucc.io/posts/starting-a-blog/</a></li></ul><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;我21岁，但我写博客已经快10年了。&lt;/p&gt;
&lt;p&gt;我就是这样长大的。&lt;/p&gt;
    
    </summary>
    
    
      <category term="article" scheme="https://erdong.site/categories/article/"/>
    
    
      <category term="blog" scheme="https://erdong.site/tags/blog/"/>
    
  </entry>
  
  <entry>
    <title>三种方法解决域名解析的主机记录冲突</title>
    <link href="https://erdong.site/article/cname-and-mx-conflicts.html"/>
    <id>https://erdong.site/article/cname-and-mx-conflicts.html</id>
    <published>2019-01-17T01:40:25.000Z</published>
    <updated>2019-10-14T11:05:57.317Z</updated>
    
    <content type="html"><![CDATA[<p>申请域名用作网站访问添加了 CNAME 主机记录以后，又想添加邮箱的 MX 的主机记录，或者想添加 CDN 的 CNAME 记录，这时候经常会遇到主机记录冲突的问题导致添加失败。接下来我们详细分析一下。</p><a id="more"></a><h1 id="原因分析"><a href="#原因分析" class="headerlink" title="原因分析"></a>原因分析</h1><p>根据国际上互联网标准 <a href="http://tools.ietf.org/pdf/rfc1034" target="_blank" rel="noopener">RFC 1034</a> 章节3.6.2中指出：<br>If aCNAME RR is present at a node, no other data should be present; this ensuresthat the data for a canonical name and its aliases cannot be different. </p><p>大意就是说如果CNAME资源记录出现在一个域名节点，为了确保不会出现不同的解析结果，这个域名节点将不再接受其他记录值。</p><p>所以一些记录的冲突会导致主机记录值无法正常添加，究竟哪些不能冲突，可以查看阿里的<a href="https://help.aliyun.com/knowledge_detail/39787.html" target="_blank" rel="noopener">这篇文章</a> 。</p><p>知道了原因，我们就可以尝试来解决问题了，经过试验发现，解决域名的解析记录冲突有三种方法，分别是：</p><ul><li>删除其中的一条解析记录</li><li>使用跳转的方式进行解析</li><li>使用二级域名进行解析</li></ul><h1 id="删除其中的一条解析记录"><a href="#删除其中的一条解析记录" class="headerlink" title="删除其中的一条解析记录"></a>删除其中的一条解析记录</h1><p>既然发生冲突了，那么最简单的方式就是二选一，保留一条，删除一条，这样就可以恢复正常。</p><p>如果实在不愿意删除，那么可以尝试把其中一条 CNAME 的解析记录更换为 A 记录，指定到一个 IP 地址上。这样会有一个隐患发生，那就是当 IP 地址更换了以后，你的解析会中断，需要手动变更 A 记录才能恢复。不是很推荐这种方法。</p><h1 id="使用隐式CNAME进行解析"><a href="#使用隐式CNAME进行解析" class="headerlink" title="使用隐式CNAME进行解析"></a>使用隐式CNAME进行解析</h1><p>在不同的域名服务商可能有不同的叫法，比如阿里云叫 显示/隐式 URL，CloudXNS的叫做 LINK 记录。思路就是给其中的一条解析起一个名字，然后将这条解析通过 LINK 或者 URL 的方式去解析。大致操作方法如下：</p><table><thead><tr><th align="center">记录类型</th><th align="center">主机记录</th><th align="center">记录值</th></tr></thead><tbody><tr><td align="center">MX</td><td align="center">@</td><td align="center">qiye.aliyun.com</td></tr><tr><td align="center">LINK</td><td align="center">@</td><td align="center"><a href="http://www.test.com" target="_blank" rel="noopener">www.test.com</a></td></tr><tr><td align="center">CNAME</td><td align="center">www</td><td align="center">xxx.github.io</td></tr></tbody></table><h1 id="使用二级域名进行解析"><a href="#使用二级域名进行解析" class="headerlink" title="使用二级域名进行解析"></a>使用二级域名进行解析</h1><p>在分析的时候也说到了，一个域名节点只能有一个 CNAME 的解析记录，那么就可以启用二级域名，这样就不是同一个域名节点了。</p><p>而且可以不同的二级域名可以对应不同的功能服务，比如用 mail.xxx.com 来解析邮箱，用 blog.xxx.com 来映射博客访问，做好二级域名的规划，完全不用担心解析记录的冲突。</p><p>大致操作方法如下：</p><table><thead><tr><th align="center">记录类型</th><th align="center">主机记录</th><th align="center">记录值</th></tr></thead><tbody><tr><td align="center">MX</td><td align="center">mail</td><td align="center">mx1.qiye.aliyun.com</td></tr><tr><td align="center">CNAME</td><td align="center">smtp.mail</td><td align="center">smtp.qiye.aliyun.com</td></tr><tr><td align="center">CNAME</td><td align="center">imap.mail</td><td align="center">imap.qiye.aliyun.com</td></tr><tr><td align="center">CNAME</td><td align="center">pop3.mail</td><td align="center">pop.qiye.aliyun.com</td></tr><tr><td align="center">CNAME</td><td align="center">mail.mail</td><td align="center">qiye.aliyun.com</td></tr><tr><td align="center">CNAME</td><td align="center">blog</td><td align="center">xxx.github.io</td></tr></tbody></table><p>这样就把 blog.xxx.com 解析到了 github pages，把 mail.xxx.com 解析到了邮箱。<br>阿里云的邮箱详细解析见<a href="https://help.aliyun.com/knowledge_detail/36723.html" target="_blank" rel="noopener">这里</a> 。</p><p>个人比较推荐第三种方法，规划好二级域名，用二级域名来做各种功能的解析，这样可以发挥一个域名最大的作用。</p><p><a href="https://blog.skk.moe/post/about-cname-and-mx-conflicts/" target="_blank" rel="noopener">也来谈谈关于 CNAME 和 MX 冲突的一些事</a> 这篇博客也对冲突进行了一些分析，也可以参考一下</p><p>参考链接：</p><ul><li><a href="https://help.aliyun.com/knowledge_detail/39787.html" target="_blank" rel="noopener">https://help.aliyun.com/knowledge_detail/39787.html</a> ，by Aliyun</li><li><a href="https://help.aliyun.com/knowledge_detail/36723.html" target="_blank" rel="noopener">https://help.aliyun.com/knowledge_detail/36723.html</a> ，by Aliyun</li><li><a href="http://tools.ietf.org/pdf/rfc1034" target="_blank" rel="noopener">http://tools.ietf.org/pdf/rfc1034</a> ，by P. Mockapetris</li></ul><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;申请域名用作网站访问添加了 CNAME 主机记录以后，又想添加邮箱的 MX 的主机记录，或者想添加 CDN 的 CNAME 记录，这时候经常会遇到主机记录冲突的问题导致添加失败。接下来我们详细分析一下。&lt;/p&gt;
    
    </summary>
    
    
      <category term="article" scheme="https://erdong.site/categories/article/"/>
    
    
      <category term="域名解析" scheme="https://erdong.site/tags/%E5%9F%9F%E5%90%8D%E8%A7%A3%E6%9E%90/"/>
    
      <category term="CNAME" scheme="https://erdong.site/tags/CNAME/"/>
    
      <category term="MX" scheme="https://erdong.site/tags/MX/"/>
    
  </entry>
  
  <entry>
    <title>【翻译】Prometheus 2.6.0 新特性</title>
    <link href="https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-6-0.html"/>
    <id>https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-6-0.html</id>
    <published>2019-01-11T22:09:34.000Z</published>
    <updated>2019-10-14T11:09:51.612Z</updated>
    
    <content type="html"><![CDATA[<p>Prometheus <a href="https://github.com/prometheus/prometheus/releases/tag/v2.6.0" target="_blank" rel="noopener">2.6.0</a> 现在(2018.12.24)已经发布，在上个月的 <a href="http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-5-0.html">2.5.0</a> 之后又进行了一些修正和改进。</p><a id="more"></a><p>有许多性能改进。WAL reading 现在的速度是现在的四倍，带来了更快的启动时间。压缩、索引、内存系列和low ingestion rate servers 使用的RAM数量都显著减少。远程写的性能得到了改进，现在可以指定最小的碎片数。远程读取现在对后端故障具有弹性。</p><p>在服务发现方面，Azure、EC2和Kubernetes获得了新的元数据。Prometheus 在TSDB、模板和规则方面有一些新的 metric 。相应地，promtool 更新已被删除，如果您想将 1.x 记录规则转换为 2.x 格式，您需要使用早期版本的promtool。Prometheus 现在在出站 HTTP 请求的用户代理中标识自己，UI 中的 console 选项卡支持选择即时查询的评估时间。</p><p>这次还有很多的提升、bug fix 和其他的改变，可以查看 <a href="https://github.com/prometheus/prometheus/releases/tag/v2.6.0" target="_blank" rel="noopener">release notes</a> 来获取更多的信息。</p><h1 id="原文链接"><a href="#原文链接" class="headerlink" title="原文链接"></a>原文链接</h1><ul><li><a href="https://www.robustperception.io/new-features-in-prometheus-2-6-0" target="_blank" rel="noopener">https://www.robustperception.io/new-features-in-prometheus-2-6-0</a> ， By Brian Brazil</li></ul><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Prometheus &lt;a href=&quot;https://github.com/prometheus/prometheus/releases/tag/v2.6.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2.6.0&lt;/a&gt; 现在(2018.12.24)已经发布，在上个月的 &lt;a href=&quot;http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-5-0.html&quot;&gt;2.5.0&lt;/a&gt; 之后又进行了一些修正和改进。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="New-Features" scheme="https://erdong.site/categories/Prometheus/New-Features/"/>
    
    
      <category term="Prometheus" scheme="https://erdong.site/tags/Prometheus/"/>
    
      <category term="Features" scheme="https://erdong.site/tags/Features/"/>
    
      <category term="release" scheme="https://erdong.site/tags/release/"/>
    
  </entry>
  
  <entry>
    <title>【翻译】Prometheus 2.5.0 新特性</title>
    <link href="https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-5-0.html"/>
    <id>https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-5-0.html</id>
    <published>2019-01-11T22:08:34.000Z</published>
    <updated>2019-10-14T11:09:41.063Z</updated>
    
    <content type="html"><![CDATA[<p>Prometheus <a href="https://github.com/prometheus/prometheus/releases/tag/v2.5.0" target="_blank" rel="noopener">2.5.0</a> 现在(2018.11.12)已经发布，在 9 月份的 <a href="http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-4-0.html">2.4.0</a> 之后又进行了一些修正和改进。</p><a id="more"></a><p>这是新的6周计划的第二次发布。第一个重要的特性是，基于我们内部用于单元测试PromQL本身的语法，现在promtool中对规则和警报进行了单元测试。Prometheus 现在还会在加载配置文件时捕捉一些警告模板错误，而不是在评估模板时。</p><p>第二个特性是，现在对一个查询一次可以在内存中拥有的查询数量有一个限制，这样可以防止大量查询导致的 RAM 升高引起 OOM 威胁你的 Prometheus。可以通过 –query.max-samples flag 来调整这个值。每个示例使用 16 bytes 的内存，但是请记住，在内存中，用于查询的不仅仅是 active samples 。</p><p>第三个值得注意的特性是，这是第一个支持抓取 OpenMetrics 格式的版本。该格式仍在草案中，因此这是实验性的 Prometheus。目前只有 Prometheus Python 客户端可以生成这种格式，但是如果您同时使用这两种格式的最新版本，那么将使用 OpenMetrics 而不是 Prometheus 文本格式。</p><p>远程读取有一些改进，减少了内存使用、新的 metric 和并发限制。在服务发现方面，OpenStack 现在可以从所有项目中发现、发现所有网络接口并使用 TLS。Triton SD 可以按组进行过滤，并具有关联的新元数据。Kubernetes SD和SD通常都获得了一些新的 metric。</p><p>最后还有一个bug修复，它主要影响用户在 metric 名称上错误使用匹配器。如果您正在执行速率 ({<strong>name</strong>=~”som.*thing”}[5m]) 之类的操作，那么现在将失败，因为一旦删除 metric 名称，速率将生成两个具有相同标签的时间序列，这是没有意义的，并且会造成问题。前面已经讨论了如何正确地处理这个问题。</p><p>这次还有很多的提升、bug fix 和其他的改变，可以查看 <a href="https://github.com/prometheus/prometheus/releases/tag/v2.5.0" target="_blank" rel="noopener">release notes</a> 来获取更多的信息。</p><h1 id="原文链接"><a href="#原文链接" class="headerlink" title="原文链接"></a>原文链接</h1><ul><li><a href="https://www.robustperception.io/new-features-in-prometheus-2-5-0" target="_blank" rel="noopener">https://www.robustperception.io/new-features-in-prometheus-2-5-0</a> ， By Brian Brazil</li></ul><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Prometheus &lt;a href=&quot;https://github.com/prometheus/prometheus/releases/tag/v2.5.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2.5.0&lt;/a&gt; 现在(2018.11.12)已经发布，在 9 月份的 &lt;a href=&quot;http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-4-0.html&quot;&gt;2.4.0&lt;/a&gt; 之后又进行了一些修正和改进。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="New-Features" scheme="https://erdong.site/categories/Prometheus/New-Features/"/>
    
    
      <category term="Prometheus" scheme="https://erdong.site/tags/Prometheus/"/>
    
      <category term="Features" scheme="https://erdong.site/tags/Features/"/>
    
      <category term="release" scheme="https://erdong.site/tags/release/"/>
    
  </entry>
  
  <entry>
    <title>【翻译】Prometheus 2.4.0 新特性</title>
    <link href="https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-4-0.html"/>
    <id>https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-4-0.html</id>
    <published>2019-01-11T22:07:34.000Z</published>
    <updated>2019-10-14T11:09:30.577Z</updated>
    
    <content type="html"><![CDATA[<p>Prometheus <a href="https://github.com/prometheus/prometheus/releases/tag/v2.4.0" target="_blank" rel="noopener">2.4.0</a> 现在(2018.9.17)已经发布，在 6 月份的 <a href="http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-3-0.html">2.3.0</a> 之后又进行了一些修正和改进。</p><a id="more"></a><p>第一个较大的变化是，对于警报中的状态，现在跨重启持久化，因此短暂的重启将不再需要挂起警报从头开始。现在，在向 Alertmanager 发送警报时也有了一些限制，因此不再是在每次评估时发送现有警报，而是最多每分钟发送一次，这减少了 Alertmanager 上的负载。</p><p>这次有一个新的 WAL 实现，这意味着升级到2.4.0以后不能降级。有新的 API target 可以访问来自目标的规则、警报和元数据 metric 。</p><p>这次在服务发现方面有一些改进。如果有相同的 SD 配置，它们将只实例化一次，而不是针对它们的每个实例，这将更加有效和有用。此外还有Consul、EC2和GCE的新元数据字段，Azure获得了VMSS支持。</p><p>这次还有很多的提升、bug fix 和其他的改变，可以查看 <a href="https://github.com/prometheus/prometheus/releases/tag/v2.4.0" target="_blank" rel="noopener">release notes</a> 来获取更多的信息。</p><h1 id="原文链接"><a href="#原文链接" class="headerlink" title="原文链接"></a>原文链接</h1><ul><li><a href="https://www.robustperception.io/new-features-in-prometheus-2-4-0" target="_blank" rel="noopener">https://www.robustperception.io/new-features-in-prometheus-2-4-0</a> ， By Brian Brazil</li></ul><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Prometheus &lt;a href=&quot;https://github.com/prometheus/prometheus/releases/tag/v2.4.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2.4.0&lt;/a&gt; 现在(2018.9.17)已经发布，在 6 月份的 &lt;a href=&quot;http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-3-0.html&quot;&gt;2.3.0&lt;/a&gt; 之后又进行了一些修正和改进。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="New-Features" scheme="https://erdong.site/categories/Prometheus/New-Features/"/>
    
    
      <category term="Prometheus" scheme="https://erdong.site/tags/Prometheus/"/>
    
      <category term="Features" scheme="https://erdong.site/tags/Features/"/>
    
      <category term="release" scheme="https://erdong.site/tags/release/"/>
    
  </entry>
  
  <entry>
    <title>【翻译】Prometheus 2.3.0 新特性</title>
    <link href="https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-3-0.html"/>
    <id>https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-3-0.html</id>
    <published>2019-01-11T22:06:34.000Z</published>
    <updated>2019-10-14T11:09:21.865Z</updated>
    
    <content type="html"><![CDATA[<p>Prometheus <a href="https://github.com/prometheus/prometheus/releases/tag/v2.3.0" target="_blank" rel="noopener">2.3.0</a> 现在(2018.6.11)已经发布，在 3 月份的 <a href="http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-2-0.html">2.2.0</a> 之后又进行了一些修正和改进。</p><a id="more"></a><p>这个版本中最大的变化是与性能相关的。我对PromQL的评估方式进行了重大更改，这可以为常见仪表板查询减少31-64%的CPU和55-99%的内存分配。此外，我更改了用于编码响应的JSON库，节省了40%的CPU。</p><p>如果您正在使用带有无记名令牌的商业Marathon产品，请注意字段名已经更改。从好的方面来说，其他地方可用的所有常用HTTP选项现在都可以用于Marathon SD。EC2和领事SD现在允许使用这些技术的内置过滤，这与重新标记没有什么不同，但是对性能很有用。Kubernetes和GCE SD获得了额外的元数据。任何可以指定基本身份验证密码的地方，现在都可以从文件中读取该密码。</p><p>这次还有很多的提升、bug fix 和其他的改变，可以查看 <a href="https://github.com/prometheus/prometheus/releases/tag/v2.3.0" target="_blank" rel="noopener">release notes</a> 来获取更多的信息。</p><h1 id="原文链接"><a href="#原文链接" class="headerlink" title="原文链接"></a>原文链接</h1><ul><li><a href="https://www.robustperception.io/new-features-in-prometheus-2-3-0" target="_blank" rel="noopener">https://www.robustperception.io/new-features-in-prometheus-2-3-0</a> ， By Brian Brazil</li></ul><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Prometheus &lt;a href=&quot;https://github.com/prometheus/prometheus/releases/tag/v2.3.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2.3.0&lt;/a&gt; 现在(2018.6.11)已经发布，在 3 月份的 &lt;a href=&quot;http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-2-0.html&quot;&gt;2.2.0&lt;/a&gt; 之后又进行了一些修正和改进。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="New-Features" scheme="https://erdong.site/categories/Prometheus/New-Features/"/>
    
    
      <category term="Prometheus" scheme="https://erdong.site/tags/Prometheus/"/>
    
      <category term="Features" scheme="https://erdong.site/tags/Features/"/>
    
      <category term="release" scheme="https://erdong.site/tags/release/"/>
    
  </entry>
  
  <entry>
    <title>【翻译】Prometheus 2.2.0 新特性</title>
    <link href="https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-2-0.html"/>
    <id>https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-2-0.html</id>
    <published>2019-01-11T22:05:34.000Z</published>
    <updated>2019-10-14T11:09:14.026Z</updated>
    
    <content type="html"><![CDATA[<p>Prometheus <a href="https://github.com/prometheus/prometheus/releases/tag/v2.2.0" target="_blank" rel="noopener">2.2.0</a> 现在(2018.3.12)已经发布，在 1 月份的 <a href="http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-1-0.html">2.1.0</a> 之后又进行了一些修正和改进。</p><a id="more"></a><p>这个版本的存储格式发生了变化，所以一旦升级到2.2.0，就不可能降级回去。由于 2.2.0 的存储中有 BUG ，不建议继续使用该版本。</p><p>有各种各样的改进可以简化管理。警报状态页面可以显示注释，更好的规则格式，运行时页面包含更多信息和 flag，dropped target 和 dropped alertmanager 也可以从API中获得。</p><p>本次对联邦和服务发现的性能做了提升。无记名令牌中的更改不再需要重新加载配置文件。在2.1.0中添加的prometheus_sd_file_timestamp metric 现在有了改进的名称 prometheus_sd_file_mtime_seconds 。Azure SD中添加了元数据。</p><p>这次还有很多的提升、bug fix 和其他的改变，可以查看 <a href="https://github.com/prometheus/prometheus/releases/tag/v2.2.0" target="_blank" rel="noopener">release notes</a> 来获取更多的信息</p><h1 id="原文链接"><a href="#原文链接" class="headerlink" title="原文链接"></a>原文链接</h1><ul><li><a href="https://www.robustperception.io/new-features-in-prometheus-2-2-0" target="_blank" rel="noopener">https://www.robustperception.io/new-features-in-prometheus-2-2-0</a> ， By Brian Brazil</li></ul><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Prometheus &lt;a href=&quot;https://github.com/prometheus/prometheus/releases/tag/v2.2.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2.2.0&lt;/a&gt; 现在(2018.3.12)已经发布，在 1 月份的 &lt;a href=&quot;http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-1-0.html&quot;&gt;2.1.0&lt;/a&gt; 之后又进行了一些修正和改进。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="New-Features" scheme="https://erdong.site/categories/Prometheus/New-Features/"/>
    
    
      <category term="Prometheus" scheme="https://erdong.site/tags/Prometheus/"/>
    
      <category term="Features" scheme="https://erdong.site/tags/Features/"/>
    
      <category term="release" scheme="https://erdong.site/tags/release/"/>
    
  </entry>
  
  <entry>
    <title>【翻译】Prometheus 2.1.0 新特性</title>
    <link href="https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-1-0.html"/>
    <id>https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-1-0.html</id>
    <published>2019-01-11T22:04:34.000Z</published>
    <updated>2019-10-14T11:08:42.341Z</updated>
    
    <content type="html"><![CDATA[<p>Prometheus <a href="https://github.com/prometheus/prometheus/releases/tag/v2.1.0" target="_blank" rel="noopener">2.1.0</a> 现在(2018.01.22)已经发布，从上个月的 <a href="http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-0-0.html">2.0.0</a> 到 2.1.0 有一些修改和提升。</p><a id="more"></a><p>有几个改进可以简化管理。新的服务发现状态页使重新标记哪些元数据变得更加容易。规则状态页现在包括每个规则的最后一次计算花费的时间。便于找出哪些可能需要调整。每个规则组的最后评估持续时间现在也可以作为rule_group_last_duration_seconds metric 使用。文件SD有一个新的 prometheus_sd_file_timestamp metric，可以帮助您检测文件是否过期。</p><p>新的改进的存储引擎已经修复了许多错误，现在可以处理大于 4 GiB 的索引。Federation endpoint更快，Expression Browser 具有可选的查询历史记录。v1 版本的 HTTP API现在包含用于快照、删除和强制压缩的管理功能。</p><p>在2.0.0中添加的 read_recent 选项有一个错误的缺省值，现在在2.1.0中缺省值为 false。</p><p>这里有很多的 bug fix 和其他的改变，可以查看 <a href="https://github.com/prometheus/prometheus/releases/tag/v2.1.0" target="_blank" rel="noopener">release notes</a> 获取更多的信息。</p><h1 id="原文链接"><a href="#原文链接" class="headerlink" title="原文链接"></a>原文链接</h1><ul><li><a href="https://www.robustperception.io/new-features-in-prometheus-2-1-0" target="_blank" rel="noopener">https://www.robustperception.io/new-features-in-prometheus-2-1-0</a> ， By Brian Brazil</li></ul><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Prometheus &lt;a href=&quot;https://github.com/prometheus/prometheus/releases/tag/v2.1.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2.1.0&lt;/a&gt; 现在(2018.01.22)已经发布，从上个月的 &lt;a href=&quot;http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-0-0.html&quot;&gt;2.0.0&lt;/a&gt; 到 2.1.0 有一些修改和提升。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="New-Features" scheme="https://erdong.site/categories/Prometheus/New-Features/"/>
    
    
      <category term="Prometheus" scheme="https://erdong.site/tags/Prometheus/"/>
    
      <category term="Features" scheme="https://erdong.site/tags/Features/"/>
    
      <category term="release" scheme="https://erdong.site/tags/release/"/>
    
  </entry>
  
  <entry>
    <title>第02周分享</title>
    <link href="https://erdong.site/weekly/weekly02.html"/>
    <id>https://erdong.site/weekly/weekly02.html</id>
    <published>2019-01-11T19:59:53.000Z</published>
    <updated>2019-10-14T11:15:11.412Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><h1 id="新闻"><a href="#新闻" class="headerlink" title="新闻"></a>新闻</h1><h2 id="1-GitHub-开放私有仓库"><a href="#1-GitHub-开放私有仓库" class="headerlink" title="1. GitHub 开放私有仓库"></a>1. <a href="https://blog.github.com/2019-01-07-new-year-new-github/" target="_blank" rel="noopener">GitHub 开放私有仓库</a></h2><p>在2019 年的1月7日，GIthub 以 New year，new GitHub 为题公布了一个另个人开发者欢欣鼓舞的消息，可以在 Github 上创建免费的私有仓库，虽然有每个私仓三个协作者的限制，但是还是很很好的消息。</p><p>CSDN 资讯的<a href="https://blog.csdn.net/csdnnews/article/details/86109374" target="_blank" rel="noopener">这篇报道</a> 描述了更多的内容。</p><h2 id="2-2018年华为研发投入全球排第5"><a href="#2-2018年华为研发投入全球排第5" class="headerlink" title="2. 2018年华为研发投入全球排第5"></a>2. <a href="https://www.ithome.com/0/403/433.htm" target="_blank" rel="noopener">2018年华为研发投入全球排第5</a></h2><p>近日，欧盟委员会公布了《2018年欧盟工业研发投资排名》，这个排名主要是对全球46个国家和地区的2500家主要企业2017会计年度研发投入进行的调查。<br>其中华为排第5 ，结合2018年华为公布的各系列产品，有输入才有产出。</p><h1 id="教程"><a href="#教程" class="headerlink" title="教程"></a>教程</h1><h2 id="1-A-Programmer’s-Guide-to-English"><a href="#1-A-Programmer’s-Guide-to-English" class="headerlink" title="1. A Programmer’s Guide to English"></a>1. <a href="https://github.com/yujiangshui/A-Programmers-Guide-to-English/blob/master/README.md" target="_blank" rel="noopener">A Programmer’s Guide to English</a></h2><p>专为程序员编写的英语学习指南。<br>本教程目标人群是想要花一些时间真正掌握英语的人，尤其适合英语渣。对于英语渣来说，网上杂七杂八的英语学习技巧和经验不一定会有很多帮助，甚至会误导。比如这篇回答就说了，如果别人问答主如何学英语，她顶多给一句“多看美剧，培养语感”，好在这篇回答详细说了答主的水平和长期的努力细节，否则会误导一大片低水平英语渣去拼命的看美剧。所以在英语学习过程中，要注意查看符合自己水平的经验和教程，否则可能会走弯路。</p><h1 id="工具"><a href="#工具" class="headerlink" title="工具"></a>工具</h1><h2 id="1-UCloud-开源发布终端链路探测-SDK"><a href="#1-UCloud-开源发布终端链路探测-SDK" class="headerlink" title="1. UCloud 开源发布终端链路探测 SDK"></a>1. <a href="https://mp.weixin.qq.com/s?__biz=MjM5NjQ4MjYwMQ==&mid=2664613120&idx=1&sn=041701d505cde7607d3c1cef27dc7756&chksm=bdcefe468ab97750d218a9033a0dff43b26b7bb3344a37c8a5be412b9c6a8d497baad0966442&mpshare=1&scene=1&srcid=&rd2werd=1#wechat_redirect" target="_blank" rel="noopener">UCloud 开源发布终端链路探测 SDK</a></h2><p>UCloud 自主研发的终端链路探测 SDK 正式开源发布，开放中立云平台的专业网络运营、数据分析能力帮助出海企业以尊重用户隐私、数据安全加密的方式，探测终端访问 APP 的网络链路质量，定向优化移动端网络体验。</p><p>开源地址 ： <a href="https://github.com/ucloud/netanalysis-sdk-android" target="_blank" rel="noopener">https://github.com/ucloud/netanalysis-sdk-android</a></p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
  </entry>
  
  <entry>
    <title>【翻译】Prometheus 2.0.0 新特性</title>
    <link href="https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-0-0.html"/>
    <id>https://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-0-0.html</id>
    <published>2019-01-09T22:04:34.000Z</published>
    <updated>2019-10-14T11:08:20.976Z</updated>
    
    <content type="html"><![CDATA[<p>Prometheus <a href="https://github.com/prometheus/prometheus/releases/tag/v2.0.0" target="_blank" rel="noopener">2.0.0</a> 现在(2017.11.8)已经发布，从上个月的 <a href="https://www.robustperception.io/new-features-in-prometheus-1-8-0" target="_blank" rel="noopener">1.8.0</a> 到 2.0.0 有显著的改进。</p><a id="more"></a><p>最大的变化是新的存储引擎，它被完全重写，并与检索系统中的变化相结合，带来了可观的性能收益。现在，Prometheus 的服务器每秒可以摄取数百万个样本。这是由于与文本展示格式相关联的优化。如果您使用的导出器非常罕见，只支持protobuf公开格式，那么您需要添加对文本格式的支持。这个新的存储引擎不向后兼容，但是有<a href="https://www.robustperception.io/accessing-data-from-prometheus-1-x-in-prometheus-2-0/" target="_blank" rel="noopener">一种方法</a>可以透明地访问仍然存储在1.x中的旧数据。</p><p>新的存储引擎不需要通过 flag 进行调优。它通过 mmaped files 进行工作，因此依赖于现代内核的页面缓存。这种设计还允许为希望进行备份的用户制作快照。</p><p>第二个大的变化是PromQL中的新过时语义。在通常情况下，从服务发现中删除时间序列后，不再需要等待整整5分钟才会过期，现在需要大约一个scrape 间隔。</p><p>规则文件格式已更改为YAML，我们之前已经了解了如何使用 promtool 对其进行转换。规则现在按组划分，并按顺序执行。</p><p>PromQL有一些小的更改。添加了一个 <strong>timestamp</strong> 函数，删除了<strong>count_scalar</strong>、<strong>drop_common_tags</strong> 和 <strong>keep_common</strong> 。</p><p>出于安全原因，默认情况下禁用 admin 和 lifecycle API。你可以通过下面这两个 flag 来重新开启。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">--web.enable-admin-api  </span><br><span class="line">--web.enable-lifecycle</span><br></pre></td></tr></table></figure><p>说到 flag ，Kingpin 现在也在使用，所以所有 flag 的前缀都是双连字符而不是单连字符。用于指定AlertManager的命令行 flag 已被删除，现在要使用 AlertManager 只能在配置文件中开启，这个选项已经在<a href="https://www.robustperception.io/new-features-in-prometheus-1-4-0/" target="_blank" rel="noopener">1.4</a> 的配置文件中添加过了。</p><p>如果使用远程读取的对象不是远程存储，则需要启用新的 <strong>read_recent</strong> 选项。默认情况下，远程读取不再请求它应该在本地拥有的数据。</p><h1 id="原文链接"><a href="#原文链接" class="headerlink" title="原文链接"></a>原文链接</h1><ul><li><a href="https://www.robustperception.io/new-features-in-prometheus-2-0-0" target="_blank" rel="noopener">https://www.robustperception.io/new-features-in-prometheus-2-0-0</a> ， By Brian Brazil</li></ul><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Prometheus &lt;a href=&quot;https://github.com/prometheus/prometheus/releases/tag/v2.0.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2.0.0&lt;/a&gt; 现在(2017.11.8)已经发布，从上个月的 &lt;a href=&quot;https://www.robustperception.io/new-features-in-prometheus-1-8-0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;1.8.0&lt;/a&gt; 到 2.0.0 有显著的改进。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Prometheus" scheme="https://erdong.site/categories/Prometheus/"/>
    
      <category term="New-Features" scheme="https://erdong.site/categories/Prometheus/New-Features/"/>
    
    
      <category term="Prometheus" scheme="https://erdong.site/tags/Prometheus/"/>
    
      <category term="Features" scheme="https://erdong.site/tags/Features/"/>
    
      <category term="release" scheme="https://erdong.site/tags/release/"/>
    
  </entry>
  
  <entry>
    <title>Grafana 重置 admin 密码</title>
    <link href="https://erdong.site/Grafana/grafana-admin-password-reset.html"/>
    <id>https://erdong.site/Grafana/grafana-admin-password-reset.html</id>
    <published>2019-01-09T01:47:17.000Z</published>
    <updated>2019-10-14T11:07:10.492Z</updated>
    
    <content type="html"><![CDATA[<p>Grafana 的使用越来越广泛，在使用过程中经常遇到要重置密码的需求，尤其是 admin 密码，先说常规问题。</p><a id="more"></a><h1 id="已知-admin-密码修改新密码"><a href="#已知-admin-密码修改新密码" class="headerlink" title="已知 admin 密码修改新密码"></a>已知 admin 密码修改新密码</h1><h2 id="方法一：常规方法"><a href="#方法一：常规方法" class="headerlink" title="方法一：常规方法"></a>方法一：常规方法</h2><p>使用已知密码登陆系统，在系统页面里进行修改。</p><h2 id="方法二：API-接口"><a href="#方法二：API-接口" class="headerlink" title="方法二：API 接口"></a>方法二：API 接口</h2><p>接口使用方法如下：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">curl -X PUT -H &quot;Content-Type: application&#x2F;json&quot; -d &#39;&#123;</span><br><span class="line">  &quot;oldPassword&quot;: &quot;admin&quot;,</span><br><span class="line">  &quot;newPassword&quot;: &quot;newpass&quot;,</span><br><span class="line">  &quot;confirmNew&quot;: &quot;newpass&quot;</span><br><span class="line">&#125;&#39; http:&#x2F;&#x2F;admin:admin@&lt;your_grafana_host&gt;:3000&#x2F;api&#x2F;user&#x2F;password</span><br></pre></td></tr></table></figure><h1 id="忘记-admin-密码重置密码"><a href="#忘记-admin-密码重置密码" class="headerlink" title="忘记 admin 密码重置密码"></a>忘记 admin 密码重置密码</h1><p>接下来就是划重点的时候了，经常搭建了一个小环境以后，隔了几周想再看看的时候发现，admin 密码忘记了，没法登陆了。接下来这几个方法都能解决这几个问题，看情况使用。</p><h2 id="方法一：命令行"><a href="#方法一：命令行" class="headerlink" title="方法一：命令行"></a>方法一：命令行</h2><p>该方法基于 Grafana 4.1 以上</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">grafana-cli admin reset-admin-password &lt;new password&gt;</span><br></pre></td></tr></table></figure><p>如果上述方法报错：Could not find config defaults, make sure homepath command line parameter is set or working directory is homepath</p><p>那么使用如下 flag 来指定参数</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">grafana-cli admin reset-admin-password --homepath &quot;&#x2F;usr&#x2F;share&#x2F;grafana&quot; newpass</span><br></pre></td></tr></table></figure><h2 id="方法二：修改数据库"><a href="#方法二：修改数据库" class="headerlink" title="方法二：修改数据库"></a>方法二：修改数据库</h2><p>查看Grafana配置文件，确定Grafana 数据库 grafana.db的路径</p><p>配置文件路径一般为 /etc/grafana/grafana.ini ，如果安装时修改过，请查看对应位置的 grafana.ini  。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">[paths]</span><br><span class="line">;data &#x3D; &#x2F;var&#x2F;lib&#x2F;grafana</span><br><span class="line"></span><br><span class="line">[database]</span><br><span class="line"># For &quot;sqlite3&quot; only, path relative to data_path setting</span><br><span class="line">;path &#x3D; grafana.db</span><br></pre></td></tr></table></figure><p>通过配置文件得知grafana.db的完整路径为： /var/lib/grafana/grafana.db</p><p>由于 Grafana 使用 sqlite3 来存储配置数据，所以使用 sqlite3 来进行修改，如果没有请安装。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">[root@local]# sqlite3 &#x2F;var&#x2F;lib&#x2F;grafana&#x2F;grafana.db</span><br><span class="line">#查看数据库中包含的表</span><br><span class="line">.tables</span><br><span class="line"></span><br><span class="line">#查看user表内容</span><br><span class="line">select * from user;</span><br><span class="line"></span><br><span class="line">#重置admin用户的密码为默认admin</span><br><span class="line">update user set password &#x3D; &#39;59acf18b94d7eb0694c61e60ce44c110c7a683ac6a8f09580d626f90f4a242000746579358d77dd9e570e83fa24faa88a8a6&#39;, salt &#x3D; &#39;F3FAxVm33R&#39; where login &#x3D; &#39;admin&#39;;</span><br><span class="line"></span><br><span class="line">#退出sqlite3</span><br><span class="line">.exit</span><br></pre></td></tr></table></figure><p>使用上述方法，会将 admin 用户的密码重置为 admin ，然后登陆页面进行修改。</p><h2 id="方法三"><a href="#方法三" class="headerlink" title="方法三"></a>方法三</h2><p>一般来说上述方法已经可以满足需求了，如果不方便重置 admin 用户的密码，那么也可以通过修改数据库，将某个用户提权为 admin 权限用户，然后通过这个用户来进行修改。</p><p>提权语句如下：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">udpate user set is_admin &#x3D; 1 where login &#x3D; &#39;xxxx&#39;;</span><br></pre></td></tr></table></figure><h1 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h1><ul><li><a href="http://docs.grafana.org/administration/cli/#reset-admin-password" target="_blank" rel="noopener">http://docs.grafana.org/administration/cli/#reset-admin-password</a> , By Grafana</li></ul><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Grafana 的使用越来越广泛，在使用过程中经常遇到要重置密码的需求，尤其是 admin 密码，先说常规问题。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Grafana" scheme="https://erdong.site/categories/Grafana/"/>
    
    
      <category term="Grafana" scheme="https://erdong.site/tags/Grafana/"/>
    
  </entry>
  
  <entry>
    <title>第01周分享</title>
    <link href="https://erdong.site/weekly/weekly01.html"/>
    <id>https://erdong.site/weekly/weekly01.html</id>
    <published>2019-01-06T02:09:47.000Z</published>
    <updated>2019-10-14T11:14:34.281Z</updated>
    
    <content type="html"><![CDATA[<p>这里记录过去一周，我看到的值得分享的东西。</p><a id="more"></a><p>长久以来，我一直用各种方式，尝试整理我的收藏夹。最近想到，把它写成文章，共享出来，也许效果更好。<br>                       —阮一峰</p><p>和阮老师有同样的需求，希望在这里能见证自己的成长。</p><p>本周是 2019 年的第一周也是开始这个分享的第一周，推荐大家两本书看吧。</p><p>第一本是 《Site Reliablity Engineering: How Google Runs Production Systems》，作者是 Betsy Beyer ， Chris Jones ， Jennifer Petoff ， Niall Richard Murphy ,中文版是由孙宇聪翻译，书名为 《SRE：Google 运维解密》。</p><blockquote><p>Google 是 SRE 理念的发明者。本书不光介绍了这个职位的技术细节，还包括了其中的思考过程、团队目标、设计理念以及学到的宝贵课程。如果你想从起源上了解 SRE 一词的意义，应该从本书开始。</p></blockquote><p>上述是 Google SRE Russ Allbery 对本书的评价，我觉得很好的表述了对这本书的内容和意义。</p><p>第二本是 《The Site Reliablity Work Book》,作者是 Betsy Beyer ， Niall Richard Murphy ，David K.Rensin , Kent Kawahara ， Stephen Thorne 。当前好像还没有中文版，</p><blockquote><p>谷歌第一本解释了 SRE 内容和原因的书。本书向您展示了如何在任何公司、初创公司或巨头中实现 SRE。</p></blockquote><p>上述是 Stripe SRE  Jonah Horowitz 对这本书的评价，也是比较中肯的。</p><p>把这两本书推荐给大家，两本书都可以在下面的链接中找到。</p><p><a href="https://landing.google.com/sre/books/" target="_blank" rel="noopener">https://landing.google.com/sre/books/</a></p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;这里记录过去一周，我看到的值得分享的东西。&lt;/p&gt;
    
    </summary>
    
    
      <category term="weekly" scheme="https://erdong.site/categories/weekly/"/>
    
    
  </entry>
  
  <entry>
    <title>使用 vuls 对 CentOS 操作系统安全评估</title>
    <link href="https://erdong.site/tools/vuls-tool-introduction.html"/>
    <id>https://erdong.site/tools/vuls-tool-introduction.html</id>
    <published>2018-09-18T14:43:14.000Z</published>
    <updated>2019-10-14T11:13:57.273Z</updated>
    
    <content type="html"><![CDATA[<h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h1><p>由于某些安全事件的发生，对于系统安全需要进行进行一步的评估，本次主要使用 vuls 工具对日常主要使用的几个版本操作系统对其进行安全基线的建立和系统安全性的评分。</p><a id="more"></a><h1 id="评估工具"><a href="#评估工具" class="headerlink" title="评估工具"></a>评估工具</h1><p>vuls 是一个 Linux/FreeBSD 的无代理漏洞扫描器，使用 go 语言编写。</p><ul><li>github： <a href="https://github.com/future-architect/vuls" target="_blank" rel="noopener">https://github.com/future-architect/vuls</a></li><li>官网：<a href="https://vuls.io/en/" target="_blank" rel="noopener">https://vuls.io/en/</a></li></ul><h2 id="用到的CVE工具"><a href="#用到的CVE工具" class="headerlink" title="用到的CVE工具"></a>用到的CVE工具</h2><p>主要是三个工具，go-cve-dictionary、goval-dictionary、gost（go-security-tracker）</p><ul><li>go-cve-dictionary：该工具用于构建 NVD(国家漏洞数据库)和日本 JVN 的本地副本，根据它们的CVE标识符包含安全漏洞，包括详尽的信息和风险评分。</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">wget https://github.com/kotakanbe/go-cve-dictionary/releases/download/v0.2.1/go-cve-dictionary_0.2.1_linux_amd64.tar.gz</span><br><span class="line">tar -zxf go-cve-dictionary_0.2.1_linux_amd64.tar.gz</span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> `seq 2002 $(date +<span class="string">"%Y"</span>)`; <span class="keyword">do</span> go-cve-dictionary fetchnvd -years <span class="variable">$i</span>; <span class="keyword">done</span></span><br><span class="line">... snip ...</span><br><span class="line">ls -alh cve.sqlite3</span><br><span class="line">-rw-r--r--. 1 centos centos  51M Aug  6 08:10 cve.sqlite3</span><br><span class="line">-rw-r--r--. 1 centos centos  32K Aug  6 08:10 cve.sqlite3-shm</span><br><span class="line">-rw-r--r--. 1 centos centos 5.1M Aug  6 08:10 cve.sqlite3-wal</span><br></pre></td></tr></table></figure><ul><li>goval-dictionary：这是用来建立OVAL的本地副本的工具。</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">wget https://github.com/kotakanbe/goval-dictionary/releases/download/v0.1.0/goval-dictionary_0.1.0_linux_amd64.tar.gz</span><br><span class="line">tar -zxf goval-dictionary_0.1.0_linux_amd64.tar.gz</span><br><span class="line">goval-dictionary fetch-redhat 7</span><br></pre></td></tr></table></figure><ul><li>gost：是一个 RedHat 或者 Debian 副本的本地安全跟踪器。</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 官方没有提供构建好的二进制文件，但是提供了 docker image。</span></span><br><span class="line">docker run --rm -i \</span><br><span class="line">-v <span class="variable">$PWD</span>:/vuls \</span><br><span class="line">-v <span class="variable">$PWD</span>:/var/<span class="built_in">log</span>/gost \</span><br><span class="line">vuls/gost fetch redhat --after=2016-01-01</span><br></pre></td></tr></table></figure><p>使用这些工具将 2002年以后的 CVE 事件和 Bug fix 情况在本地建立副本用于测试。时间范围为2002年到2018年9月13日。</p><h2 id="vuls-配置"><a href="#vuls-配置" class="headerlink" title="vuls 配置"></a>vuls 配置</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">[servers.172-31-4-82]</span><br><span class="line"># 主机地址</span><br><span class="line">host         &#x3D; &quot;172.31.4.82&quot;</span><br><span class="line"># 用户名</span><br><span class="line">user        &#x3D; &quot;ec2-user&quot;</span><br><span class="line"># ssh 登陆 key 文件路径</span><br><span class="line">keyPath     &#x3D; &quot;&#x2F;home&#x2F;username&#x2F;.ssh&#x2F;id_rsa&quot;</span><br><span class="line"># 扫描模式 fast fast-root deep </span><br><span class="line">scanMode     &#x3D; [&quot;fast-root&quot;]</span><br><span class="line"># 扫描在运行的 docker 容器，通过 docker exec 实现，所以只能是在运行的容器。</span><br><span class="line">containerType &#x3D; &quot;docker&quot;</span><br><span class="line">containersIncluded &#x3D; [&quot;$&#123;running&#125;&quot;]</span><br></pre></td></tr></table></figure><h2 id="vuls-模式"><a href="#vuls-模式" class="headerlink" title="vuls 模式"></a>vuls 模式</h2><p> vuls 从联网和不联网有两种模式 online 和 offline，本次测试使用 online </p><p> vuls 从扫描的角度有三种模式 ，分别是 fast， fast-root， deep。</p><ul><li>fast：快速扫描模式不需要 root 权限，没有依赖性，几乎没有负载扫描目标服务器。</li><li>fast-root： 快速扫描模式扫描使用 root 权限，几乎没有负载扫描目标服务器。可以分析受影响的进程（需要 yum-ps 或者debian-goodies来进行）。</li><li>deep：使用 root 权限进行深度扫描模式。某些命令可能导致高负载，例如获取许多可更新包的。可以生成解析的变更日志。</li></ul><p>三种模式对漏洞的扫描程度并没有变化，只是增加了一些附属的功能。所以选择 fast 模式。</p><h2 id="vuls-报告"><a href="#vuls-报告" class="headerlink" title="vuls 报告"></a>vuls 报告</h2><p>生成报告</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vuls report</span><br></pre></td></tr></table></figure><p>单行模式</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">vuls report -format-one-line-text</span><br><span class="line"></span><br><span class="line">One Line Summary</span><br><span class="line">&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;</span><br><span class="line">c74     Total: 294 (High:65 Medium:198 Low:24 ?:7)      93&#x2F;294 Fixed    708 installed, 285 updatable</span><br><span class="line">deb8    Total: 490 (High:62 Medium:158 Low:22 ?:248)    11&#x2F;490 Fixed    512 installed</span><br></pre></td></tr></table></figure><p>完整模式</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><span class="line">vuls report -format-full-text</span><br><span class="line"></span><br><span class="line">c74 (centos7.4.1708)</span><br><span class="line">&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;</span><br><span class="line">Total: 23 (High:22 Medium:1 Low:0), 9&#x2F;23 Fixed, 708 installed, 285 updatable</span><br><span class="line"></span><br><span class="line">+---------------+----------------------------------------------------------------------------------+</span><br><span class="line">| CVE-2017-9233 |                                                                                  |</span><br><span class="line">+---------------+----------------------------------------------------------------------------------+</span><br><span class="line">| Max Score     | 7.5 HIGH (nvd)                                                                   |</span><br><span class="line">| nvd           | 7.5&#x2F;CVSS:3.0&#x2F;AV:N&#x2F;AC:L&#x2F;PR:N&#x2F;UI:N&#x2F;S:U&#x2F;C:N&#x2F;I:N&#x2F;A:H HIGH                            |</span><br><span class="line">| redhat_api    | 6.5&#x2F;CVSS:3.0&#x2F;AV:N&#x2F;AC:L&#x2F;PR:N&#x2F;UI:R&#x2F;S:U&#x2F;C:N&#x2F;I:N&#x2F;A:H MODERATE                        |</span><br><span class="line">| nvd           | 5.0&#x2F;AV:N&#x2F;AC:L&#x2F;Au:N&#x2F;C:N&#x2F;I:N&#x2F;A:P MEDIUM                                            |</span><br><span class="line">| Summary       | XML External Entity vulnerability in libexpat 2.2.0 and earlier (Expat XML       |</span><br><span class="line">|               | Parser Library) allows attackers to put the parser in an infinite loop using a   |</span><br><span class="line">|               | malformed external entity definition from an external DTD.                       |</span><br><span class="line">| Mitigation    |  Do not parse untrusted arbitrary XML data using the expat                       |</span><br><span class="line">|               | package.                                                                         |</span><br><span class="line">| CWE           | CWE-835: Loop with Unreachable Exit Condition (&#39;Infinite Loop&#39;) (redhat_api)     |</span><br><span class="line">| CWE           | [OWASP Top4] CWE-611: Improper Restriction of XML External Entity Reference      |</span><br><span class="line">|               | (&#39;XXE&#39;) (nvd)                                                                    |</span><br><span class="line">| Affected PKG  | expat-2.1.0-10.el7_3 -&gt; Will not fix                                             |</span><br><span class="line">| Confidence    | 100 &#x2F; RedHatAPIMatch                                                             |</span><br><span class="line">| Source        | https:&#x2F;&#x2F;nvd.nist.gov&#x2F;vuln&#x2F;detail&#x2F;CVE-2017-9233                                   |</span><br><span class="line">| CVSSv2 Calc   | https:&#x2F;&#x2F;nvd.nist.gov&#x2F;vuln-metrics&#x2F;cvss&#x2F;v2-calculator?name&#x3D;CVE-2017-9233          |</span><br><span class="line">| CVSSv3 Calc   | https:&#x2F;&#x2F;nvd.nist.gov&#x2F;vuln-metrics&#x2F;cvss&#x2F;v3-calculator?name&#x3D;CVE-2017-9233          |</span><br><span class="line">| RHEL-CVE      | https:&#x2F;&#x2F;access.redhat.com&#x2F;security&#x2F;cve&#x2F;CVE-2017-9233                             |</span><br><span class="line">| CWE           | https:&#x2F;&#x2F;cwe.mitre.org&#x2F;data&#x2F;definitions&#x2F;CWE-835.html                              |</span><br><span class="line">| CWE           | https:&#x2F;&#x2F;cwe.mitre.org&#x2F;data&#x2F;definitions&#x2F;CWE-611.html                              |</span><br><span class="line">| OWASP Top10   | https:&#x2F;&#x2F;github.com&#x2F;OWASP&#x2F;Top10&#x2F;blob&#x2F;master&#x2F;2017&#x2F;en&#x2F;0xa4-xxe.md                   |</span><br><span class="line">+---------------+----------------------------------------------------------------------------------+</span><br><span class="line"></span><br><span class="line">... snip ...</span><br></pre></td></tr></table></figure><p>命令行图形化</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vuls tui</span><br></pre></td></tr></table></figure><p>通过 tab 键来进行窗口的切换，通过方向键来翻页。</p><h1 id="基线测试环境"><a href="#基线测试环境" class="headerlink" title="基线测试环境"></a>基线测试环境</h1><p>本次测试主要针对 CentOS 操作系统的 7.2、7.4、7.5 devel安装和 minimal 安装进行测试，建立以建立基线。</p><p>devel 安装时选择 “Development and Creative Workstations” 中的 “development Tools”</p><h2 id="CentOS-三个版本安装包的数量"><a href="#CentOS-三个版本安装包的数量" class="headerlink" title="CentOS 三个版本安装包的数量"></a>CentOS 三个版本安装包的数量</h2><table><thead><tr><th></th><th>CentOS 7.2</th><th>CentOS7.4</th><th>CentOS 7.5</th></tr></thead><tbody><tr><td>minimal</td><td>285</td><td>299</td><td>300</td></tr><tr><td>dev</td><td>1594</td><td>1568</td><td>1640</td></tr></tbody></table><p>随着版本的更新，越新的版本安装的包会之间变多，</p><h1 id="测试结果"><a href="#测试结果" class="headerlink" title="测试结果"></a>测试结果</h1><h2 id="CentOS-三个版本的高危漏洞"><a href="#CentOS-三个版本的高危漏洞" class="headerlink" title="CentOS 三个版本的高危漏洞"></a>CentOS 三个版本的高危漏洞</h2><table><thead><tr><th></th><th>Total</th><th>High</th><th>Medium</th><th>Low</th><th>Fixed</th><th>installed</th><th>updatable</th></tr></thead><tbody><tr><td>CentOS 7.2 mini</td><td>886</td><td>221</td><td>557</td><td>107</td><td>433</td><td>290</td><td>212</td></tr><tr><td>CentOS 7.2 devel</td><td>2206</td><td>554</td><td>1446</td><td>205</td><td>1134</td><td>1594</td><td>1020</td></tr><tr><td>CentOS 7.4 mini</td><td>572</td><td>122</td><td>374</td><td>75</td><td>124</td><td>304</td><td>178</td></tr><tr><td>CentOS 7.4 devel</td><td>1393</td><td>294</td><td>941</td><td>157</td><td>333</td><td>1568</td><td>661</td></tr><tr><td>CentOS 7.5 mini</td><td>491</td><td>100</td><td>327</td><td>63</td><td>43</td><td>305</td><td>79</td></tr><tr><td>CentOS 7.5 devel</td><td>1141</td><td>213</td><td>795</td><td>132</td><td>85</td><td>1640</td><td>229</td></tr></tbody></table><p>通过观察上述结果发现，</p><ul><li>安装的软件越多，带来的漏洞越多。所以建议尽量使用 mini 镜像，然后开始安装需要的软件，避免引入漏洞，扩大被攻击面。</li><li>随着版本的更新，总的漏洞数量和高危漏洞数量都在减少。所以尽量使用新的操作系统发行版。</li></ul><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;h1 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h1&gt;&lt;p&gt;由于某些安全事件的发生，对于系统安全需要进行进行一步的评估，本次主要使用 vuls 工具对日常主要使用的几个版本操作系统对其进行安全基线的建立和系统安全性的评分。&lt;/p&gt;
    
    </summary>
    
    
      <category term="tools" scheme="https://erdong.site/categories/tools/"/>
    
    
      <category term="vuls" scheme="https://erdong.site/tags/vuls/"/>
    
  </entry>
  
  <entry>
    <title>linux 的下载工具</title>
    <link href="https://erdong.site/tools/linux-download-tool.html"/>
    <id>https://erdong.site/tools/linux-download-tool.html</id>
    <published>2018-09-18T14:40:29.000Z</published>
    <updated>2019-10-14T11:08:04.197Z</updated>
    
    <content type="html"><![CDATA[<p>有时候在 linux 下需要下载一些镜像，但是文件较大，使用 wget 要下载很长时间，这个时候如果有 BT 种子文件可以加速下载。</p><a id="more"></a><p>要用到的工具 transmission ，使用它的客户端在 linux 下载。</p><h2 id="1-下载-torrent-文件"><a href="#1-下载-torrent-文件" class="headerlink" title="1. 下载 torrent 文件"></a>1. 下载 torrent 文件</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget http://vault.centos.org/7.2.1511/isos/x86_64/CentOS-7-x86_64-DVD-1511.torrent</span><br></pre></td></tr></table></figure><h2 id="2-安装-transmission-客户端"><a href="#2-安装-transmission-客户端" class="headerlink" title="2. 安装 transmission 客户端"></a>2. 安装 transmission 客户端</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">yum install transmission-cli</span><br></pre></td></tr></table></figure><h2 id="3-下载"><a href="#3-下载" class="headerlink" title="3. 下载"></a>3. 下载</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">transmission-cli CentOS-7-x86_64-DVD-1511.torrent</span><br></pre></td></tr></table></figure><h1 id="有价值的连接"><a href="#有价值的连接" class="headerlink" title="有价值的连接"></a>有价值的连接</h1><p>其他人的介绍<br><a href="https://blog.csdn.net/jiyuanyi1992/article/details/44250943" target="_blank" rel="noopener">https://blog.csdn.net/jiyuanyi1992/article/details/44250943</a></p><p>其他5种 BT 下载工具<br><a href="https://blog.csdn.net/s464036801/article/details/8168157" target="_blank" rel="noopener">https://blog.csdn.net/s464036801/article/details/8168157</a></p><p>10种下载工具的简单说明<br><a href="https://linux.cn/article-7369-1.html" target="_blank" rel="noopener">https://linux.cn/article-7369-1.html</a></p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;有时候在 linux 下需要下载一些镜像，但是文件较大，使用 wget 要下载很长时间，这个时候如果有 BT 种子文件可以加速下载。&lt;/p&gt;
    
    </summary>
    
    
      <category term="tools" scheme="https://erdong.site/categories/tools/"/>
    
    
      <category term="torrent" scheme="https://erdong.site/tags/torrent/"/>
    
  </entry>
  
  <entry>
    <title>Superset 介绍及 docker 安装</title>
    <link href="https://erdong.site/tools/superset-introduction.html"/>
    <id>https://erdong.site/tools/superset-introduction.html</id>
    <published>2018-08-31T01:53:29.000Z</published>
    <updated>2019-10-14T11:13:33.542Z</updated>
    
    <content type="html"><![CDATA[<p>人是视觉动物，要用数据把一个故事讲活，图表是必不可少的。如果你经常看到做数据分析同事，在SQL客户端里执行完查询，把结果复制/粘贴到Excel里再做成图表，那说明你的公司缺少一个可靠的数据可视化平台。数据可视化是Business Intelligence(简称BI)中的核心功能，有许多成熟的解决方案，例如今天要介绍的 Superset 。</p><p>Superset最初是由Airbnb的数据团队开源的，目前已进入Apache Incubator，算是明星级的开源项目。</p><a id="more"></a> <h1 id="特性"><a href="#特性" class="headerlink" title="特性"></a>特性</h1><ul><li>一个直观的界面来探索和可视化数据集，并创建交互式仪表板。</li><li>展示数据的一系列漂亮的可视化效果。</li><li>简单、无代码的用户流可以深入挖掘、切分暴露仪表板下的数据。仪表盘和图表作为深入分析的起点。</li><li>SQL编辑器/IDE的一种状态，显示了丰富的元数据浏览器，以及从任何结果集中创建可视化的简单工作流。</li><li>一个可扩展的、高粒度的安全模型，允许关于谁可以访问哪些产品特性和数据集的复杂规则。与主要身份验证后端(数据库、OpenID、LDAP、OAuth、REMOTE_USER、…)的集成</li><li>一个轻量级语义层，允许通过定义维度和度量来控制数据源如何向用户公开</li><li>大多数sql语言数据库的开箱即用支持</li><li>与 Druid 的深度整合，允许超集保持快速，同时切片和切分大型实时数据集</li><li>具有可配置缓存的快速加载仪表板</li></ul><h1 id="限制"><a href="#限制" class="headerlink" title="限制"></a>限制</h1><p> 一个 Superset SQLAlchemy 数据源只能是一个单个的表或者视图。<br><a href="https://superset.incubator.apache.org/faq.html" target="_blank" rel="noopener">https://superset.incubator.apache.org/faq.html</a></p><h1 id="支持的数据库"><a href="#支持的数据库" class="headerlink" title="支持的数据库"></a>支持的数据库</h1><ul><li>MySQL</li><li>Postgres</li><li>Vertica</li><li>Oracle</li><li>Microsoft SQL Server</li><li>SQLite</li><li>Greenplum</li><li>Firebird</li><li>MariaDB</li><li>Sybase</li><li>IBM DB2</li><li>Exasol</li><li>MonetDB</li><li>Snowflake</li><li>Redshift</li><li>Clickhouse</li></ul><h1 id="资料"><a href="#资料" class="headerlink" title="资料"></a>资料</h1><ul><li><a href="https://airbnb.io/projects/superset/" target="_blank" rel="noopener">https://airbnb.io/projects/superset/</a> （官网）</li><li><a href="https://github.com/apache/incubator-superset" target="_blank" rel="noopener">https://github.com/apache/incubator-superset</a></li><li><a href="https://superset.incubator.apache.org/index.html" target="_blank" rel="noopener">https://superset.incubator.apache.org/index.html</a></li><li><a href="https://hub.docker.com/r/amancevice/superset/" target="_blank" rel="noopener">https://hub.docker.com/r/amancevice/superset/</a></li><li><a href="https://github.com/amancevice/superset" target="_blank" rel="noopener">https://github.com/amancevice/superset</a></li></ul><h1 id="安装"><a href="#安装" class="headerlink" title="安装"></a>安装</h1><p>本次基于如下环境进行安装和使用</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 操作系统</span></span><br><span class="line">CentOS Linux release 7.4.1708 (Core)</span><br><span class="line">Linux 172-18-12-17 3.10.0-693.el7.x86_64 <span class="comment">#1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux</span></span><br><span class="line"><span class="comment"># docker version</span></span><br><span class="line">Client:</span><br><span class="line"> Version:           18.06.1-ce</span><br><span class="line"> API version:       1.38</span><br><span class="line"> Go version:        go1.10.3</span><br><span class="line"> Git commit:        e68fc7a</span><br><span class="line"> Built:             Tue Aug 21 17:23:03 2018</span><br><span class="line"> OS/Arch:           linux/amd64</span><br><span class="line"> Experimental:      <span class="literal">false</span></span><br><span class="line"></span><br><span class="line">Server:</span><br><span class="line"> Engine:</span><br><span class="line">  Version:          18.06.1-ce</span><br><span class="line">  API version:      1.38 (minimum version 1.12)</span><br><span class="line">  Go version:       go1.10.3</span><br><span class="line">  Git commit:       e68fc7a</span><br><span class="line">  Built:            Tue Aug 21 17:25:29 2018</span><br><span class="line">  OS/Arch:          linux/amd64</span><br><span class="line">  Experimental:     <span class="literal">false</span></span><br><span class="line"><span class="comment"># superset version</span></span><br><span class="line">0.26.3</span><br></pre></td></tr></table></figure><h2 id="下载官方推荐的-docker-镜像"><a href="#下载官方推荐的-docker-镜像" class="headerlink" title="下载官方推荐的 docker 镜像"></a>下载官方推荐的 docker 镜像</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">docker pull amancevice/superset:0.26.3</span><br><span class="line">[root@hulk ~]<span class="comment"># docker images</span></span><br><span class="line">REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE</span><br><span class="line">amancevice/superset   0.26.3              7ddd79c685a7        9 days ago          923MB</span><br><span class="line">``` </span><br><span class="line"></span><br><span class="line"><span class="comment">## 启动 superset 镜像</span></span><br><span class="line"></span><br><span class="line">建议事先准备好 superset 的配置文件和数据目录，</span><br></pre></td></tr></table></figure><h1 id="create-config-dir"><a href="#create-config-dir" class="headerlink" title="create config dir"></a>create config dir</h1><p>mkdir /superset/conf</p><h1 id="create-data-dir"><a href="#create-data-dir" class="headerlink" title="create data dir"></a>create data dir</h1><p>mkdir /superset/data</p><h1 id="start-superset"><a href="#start-superset" class="headerlink" title="start superset"></a>start superset</h1><p>docker run -d -p 8088:8088 -v /superset/conf:/etc/superset -v /superset/data:/var/lib/superset –name superset amancevice/superset:0.26.3</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">## 初始化 superset 镜像</span><br><span class="line"></span><br><span class="line">&#96;&#96;&#96; bash</span><br><span class="line"># 设定superset的用户名和密码</span><br><span class="line">docker exec -it superset fabmanager create-admin --app superset</span><br><span class="line">Username [admin]: ****</span><br><span class="line">User first name [admin]: ****</span><br><span class="line">User last name [user]: ****</span><br><span class="line">Email [admin@fab.org]: ****</span><br><span class="line">Password:</span><br><span class="line">Repeat for confirmation:</span><br><span class="line">Recognized Database Authentications.</span><br><span class="line"></span><br><span class="line"># 初始化数据库</span><br><span class="line">docker exec -it superset superset db upgrade</span><br><span class="line"># 创建默认角色和许可</span><br><span class="line">docker exec -it superset superset init</span><br><span class="line"># 开启superset服务</span><br><span class="line">docker exec -it superset superset runserver</span><br></pre></td></tr></table></figure><h2 id="使用浏览器登陆"><a href="#使用浏览器登陆" class="headerlink" title="使用浏览器登陆"></a>使用浏览器登陆</h2><p>打开宿主机上的浏览器，输入<a href="http://localhost:8088" target="_blank" rel="noopener">http://localhost:8088</a> 用你刚刚创建的用户名进行登录即可。</p><h1 id="迁移"><a href="#迁移" class="headerlink" title="迁移"></a>迁移</h1><h2 id="备份数据"><a href="#备份数据" class="headerlink" title="备份数据"></a>备份数据</h2><p>如果在启动时，数据目录是挂载出来的，那么可以忽略数据<br>如果数据目录是在 docker 容器内的，那么先把数据库文件拷出来，superset 官方默认使用 sqlite 数据库，该数据库可以直接拷贝数据库文件，如果使用了其他数据库请参照对应的数据库备份方法备份。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker cp superset:/var/lib/superset/superset.db .</span><br></pre></td></tr></table></figure><p>将superset.db 拷贝到新机器的/superset/data 目录下，数据备份完成。</p><h2 id="启动服务"><a href="#启动服务" class="headerlink" title="启动服务"></a>启动服务</h2><p>在新的机器上安装好 docker，实现 pull 好 superset 的镜像。执行下列命令启动就可以了。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker run -d -p 8088:8088 -v /superset/conf:/etc/superset -v /superset/data:/var/lib/superset --name superset amancevice/superset:0.26.3</span><br></pre></td></tr></table></figure><h2 id="升级"><a href="#升级" class="headerlink" title="升级"></a>升级</h2><p>与迁移类似，先备份数据，方式参考迁移的备份数据。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Pull desired version</span></span><br><span class="line">docker pull amancevice/superset:latest</span><br><span class="line"></span><br><span class="line"><span class="comment"># Remove the current container</span></span><br><span class="line">docker rm -f superset</span><br><span class="line"></span><br><span class="line"><span class="comment"># Deploy a new container ...</span></span><br><span class="line">docker run -d -p 8088:8088 -v /superset/conf:/etc/superset -v /superset/data:/var/lib/superset --name superset amancevice/superset:latest</span><br><span class="line"></span><br><span class="line"><span class="comment"># Upgrade the DB</span></span><br><span class="line">docker <span class="built_in">exec</span> superset-new superset db upgrade</span><br></pre></td></tr></table></figure><h1 id="参考资料"><a href="#参考资料" class="headerlink" title="参考资料"></a>参考资料</h1><ul><li><a href="http://itindex.net/detail/58117-数据-可视化-开源" target="_blank" rel="noopener">http://itindex.net/detail/58117-数据-可视化-开源</a></li><li>官方文档</li></ul><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;人是视觉动物，要用数据把一个故事讲活，图表是必不可少的。如果你经常看到做数据分析同事，在SQL客户端里执行完查询，把结果复制/粘贴到Excel里再做成图表，那说明你的公司缺少一个可靠的数据可视化平台。数据可视化是Business Intelligence(简称BI)中的核心功能，有许多成熟的解决方案，例如今天要介绍的 Superset 。&lt;/p&gt;
&lt;p&gt;Superset最初是由Airbnb的数据团队开源的，目前已进入Apache Incubator，算是明星级的开源项目。&lt;/p&gt;
    
    </summary>
    
    
      <category term="tools" scheme="https://erdong.site/categories/tools/"/>
    
    
      <category term="superset" scheme="https://erdong.site/tags/superset/"/>
    
      <category term="BI" scheme="https://erdong.site/tags/BI/"/>
    
  </entry>
  
  <entry>
    <title>IB 工具安装</title>
    <link href="https://erdong.site/tools/IB-tool-install.html"/>
    <id>https://erdong.site/tools/IB-tool-install.html</id>
    <published>2018-08-30T10:12:28.000Z</published>
    <updated>2019-10-14T11:07:40.493Z</updated>
    
    <content type="html"><![CDATA[<p>IB 网卡在安装在机器上以后，需要有对应的驱动才可以正常使用。</p><p>一般情况下，内核就可以驱动 IB 网卡，如果为了性能或者其他考虑可以安装原厂的驱动。</p><p>现在简单记录一下，内核驱动 IB 以后如何快速上手使用。</p><a id="more"></a><p>安装 IB 工具包</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">yum install -y infiniband-diags</span><br></pre></td></tr></table></figure><p>安装子网管理器</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">yum install -y opensm</span><br><span class="line">systemctl start opensm</span><br><span class="line">systemctl <span class="built_in">enable</span> opensm</span><br></pre></td></tr></table></figure><p> 接下来就可以使用了。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line">[root@test01 ~]<span class="comment"># ibstatus</span></span><br><span class="line">Infiniband device <span class="string">'mthca0'</span> port 1 status:</span><br><span class="line">default gid: fe80:0000:0000:0000:0002:c902:0021:56d9</span><br><span class="line">base lid: 0x0</span><br><span class="line">sm lid: 0x0</span><br><span class="line">state: 1: DOWN</span><br><span class="line">phys state: 2: Polling</span><br><span class="line">rate: 10 Gb/sec (4X)</span><br><span class="line">link_layer: InfiniBand</span><br><span class="line"></span><br><span class="line">Infiniband device <span class="string">'mthca0'</span> port 2 status:</span><br><span class="line">default gid: fe80:0000:0000:0000:0002:c902:0021:56da</span><br><span class="line">base lid: 0x1</span><br><span class="line">sm lid: 0x1</span><br><span class="line">state: 4: ACTIVE</span><br><span class="line">phys state: 5: LinkUp</span><br><span class="line">rate: 20 Gb/sec (4X DDR)</span><br><span class="line">link_layer: InfiniBand</span><br></pre></td></tr></table></figure><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;IB 网卡在安装在机器上以后，需要有对应的驱动才可以正常使用。&lt;/p&gt;
&lt;p&gt;一般情况下，内核就可以驱动 IB 网卡，如果为了性能或者其他考虑可以安装原厂的驱动。&lt;/p&gt;
&lt;p&gt;现在简单记录一下，内核驱动 IB 以后如何快速上手使用。&lt;/p&gt;
    
    </summary>
    
    
      <category term="tools" scheme="https://erdong.site/categories/tools/"/>
    
    
      <category term="linux" scheme="https://erdong.site/tags/linux/"/>
    
      <category term="ib" scheme="https://erdong.site/tags/ib/"/>
    
  </entry>
  
  <entry>
    <title>limit 详解</title>
    <link href="https://erdong.site/linux/system/limit-detailed-introduction.html"/>
    <id>https://erdong.site/linux/system/limit-detailed-introduction.html</id>
    <published>2018-08-23T03:55:52.000Z</published>
    <updated>2019-10-14T11:07:51.615Z</updated>
    
    <content type="html"><![CDATA[<p>今天在使用 Prometheus 时遇到了问题，报错  err=”list block dirs /prometheus/data/: open /prometheus/data/: too many open files”, 经查询发现，系统默认的普通用户系统最大打开文件数为 1024，Prometheus 数据太多导致该问题，将普通用户的这个限制适当的上调即可。</p><p>经过这个事情发现，对 limit 的掌握并不熟悉，特意搜索了 limit 的相关信息整理在这里，学习以及备忘。</p><p>环境说明：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">CentOS Linux release 7.4.1708 (Core)</span><br><span class="line">Linux hulk 3.10.0-693.el7.x86_64 <span class="comment">#1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux</span></span><br></pre></td></tr></table></figure><a id="more"></a> <h1 id="ulimit-命令详解"><a href="#ulimit-命令详解" class="headerlink" title="ulimit 命令详解"></a>ulimit 命令详解</h1><p>  Linux是有文件句柄限制的，而且Linux默认普通用户都是1024，root 用户没有限制，作为生产系统使用很容易就达到这个数量</p><p>  操作系统各方面的资源都是非常紧缺的, ulimit 可以起到很大的作用，它是一种简单并且有效的实现资源限制的方式。</p><p>  ulimit 用于限制 shell 启动进程所占用的资源，支持以下各种类型的限制：所创建的内核文件的大小、进程数据块的大小、Shell 进程创建文件的大小、内存锁住的大小、常驻内存集的大小、打开文件描述符的数量、分配堆栈的最大大小、CPU 时间、单个用户的最大线程数、Shell 进程所能使用的最大虚拟内存。同时，它支持硬资源和软资源的限制。</p><p>  作为临时限制，ulimit 可以作用于通过使用其命令登录的 shell 会话，在会话终止时便结束限制，并不影响于其他 shell 会话。而对于长期的固定限制，ulimit 命令语句又可以被添加到由登录 shell 读取的文件中，作用于特定的 shell 用户。</p><p>参数说明</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">-a：显示目前资源限制的设定；</span><br><span class="line">-c &lt;core文件上限&gt;：设定core文件的最大值，单位为区块；</span><br><span class="line">-d &lt;数据节区大小&gt;：程序数据节区的最大值，单位为KB；</span><br><span class="line">-f &lt;文件大小&gt;：shell所能建立的最大文件，单位为区块；</span><br><span class="line">-H：设定资源的硬性限制，也就是管理员所设下的限制；</span><br><span class="line">-m &lt;内存大小&gt;：指定可使用内存的上限，单位为KB；</span><br><span class="line">-n &lt;文件数目&gt;：指定同一时间最多可开启的文件数；</span><br><span class="line">-p &lt;缓冲区大小&gt;：指定管道缓冲区的大小，单位512字节；</span><br><span class="line">-s &lt;堆叠大小&gt;：指定堆叠的上限，单位为KB；</span><br><span class="line">-S：设定资源的弹性限制；</span><br><span class="line">-t &lt;CPU时间&gt;：指定CPU使用时间的上限，单位为秒；</span><br><span class="line">-u &lt;程序数目&gt;：用户最多可开启的程序数目；</span><br><span class="line">-v &lt;虚拟内存大小&gt;：指定可使用的虚拟内存上限，单位为KB。</span><br></pre></td></tr></table></figure><h1 id="limit-conf-文件说明"><a href="#limit-conf-文件说明" class="headerlink" title="limit.conf 文件说明"></a>limit.conf 文件说明</h1><p>  limits.conf 文件是 Linux PAM（插入式认证模块，Pluggable Authentication Modules）中 pam_limits.so 的配置文件，pam_limits 模块对用户的会话进行资源限制。对系统访问资源有一定保护作用。</p><p>一个 shell 的初始limits就是由 pam_limits 设定的，用户登录后，pam_limits 会给用户的shell设定在 limits.conf 定义的值。</p><p>pam_limits模块对用户的会话进行资源限制，然后 /etc/pam.d/ 下的应用程序调用 pam_***.so 模块。<br>pam_limits 的设定值也是 per-process 的。<br>pam_limits 的设置是永久生效的。</p><p>limit.conf 文件的格式如下：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&lt;domain&gt;        &lt;<span class="built_in">type</span>&gt;  &lt;item&gt;  &lt;value&gt;</span><br></pre></td></tr></table></figure><ul><li>&lt;domain&gt; 可以是如下:</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">- user   可以是一个用户名</span><br><span class="line">- @group 可以是一个组名，但是要加@ ，例如：@group</span><br><span class="line">- *      通配符*来做所有用户的限制</span><br><span class="line">- the wildcard %, can be also used with %group syntax, <span class="keyword">for</span> maxlogin <span class="built_in">limit</span></span><br></pre></td></tr></table></figure><ul><li>&lt;type&gt; 只能是下列三个值之一:</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">    - soft  当前系统生效的设置值</span><br><span class="line">    - hard  系统中所能设定的最大值</span><br><span class="line">    - -     用 - 就表明同时设置了 soft 和 hard 的值。</span><br><span class="line"></span><br><span class="line">soft 的限制不能比hard 限制高</span><br></pre></td></tr></table></figure><ul><li>&lt;item&gt; 可以是下列的选项之一:</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line">- core           限制内核文件的大小(KB)               - limits the core file size (KB)</span><br><span class="line">- data           最大数据大小(KB)                     - max data size (KB)</span><br><span class="line">- fsize          最大文件大小(KB)                     - maximum filesize (KB)</span><br><span class="line">- memlock        最大锁定内存地址空间(KB)             - max locked-in-memory address space (KB)</span><br><span class="line">- nofile         打开文件的最大数目                   - max number of open file descriptors</span><br><span class="line">- rss            最大持久设置大小(KB)                 - max resident <span class="built_in">set</span> size (KB)</span><br><span class="line">- stack          最大栈大小(KB)                       - max stack size (KB)</span><br><span class="line">- cpu            以分钟为单位的最多 CPU 时间          - max CPU time (MIN)</span><br><span class="line">- nproc          进程的最大数目                       - max number of processes</span><br><span class="line">- as             地址空间限制(KB)                     - address space <span class="built_in">limit</span> (KB)</span><br><span class="line">- maxlogins      此用户允许登录的最大数目             - max number of logins <span class="keyword">for</span> this user</span><br><span class="line">- maxsyslogins   在系统上可以登录的最大数量           - max number of logins on the system</span><br><span class="line">- priority       优先运行该用户的进程                 - the priority to run user process with</span><br><span class="line">- locks          用户可以持有的文件锁的最大数量       - max number of file locks the user can hold</span><br><span class="line">- sigpending     最大等待信号数                       - max number of pending signals</span><br><span class="line">- msgqueue       POSIX消息队列使用的最大内存          - max memory used by POSIX message queues (bytes)</span><br><span class="line">- nice           最大的优先级允许提高到值:[-20, 19]   - max nice priority allowed to raise to values: [-20, 19]</span><br><span class="line">- rtprio         最大的实时优先级                     - max realtime priority</span><br></pre></td></tr></table></figure><ul><li>&lt;value&gt; 可以选择如下之一：</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">    - 0          最小值</span><br><span class="line">    - x          范围内的整数</span><br><span class="line">    - unlimited  不做限制</span><br><span class="line"></span><br><span class="line">最大值不要超过系统限制的最大值。</span><br></pre></td></tr></table></figure><h1 id="查看当前-limit-限制"><a href="#查看当前-limit-限制" class="headerlink" title="查看当前 limit 限制"></a>查看当前 limit 限制</h1><p>使用 ulimit -a 即可查看当前的 limit ，open files 对应的就是当前登陆用户的最大文件打开数量。（也可以用 ulimit -n 快速查看）</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line">[root@hulk ~]<span class="comment"># ulimit -a</span></span><br><span class="line">core file size          (blocks, -c) 0</span><br><span class="line">data seg size           (kbytes, -d) unlimited</span><br><span class="line">scheduling priority             (-e) 0</span><br><span class="line">file size               (blocks, -f) unlimited</span><br><span class="line">pending signals                 (-i) 31847</span><br><span class="line">max locked memory       (kbytes, -l) 64</span><br><span class="line">max memory size         (kbytes, -m) unlimited</span><br><span class="line">open files                      (-n) 1024</span><br><span class="line">pipe size            (512 bytes, -p) 8</span><br><span class="line">POSIX message queues     (bytes, -q) 819200</span><br><span class="line">real-time priority              (-r) 0</span><br><span class="line">stack size              (kbytes, -s) 8192</span><br><span class="line">cpu time               (seconds, -t) unlimited</span><br><span class="line">max user processes              (-u) 31847</span><br><span class="line">virtual memory          (kbytes, -v) unlimited</span><br><span class="line">file locks                      (-x) unlimited</span><br><span class="line">[root@hulk ~]<span class="comment">#</span></span><br></pre></td></tr></table></figure><h1 id="临时修改-limit-限制"><a href="#临时修改-limit-限制" class="headerlink" title="临时修改 limit 限制"></a>临时修改 limit 限制</h1><p>很多时候为了检查问题，需要临时修改设置以确认问题的原因，或者不希望永久生效，那么可以使用如下命令进行快速设置</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">ulimit</span> -n 4096</span><br></pre></td></tr></table></figure><p>很多文章称 ulimit -n 只允许设置得越来越小，比如先执行了ulimit -n 1000，在执行ulimit -n 1001，就会报 “cannot modify limit: Operation not permitted” 错误。<br>这个其实也是不准确的说法。首先要搞清楚，任何用户都可以执行ulimit，但root用户和非root用户是非常不一样的。</p><p>非root用户只能越设置越小，不能越设置越大。<br>root 用户没有限制，可以随意增加或者缩小。</p><h1 id="永久修改-limit-限制"><a href="#永久修改-limit-限制" class="headerlink" title="永久修改 limit 限制"></a>永久修改 limit 限制</h1><p>上述的设置只能临时生效，如果想要永久生效，那么要换其他方法。<br>想要永久生效，有2种方法。</p><h2 id="将上述命令写到登陆后默认加载的文件"><a href="#将上述命令写到登陆后默认加载的文件" class="headerlink" title="将上述命令写到登陆后默认加载的文件"></a>将上述命令写到登陆后默认加载的文件</h2><p>该方法对应的操作是，如果需要<br>所有用户有效，将 ulimit -n 4096 添加到 /etc/profile 。 所有用户登录后都会检查该文件，并加载其中的配置。<br>特定用户有效，将 ulimit -n 4096 添加到对应用户的 ~/.bash_profile 。 用户登录后都会检查自己家目录下的 .bash* 文件，并加载其中的配置。</p><p><strong>个人并不建议使用这种方式进行修改，原因是修改不好或者在某些未考虑周全的情况下，会导致用户无法登录系统，人为增加故障率</strong></p><h2 id="修改-limit-conf-配置文件"><a href="#修改-limit-conf-配置文件" class="headerlink" title="修改 limit.conf 配置文件"></a>修改 limit.conf 配置文件</h2><p>在 /etc/security/limits.conf 文件中按照文件的规则添加配置例如</p><p>设置 test 的最大打开数为8196</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">test - nofile 8196</span><br></pre></td></tr></table></figure><p>如果对某一用户或者某中特定的场景有很多的 limit 设置，那么不建议直接修改 /etc/security/limits.conf 文件，这样管理起来成本太大。<br>这种情况下，可以在 /etc/security/limits.d/ 目录下新建 .conf 结尾的配置文件进行单独管理，pam_limits.so 在执行时也会一并加载。</p><p>在系统里，/etc/security/limits.d/ 目录下的文件会覆盖 /etc/security/limits.conf 的内容，所以如果在 limits.conf 文件里配置的内容不要和 limits.d 目录下的内容冲突，如果担心冲突，可以将配置都放在 limits.d 下进行管理。</p><p>覆盖的顺序是，</p><ol><li><p>limits.d 目录下的会覆盖 limits.conf 文件。</p></li><li><p>limits.d 目录下按照英文字母顺序进行加载，后加载的覆盖前边加载的 。</p></li><li><p>数字应该按照 01 、02、……09、10 这样的顺序进行排序。</p></li></ol><h1 id="修改系统总限制。"><a href="#修改系统总限制。" class="headerlink" title="修改系统总限制。"></a>修改系统总限制。</h1><p>上边讲了很多种查看和修改的方法，一般情况下是够用了，那么现在来说说特殊情况。上边提过，最大文件打开数量最大不要超过系统的限制。</p><p>那么怎么查看呢？系统将这个数字存储在了 /proc/sys/fs/file-max 文件，直接查看就好。/proc/sys/fs/file-nr 文件里存储了整个系统目前使用的文件句柄数量。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">[<span class="built_in">test</span>@hulk ~]$ cat /proc/sys/fs/file-max</span><br><span class="line">807968</span><br><span class="line">[<span class="built_in">test</span>@hulk ~]$ cat /proc/sys/fs/file-nr</span><br><span class="line">14080807968</span><br><span class="line">[<span class="built_in">test</span>@hulk ~]$</span><br></pre></td></tr></table></figure><p>那么怎么修改这个值呢？有2个方法，一个是临时的，一个是永久的。</p><h2 id="临时修改系统限制"><a href="#临时修改系统限制" class="headerlink" title="临时修改系统限制"></a>临时修改系统限制</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">echo</span>  6553560 &gt; /proc/sys/fs/file-max</span><br></pre></td></tr></table></figure><h2 id="永久修改系统限制"><a href="#永久修改系统限制" class="headerlink" title="永久修改系统限制"></a>永久修改系统限制</h2><p>修改 /etc/sysctl.conf, 加入下列配置，由于修改了系统的内核参数，所以需要使用 sysctl -p 来使新的参数生效。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">fs.file-max = 6553560</span><br></pre></td></tr></table></figure><h1 id="注意"><a href="#注意" class="headerlink" title="注意"></a>注意</h1><ul><li>数值设置根据实际情况进行设置，不要一味的增大，否则会导致系统故障无法运行；</li><li>网上说修改了 limit.conf 以后如果要生效，必须要确保 pam_limits.so 文件被加入到启动文件中。查看 /etc/pam.d/login 文件中有：session required /lib/security/pam_limits.so 。我在 CentOS 7 的系统里找了/etc/pam.d/login 文件，发现没有 pam_limits.so ， 也可以正常生效;</li><li>修改系统最大值时或许可以参考本地磁盘或者存储的相关指标，不要“超标”； </li><li>limits.conf 和sysctl.conf区别在于limits.conf是针对用户，而sysctl.conf是针对整个系统参数配置。</li></ul><p>参考链接</p><ul><li><a href="http://man.linuxde.net/ulimit" target="_blank" rel="noopener">http://man.linuxde.net/ulimit</a></li><li>linux 系统文件 /etc/security/limits.conf </li><li><a href="http://smilejay.com/2016/06/centos-7-systemd-conf-limits/" target="_blank" rel="noopener">http://smilejay.com/2016/06/centos-7-systemd-conf-limits/</a></li></ul><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;今天在使用 Prometheus 时遇到了问题，报错  err=”list block dirs /prometheus/data/: open /prometheus/data/: too many open files”, 经查询发现，系统默认的普通用户系统最大打开文件数为 1024，Prometheus 数据太多导致该问题，将普通用户的这个限制适当的上调即可。&lt;/p&gt;
&lt;p&gt;经过这个事情发现，对 limit 的掌握并不熟悉，特意搜索了 limit 的相关信息整理在这里，学习以及备忘。&lt;/p&gt;
&lt;p&gt;环境说明：&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;CentOS Linux release 7.4.1708 (Core)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;Linux hulk 3.10.0-693.el7.x86_64 &lt;span class=&quot;comment&quot;&gt;#1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
    
    </summary>
    
    
      <category term="linux" scheme="https://erdong.site/categories/linux/"/>
    
      <category term="system" scheme="https://erdong.site/categories/linux/system/"/>
    
    
      <category term="linux" scheme="https://erdong.site/tags/linux/"/>
    
      <category term="limit" scheme="https://erdong.site/tags/limit/"/>
    
  </entry>
  
  <entry>
    <title>网易博客要关闭了</title>
    <link href="https://erdong.site/life/gossip/blog-163-closed.html"/>
    <id>https://erdong.site/life/gossip/blog-163-closed.html</id>
    <published>2018-08-23T03:45:47.000Z</published>
    <updated>2020-07-22T02:33:34.094Z</updated>
    
    <content type="html"><![CDATA[<p>今天在查找资料时，有一条跳转到了网易的博客，接着就弹出了网易的博客要关闭的提示框，提示公告如下：</p><p><a href="http://blog.163.com/bearer.do" target="_blank" rel="noopener">http://blog.163.com/bearer.do</a></p><p>没想到曾经很大的博客网站就这样要宣布结束了，很是感慨，不知道要说什么。<br> <a id="more"></a> </p><p>2020-07-19 更新</p><p>在阿里云的云栖社区写了一年的博客， 在 2020.06.11 关闭了，要迁移到阿里云开发者社区。</p><p>======================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;今天在查找资料时，有一条跳转到了网易的博客，接着就弹出了网易的博客要关闭的提示框，提示公告如下：&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://blog.163.com/bearer.do&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://blog.163.com/bearer.do&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;没想到曾经很大的博客网站就这样要宣布结束了，很是感慨，不知道要说什么。&lt;br&gt;
    
    </summary>
    
    
      <category term="life" scheme="https://erdong.site/categories/life/"/>
    
      <category term="gossip" scheme="https://erdong.site/categories/life/gossip/"/>
    
    
      <category term="blog" scheme="https://erdong.site/tags/blog/"/>
    
  </entry>
  
  <entry>
    <title>CentOS 7 初始化</title>
    <link href="https://erdong.site/linux/system/centos7-initialization.html"/>
    <id>https://erdong.site/linux/system/centos7-initialization.html</id>
    <published>2018-08-22T10:51:04.000Z</published>
    <updated>2021-12-22T10:07:10.413Z</updated>
    
    <content type="html"><![CDATA[<p>使用 Linux 首要的一点就是安装操作系统，初始化环境，这个过程根据不同的需求会有不同的方式结果。<br>下面我来介绍一个实验环境的搭建过程。</p><p>需求：</p><ul><li><p>系统要求 CentOS 7，内核无要求，不需要变化。</p></li><li><p>可以方便的安装各种软件。</p></li><li><p>关闭防火墙，降低实验的复杂程度（生产环境不建议关闭防火墙）。</p></li><li><p>支持 docker 的使用。</p><a id="more"></a> </li></ul><h1 id="1-最小化安装-CentOS-7"><a href="#1-最小化安装-CentOS-7" class="headerlink" title="1. 最小化安装 CentOS 7"></a>1. 最小化安装 CentOS 7</h1><p>为了提高安装速度，默认最小化安装，这样只有200+个包，系统安装会很快完成。如果时间充足，可以按照完整版、开发版等。</p><p>我经常使用的是 CentOS-7-x86_64-Minimal-1708.iso  这个版本。</p><h1 id="2-更新软件包"><a href="#2-更新软件包" class="headerlink" title="2. 更新软件包"></a>2. 更新软件包</h1><p>有时候安装的时候不一定是最新的发行版。可以通过如下命令去进行相应的升级。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">yum update</span><br></pre></td></tr></table></figure><h1 id="3-安装-epel-仓库"><a href="#3-安装-epel-仓库" class="headerlink" title="3. 安装 epel 仓库"></a>3. 安装 epel 仓库</h1><p>CentOS 默认的 yum 仓库包含的软件数量有些少，而且一些最新的版本不在里头。为了更方便的使用各种软件以及使用软件的更新版本，所有建议安装 epel 源，当然也可以安装其他的第三方源。安装方法有2种，</p><ul><li>自行下载 rpm 安装</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">wget http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-14.noarch.rpm</span><br><span class="line">rpm -ivh epel-release-7-14.noarch.rpm</span><br></pre></td></tr></table></figure><p>当前的 epel 源的 rpm 包连接是有效的，如果版本更新了以后，请到对应的连接下寻找新的版本下载。</p><ul><li>通过 yum 安装</li></ul><p>通过如下命令可以安装最新的 epel 源。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">yum install epel-release</span><br></pre></td></tr></table></figure><h1 id="4-关闭-SELinux"><a href="#4-关闭-SELinux" class="headerlink" title="4. 关闭 SELinux"></a>4. 关闭 SELinux</h1><p>修改/etc/selinux/config文件中设置SELINU =disabled，然后重启服务器。</p><p>临时方法–设置系统参数<br>使用命令 setenforce 0<br>附：<br>setenforce 1 设置SELinux成为enforcing模式<br>setenforce 0 设置SELinux成为permissive模式</p><h1 id="5-安装必要的工具包"><a href="#5-安装必要的工具包" class="headerlink" title="5. 安装必要的工具包"></a>5. 安装必要的工具包</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">yum install vim git curl wget htop iotop iftop net-tools nethogs iptables-services</span><br></pre></td></tr></table></figure><p>这些都是一些基础的工具</p><ul><li>vim 编辑工具</li><li>git  代码管理客户端</li><li>curl 一个利用URL规则在命令行下工作的文件传输工具，很强大的http命令行工具。</li><li>wget 下载工具</li><li>htop iotop iftop net-tools nethogs 一些性能查看工具</li><li>iptables-services 防火墙，必要的时候使用。</li></ul><h1 id="6-暂时停止并禁用防火墙"><a href="#6-暂时停止并禁用防火墙" class="headerlink" title="6. 暂时停止并禁用防火墙"></a>6. 暂时停止并禁用防火墙</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">systemctl stop firewalld.service</span><br><span class="line">systemctl <span class="built_in">disable</span> firewalld.service</span><br></pre></td></tr></table></figure><p>CentOS 7 默认开启了一个一个简单的防火墙，叫做 firewalld ，是 iptables 的简化版，</p><h1 id="7-安装-docker"><a href="#7-安装-docker" class="headerlink" title="7. 安装 docker"></a>7. 安装 docker</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 添加阿里云的源</span></span><br><span class="line">cat &gt;&gt;/etc/yum.repos.d/docker.repo&lt;&lt;EOF</span><br><span class="line">[docker-ce-edge]</span><br><span class="line">name=Docker CE Edge - \<span class="variable">$basearch</span></span><br><span class="line">baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/\<span class="variable">$basearch</span>/edge</span><br><span class="line">enabled=1</span><br><span class="line">gpgcheck=1</span><br><span class="line">gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg</span><br><span class="line">EOF</span><br><span class="line"></span><br><span class="line"><span class="comment"># 安装 docker</span></span><br><span class="line">yum install docker-ce</span><br></pre></td></tr></table></figure><p>至此，一个基于 CentOS 7 的可以使用 docker 的基础实验环境已经搭建完成，我后续的很多实验都是基于这个环境进行的。</p><p>=========================<br>Erdong, A Linux user !</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;使用 Linux 首要的一点就是安装操作系统，初始化环境，这个过程根据不同的需求会有不同的方式结果。&lt;br&gt;下面我来介绍一个实验环境的搭建过程。&lt;/p&gt;
&lt;p&gt;需求：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;系统要求 CentOS 7，内核无要求，不需要变化。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;可以方便的安装各种软件。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;关闭防火墙，降低实验的复杂程度（生产环境不建议关闭防火墙）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;支持 docker 的使用。&lt;/p&gt;
    
    </summary>
    
    
      <category term="linux" scheme="https://erdong.site/categories/linux/"/>
    
      <category term="system" scheme="https://erdong.site/categories/linux/system/"/>
    
    
      <category term="linux" scheme="https://erdong.site/tags/linux/"/>
    
  </entry>
  
  <entry>
    <title>Hello World</title>
    <link href="https://erdong.site/uncategorized/hello-world.html"/>
    <id>https://erdong.site/uncategorized/hello-world.html</id>
    <published>2018-08-22T04:22:12.000Z</published>
    <updated>2019-10-26T14:00:40.816Z</updated>
    
    <content type="html"><![CDATA[<p>Welcome to <a href="https://erdong.site">Erdong’s blog</a>! This is my first blog. </p><h2 id="Quick-Start"><a href="#Quick-Start" class="headerlink" title="Quick Start"></a>Quick Start</h2><p>  最近花时间搭建了这个博客，基于 hexo 和 github pages，想把日常遇到的问题和一些学习的知识点记录下来，梳理自己的知识体系，不断提高自己的能力。</p><p>  个人比较喜欢阮一峰的博客，他的文字描述总是简单易懂，容易学习，希望以后也能达到这一目的。</p><p>  人生总是存在各种各样的巧合，好像总和数字2会有关系，像这次发布第一篇博客刚好赶上22号，年份和月份全部是2的整数倍。</p><p>  发现阮一峰有一个关于中文文档编写的规范，会尽量的按照这个来写。<a href="https://github.com/ruanyf/document-style-guide" target="_blank" rel="noopener">document-style-guide</a></p><p>惯例: hello world 输出。一切的开始。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/bin/bash</span></span><br><span class="line"><span class="comment">#version: 1.0</span></span><br><span class="line"><span class="comment">#Author: Erdong</span></span><br><span class="line"><span class="built_in">echo</span> Hello World</span><br><span class="line"><span class="built_in">echo</span> 2018-08-22</span><br></pre></td></tr></table></figure>]]></content>
    
    <summary type="html">
    
      
      
        &lt;p&gt;Welcome to &lt;a href=&quot;https://erdong.site&quot;&gt;Erdong’s blog&lt;/a&gt;! This is my first blog. &lt;/p&gt;
&lt;h2 id=&quot;Quick-Start&quot;&gt;&lt;a href=&quot;#Quick-Start&quot; class
      
    
    </summary>
    
    
    
  </entry>
  
</feed>
