使用 Prometheus 监控服务器性能

最近一直在思考如何对线上服务做深度监控。基础的服务可用性监控很简单,定期 Ping 即可。但是怎样才能监控服务器的一些更加关键的数据呢?比如,每一个 API Point 的请求次数(QPS),最大响应时间,平均响应时间等。最终我希望实现的效果是有一个 Dashboard,我可以清楚地看到各种参数曲线,对服务器的运行情况了然于胸。

绘制 Dashboard 不难,目前提供数据可视化的工具很多,随便选一个都能满足需要。关键问题是,怎样将整个流程打通?

  • 服务器该以怎样的形式暴露出数据?
  • 数据怎样被收集和存储起来?
  • 存储起来的数据怎样提供给数据可视化工具?
  • 怎样做到足够灵活,可以可视化自己感兴趣的任意数据?
2017.03.12
使用 Go 编写代码明信片生成器

很早之前就看过到关于 commits.io 的一个帖子,这个站点专门制作代码明信片。什么是代码明信片呢?如下图。

2017.02.18
图床on七牛,简单好用的图床插件

注:因为七牛 API 修改,编辑于 2019-03-25T16:20:00。

最近在使用过程中发现 图床on微博 出了点问题,响应体的 JSON 解析错误,不用想都知道肯定是微博修改了响应体的数据结构(微博图片上传接口响应体是 html 和 json 混在一起,十分专业)。简单修复了一下,测试的时候却发现,微博的图片上传接口变得不再稳定了,经常 404。看来微博图床是不能用了,正好我早就觉得微博不是个好图床,缺点如下:

  1. 经常性的要重新登陆,麻烦死了
  2. 无法获取到完整的上传图片列表
  3. 无法删除上传的图片
  4. 服务状态不可控,指不定什么时候接口就不能用了
2017.01.23
使用 pprof 优化 Golang 性能

Donald E.Knuth 说过一句非常著名的话,过早的优化是万恶之源,原文如下:

We should forget about small efficiencies, say about 97% of the time; premature optimization is the root of all evil.

我是十分赞同这句话的,并且在开发过程中也深有体会。什么叫做 过早的优化 呢?即不需要考虑优化的时候你在考虑优化。这绝对不意味着可以任性地写代码,随意地选择数据结构和算法。这句话是告诉我们,在程序开发的早期阶段,程序员应该专注在程序的 逻辑实现 上,而不是专注在程序的 性能优化 上。用正确的数据结构和算法,优美合理的语句实现你要的功能。而不是满脑子在想:“这个函数是不是可以优化一下?”。

2016.11.14
使用 SVG Morphing 制作自己的加载动画

每一个需要让用户等待的应用都应该有加载界面,可以是简单的文本,比如 加载中…,也可以是有趣的动画。当然,一个好玩的加载动画能够大大增加用户等待的耐心,谁喜欢枯燥的文字呢。所以,投入点时间寻找或者制作一个加载动画是很有意义的。感谢 SVG 和相关的动画技术,现在制作一款复杂的动画已经变得十分容易了。

这里我使用 SVG 的形变技术(Shape Morphing)来做一个简单的矩形、三角形、圆形变换的动画。

2016.11.07
从零开始搭建一个 ELKB 日志收集系统

当今的软件开发 多核 以及 分布 已经成为了常态,基本上稍大型的应用都是多台机器分布式部署。分布式在提高性能的同时也带来了很多问题,今天我们只讨论一点,那就是如何处理多台机器线上系统的日志。

以我司的某个应用 T 为例,部署在了百度云 5 台机子上,其中一台拥有公网 IP,使用了百度云提供的负载均衡服务。每次想要在日志中检索某个关键字时,基本步骤如下:

  • 打开五个 SSH,登陆拥有公网 IP 的那台机器
  • 在另外四个 SSH 中分别登陆其他的内网机器
  • 对日志文件进行检索
2016.10.21
从零开始搭建一个 HTTPS 网站

我们都知道 HTTP 是非常不安全的,不安全的根源在于 HTTP 是明文传输。你在谷歌搜索了一个关键词(假设 Google 使用 HTTP),HTTP 数据包从你的计算机传送到服务器的过程中,中间经过的任意一个设备都可以轻松解析你的数据包,获取你的关键词,你的隐私毫无保障。

你的信息被人获取只是明文传输的其中一个问题。总体来说,明文传输有三个问题:

  • 窃听:第三方可以获取你的信息
  • 篡改:第三方可以修改你的信息
  • 冒充:第三方可以冒充你的身份
2016.09.05
使用 Dnsmasq 搭建内网 DNS 服务器

在日常开发过程中,我们经常要配置各种 host,比如公司内部的各种服务,或者测试项目的时候暂时把生产环境 URL 配置到本地上等等。一般采取的方法都是每个人手动编辑自己的 /etc/hosts 文件。这个做法有两个缺点:

  • 手动编辑 /etc/hosts 文件非常麻烦,需要 sudo
  • 工作量重复,团队内每个人都要配置一遍
2016.08.20
使用 Ngrok 实现内网穿透

很多时候,我们都有这样的需求:需要将本地正在开发的服务暴露在公网上,也就是从外网直接访问我们本机上的服务。正常情况下,这是办不到的,因为我们的本机并没有公网 IP,我们的本机处在内网当中。

这里需要顺手提及一个知识:NAT 穿透。我们的机器一般都在路由器的内网当中,IP 地址基本上都是 192.168.x.x 系列,我们并没有公网 IP,那么如何访问外网呢?我们打开浏览器访问 Google,Google 与我们主机之间如何通信?假设我们主机 IP 为 192.168.0.100,路由器 LAN IP 为 192.168.0.1,WAN IP 为 211.22.145.234(这是一个公网IP),Google 服务器 IP 为 74.125.204.101,详细通信流程如下。

2016.05.21
编写第一个 Chrome 插件 —— 图床on微博

之前写博客需要的图片全部都是本地存储,非常麻烦。流程如下:先用截图工具截图(QQ 截图就很好用),然后移动到目标文件夹,然后在 Markdown 中输入绝对路径(Jekyll 生成站点以后路径会变化,所以不能使用相对路径)。除了麻烦以外,在 Markdown 中编写时还是看不到图的,因为路径不对。

上次花点时间把所有的图片全部迁移到微博图床了。在 Chrome Web Store 中搜索了一下,选了新浪微博图床。功能是可以用的,不过有一些问题,最让我无法忍受的就是一点击按钮就会弹出一个 Chrome 的空白窗口,无法关闭,只有重启 Chrome 才行,这个实在是忍无可忍。

闲话不说了,总之我发现这是一次绝佳的自己造轮子的机会。自己造自己用多好玩,所以我准备自己写一个 Chrome 插件,来实现微博图床的功能。起什么名字好呢,恩,这真是一个世界难题。想了半天,决定叫做“图床on微博”吧,是的,我是 RoR 粉丝。

2016.04.06
Prev
2 / 3
Next