之前用过tsar做监控,但没有基于浏览器的图表展示,而且tsar收集数据很频繁,容易写坏SD卡。后来一直用Xively SaaS服务,但因为服务在国外,访问速度一直不尽人意。直到今天早上读到InfoQ的一篇文章才知道了Prometheus,看了一下介绍后发现Prometheus的以下特点非常合适在树莓派上部署:
- 采用Go实现支持,天然支持跨平台,配置相当简单,维护和二次开发的成本小;
- 采集数据支持Pull和Push模式,可以自定义不同采集点的采样频率,适合轻量型应用降低能耗;
- 二次计算和查询方式很灵活
- 自带
Grafana
数据可视化工具;
- 可配置的内存+磁盘存储大小,采用的时间序列文件和Level DB做索引效率较高,不会让监控软件本身消耗过多的树莓派计算和存储资源
监控系统架构

安装
Prometheus采集数据的主要方式是通过HTTP到指定的URL上定时采集,为了支持Push方式收集数据,我们还需要安装一个Prometheus Pushgateway
作为HTTP服务器来给Prometheus提供数据,你的应用则可以通过命令行或编程接口方式将数据推送到Pushgateway
树莓派基金会今年推出的新品Raspberry Pi 3已经到手,官方宣传性能比树莓派2代快50%,比树莓派1代快10倍,第一次使用的64位四核处理器(博通BCM2837)配备了ARM Cortex-A53处理器,内置了802.11 b/g/n 2.4GHz WIFI和蓝牙4.1,显卡没变,还是双核VideoCore IV(并不支持4K视频)。CPU升级也对能耗有了更高的要求,官方说法最好是使用5V 2.5A的电源输入(iPad充电器),实测在无外设的情况下,2A的电流输出也可以让Pi 3正常运行。价格和树莓派2也一样,官方售价税前35美金,国内可以在淘宝上买到,238元一枚,点此购买

我深深的认为每个程序员都需要有一块树莓派,24*7的运行在家里的网络上 ,投入成本在300人民币以内(树莓派加电源:250,SD卡:50),每年电费在10元以内。树莓派支持各种编程语言的开发,安装体验各种操作系统非常简单,丰富的外部接口,支持很多类型的传感器和控制器外设,可以让你轻松设计和实现智能硬件,技术让生活更美好~
外观
树莓派3的规格大小则和树莓派2完全一样,你甚至可以直接用树莓派2的外壳,完全贴合。

背面看略有不同,中间的芯片是1G内存,树莓派3的内存速度快了1倍,右边是CF卡插槽,树莓派2是回弹式卡槽(取出CF卡时只要往力再摁一下就会弹出),树莓派3可能为了降低成本或是因为板卡空间的问题改成了更紧凑的插入式,装上外壳后取出的时候有点费劲,我需要用瑞士军刀的镊子夹出来。

设置步骤
在阿里云中国和美国都购买一个VPS,用同样的操作系统,都安装好 shadowsocks-libev
( https://github.com/shadowsocks/shadowsocks-libev )
编辑配置文件 config.json
如下:
{
"server":"<your_ip_address>",
"local_address":"0.0.0.0",
"server_port":10080,
"local_port":1080,
"password":"password",
"method":"bf-cfb",
"timeout":600
}
Docker
Docker是目前非常流行的代码运行容器,操作系统虚拟化,运维自动化架构和开源的解决方案。
Docker的基础是Linux容器(LXC)技术,相比传统的VM虚拟化技术, LXC更轻量,性能更好。
Docker采用Golang语言开发,在LXC基础上Docker进行了封装,简化了容器的管理。
Docker还提供了一个标准(Dockerile)来实现软件部署环境代码化,全球的开发和运维工程师可以通过官方的Docker Hub仓库分享自己创建的镜像,使用者则可以快速的把系统和应用部署到自己的环境。
树莓派二代
树莓派二代的CPU有4核,运行速度是第一代的6倍,通过Docker快速部署开发环境,开发应用,再把开发好的系统通过镜像分享和发布出去也是非常有意义的事。因为树莓派的官方操作系统Raspbian并不支持Docker,本文主要介绍下如何在树莓派二代上运行Docker的几种方法。
Arch Linux ARM
Arch Linux ARM 是由开源社区维护专为ARMv6(如树莓派一代)和 ARMv7(如树莓派二代, pcDuino3)等嵌入式硬件提供内核及软件支持的Linux发行版本。
背景
我们的手机经常会处于弱网情况下,电梯里,高铁上,在地铁站,电影院里。。。如果手机应用不针对弱网做优化,就会出现:白屏页面刷不出来,界面卡死,错误提示一堆,菊花转不停,用户抓狂。。。
移动应用开发团队应该将App在弱网下的可用性作为一个重要的性能指标,在设计和开发阶段考虑在弱网下的体验。
Linux可以使用netem
或iptables
来实现以下网络模拟:
- packet delay 网络包延迟
- packet loss 网络包丢失
- packet corruption 错误的网络包
- packet duplication 重复发送网络包
- packet re-ordering 网络包传输顺序
- bandwidth 带宽控制
Facebook最近也开源了他们的augmented traffic control
: https://github.com/facebook/augmented-traffic-control 主要使用iptables
和python
实现,架构合理容易扩展,其控制方法允许多台手机同时使用,并应用不同的网络控制策略;因为提供了RPC接口,在其基础上二次开发也可以较方便的实现自动化弱网测试。
先看一下在iPhone 6 plus上用虾米播放高音质音乐的效果:


苹果的Airplay协议是通过基于RSTP(Real Time Streaming Protocol)协议通过UDP传输的无损编码音频流(Apple Lossless codec,音频流本身经过了AES加密,私钥是不公开的,这样只有苹果和其合作伙伴才能使用这个协议。但是2004年有人通过逆向工程获得了私钥并将其公开,这样我们也可以自己搭建低成本高音质的基于Airplay的音乐系统。在iPhone成为街机的时代,每个人的手机里有很多喜欢的音乐,如果在家里可以通过无线网络在音响系统里播放会方便很多。
硬件
- pcDunio Acadia 或 Raspberry Pi 一只
- 3.5mm音频线一根,类似这种
- 有源音箱一对
- 网线一根或USB无线网卡一只
音频芯片
好的音质需要好的音源,无损音乐加好的前端输出是必不可少的。
pcDuino Acadia集成的音频芯片是业界领先的英国Wolfson(欧胜微电子)为高清音频设计的WM8962 。树莓派集成的音频芯片则是由美国Broadcom(博通)封装在主芯片BCM2835里通过PWM (pulse-width modulation) 提供的,比较简单音质一般,达不到高清音频的要求。

最近互联网理财很流行, 好的理财产品一出来很快就抢光了。有24x7运行的低功耗树莓派在就可以帮你检查网页是否有更新并将更新的内容通知到你的手机上。
安装phantomjs
从 https://github.com/piksel/phantomjs-raspberrypi 下载已经编译好的phatomjs,并复制到$PATH
下
安装Node.js
在树莓派上编译Node.js非常非常耗时。。。你也可以下载已经编译好的node和npm
wget https://s3-eu-west-1.amazonaws.com/conoroneill.net/wp-content/uploads/2015/02/node-v0.12.0-linux-arm-pi.tar.gz
tar -zxvf node-v0.12.0-linux-arm-pi.tar.gz
cd node-v0.12.0-linux-arm-pi
sudo cp -R * /usr/local/
树莓派官方的操作系统Raspbian最少需要4G的SDCard,如果你恰好有比较小的SD卡怎么办呢?设计上树莓派只能从SD卡引导启动,但我们可以在SD卡上装一个最小的引导系统,然后把树莓派引导到U盘上启动。SD卡连续运行,读写比较频繁也容易损坏(我已经坏掉3张了。。。),相比之下U盘价格便宜些,读写速度可以比SD卡还高。
制作引导SD卡
这个引导系统只需要16M容量的SD卡,先把SD卡格式化成FAT(windows),然后拷贝下面的文件到根目录。
git clone https://github.com/hugozhu/mini_raspbian_boot
修改 cmdline.txt
中的 root=/dev/mmcblk0p2
为 root=/dev/sda2
以指定用U盘启动
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait cgroup_enable=memory
安装操作系统Raspbian到U盘
方法和安装到SD卡一样,在Mac上使用 dd
命令安装,在Windows上可以用win32diskimager:
如果你的树莓派不能通过路由器端口转发直接从家庭网络外访问,你还可以用类似聊天App一样的方式来和防火墙后的树莓派轻松交互,通过命令来控制树莓派。
Telegram

Telegram是一个跨平台的即时通讯软件,客户端和通讯及加密协议完全公开且开源。官方有正式发布Android,iOS,Mac OS X, Web等客户端版本;Telegram允许多端同时登录。我们在手机上安装Telegram客户端,同时在树莓派上用同一个帐号或另一个帐号也登录Telegram,那么就可以用手机和树莓派聊天了,更高级的一些用法可以是把树莓派帐号加到群聊中,实现类似微软小冰的功能;也可以由树莓派主动向你的手机Push消息实现提醒功能。
安装telegram-cli
Linux的Telegram客户端telegram-cli源代码在 https://github.com/vysheng/tg,按照Readme在树莓派上编译好。telegram-cli支持消息事件对lua脚本中的函数进行回调,支持的函数列表在:https://github.com/vysheng/tg/blob/master/README-LUA,也支持外部程序通过telegram-cli侦听的端口发送交互命令(一次连接只能一个命令)
Lua交互脚本
家里的宽带上下行都有10Mbps了吧?除了可以BT下载外还能让你的移动设备在外的时候也能科学上网。
区别于在海外架设VPN服务:
- 国内和大部分国外网站都可以直连而不降低速度;不像海外VPN所有流量(国内和国外网站)都要经过海外服务器,速度有一定的延迟
- 这个方案代理可以使用免费的Goagent服务;或低成本的ssh帐号;而租用海外VPS服务器自建服务或购买VPN帐号费用较高些;
- 利用的是家里的宽带,只有树莓派的硬件成本,没有主机托管成本;
假设家里的路由器IP地址为:192.168.1.1,树莓派2的IP地址为:192.168.1.3,以下是需要安装和设置步骤。
PPTP和L2TP VPN Server
首先在树莓派上安装和设置VPN服务器,移动设备就可以通过运营商网络连接回家里的树莓派(iPhone和Android都内置了PPTP和L2TP客户端),这样移动设备将以树莓派为路由访问网站,通过一些设置我们可以让树莓派提供科学上网服务。
关于PPTP和L2TP VPN设置和安装可以参考: http://hugozhu.myalert.info/2013/03/01/setup-l2tp-pptp-openvpn-on-ubuntu.html