服务器监控体系构建实战

本文根据群友分享整理而成。

作者介绍

赵舜东

江湖人称赵班长,曾在武警某部负责指挥自动化的架构和运维工作,2008年退役后一直从事互联网运维工作。
曾带团队负责国内某食品电商的运维工作,也是《saltstack入门与实践》作者之一。

主题简介

我们今天的话题是《中小企业监控体系构建实战》,前期分享了《中小企业自动化部署实战》还没有看到的朋友可以先阅读下,这样也能明白为何要定位中小企业。监控这个话题实在太大,所以本文的正确定位应该是如何构建一个“相对”完善的监控体系。

从面试开始

在之前的招聘面试中,我必问的一个问题就是“你们之前公司的监控体系是怎么做的?你认为怎么做效果比较好?”

经常得到这样类似的答案:“我们公司用的Nagios、Cacti做监控,或者说我们公司用Zabbix做监控”,再继续追问往往得到的也是如何使用这些工具的细节的回答。

这样的回答固然没错,但却反映出来运维人员经常会被工具迷惑双眼,从而忘记了最初的出发点。本文就以一个刚入职的运维工程师小王的故事来阐述监控体系,所以这个故事的名字叫做《小王特烦恼》。

1. 确定目标、统一思想

我们直接跳过什么是监控和监控的重要性等大段描述,先仔细的想一想,监控的目标是什么?

每个人的答案都不同,我的回答是:终极目标就是为了保证业务的持续和稳定运行。如此偏激的回答就是让读者从现在开始要站在业务的角度的开始规划监控体系,而不是某个技术范畴。

注意:本文不涉及性能测试、性能优化中的监控,所有文字的出发点都是日常运维监控。

在开始之前,我们还是先统一下认识:要监控一个对象,需要掌握哪些东西呢?

监控对象的理解:要监控的对象你是否了解呢?比如CPU到底是如何工作的?

监控对象的指标:我们要监控这个东西的什么属性?比如CPU的CPU使用率、负载、上下文切换。

确定报警基准线:怎么样才算是故障,要报警呢?比如CPU的负载到底多少算高?

如果上述的条件不满足,那就先不要开始实施监控了,因为等做完了,你会发现,然并卵?

2. 故事开始

王小明(化名)刚刚毕业,到了一家刚刚起步的电商公司任职:运维工程师,刚上班第一天,小王收到领导安排的光荣任务:把我们公司的监控搞起来!

小王想了好久,没想明白,索性不想了,从手头接触到的慢慢开始吧,于是小王决定先去机房看看。

2.1 硬件监控

到了机房,小王看着公司的各种品牌的服务器,想到的第一件事情就是,这些硬件设备,我要监控起来。

硬件设备监控是最基础的监控手段,比如定期的的机房巡检。

通常我们的服务器上都会有远程控制卡,如Dell的iDRAC,HP的ILO和IBM的IMM等,可以通过Web界面来进行硬件的监控和管理工作,如果购买企业级的授权,还可以使用控制台进行管理。

在Linux下,通常我们使用IPMI来完成物理设备的监控工作。通常必须要监控的就是温度、硬盘故障等。

小王编写了自己职业生涯的第一个脚本,就是使用ipmi工具获取温度传感器的数据,大于50就发一份邮件给他,虽然感觉不高端,但总算是有一个开始。

故障回想:之前我司托管在北京某机房的设备就出现过,因为刚好所在机柜区域的空调坏了,导致服务器温度过高,然后系统宕机。

2.2 系统监控

小王下一个想到的就是系统监控,公司全是Linux的服务器,系统资源的使用情况,肯定是要监控起来的。

系统监控是监控体系的基础,系统监控主要的对象有:

  • CPU
  • Memory
  • IO

CPU:关于CPU,有3个重要的概念:上下文切换(context switchs),运行队列(Run queue)和使用率(utilization)。

这也是我们CPU监控的三个重点。通常情况下,每个处理器的运行队列要小于等于3,CPU 利用率中user/system比例维持在70/30,上下文切换要根据系统繁忙程度来综合考量。

常用的监控工具有:top vmstat mpstat

内存:Linux虚拟内存是一个庞大的东东,通常我们需要监控内存的使用率、SWAP使用率、同时可以通过内存的使用率曲线来发现某些服务的内存溢出等。

监控工具有:free vmstat

IO:IO分为磁盘IO和网络IO。除了在做性能调优我们要监控更详细的数据外,那么日常监控,只关注磁盘使用率、io wait即可,网络也是监控网卡流量即可。工具有iostat iotop iftop。

TCP监控:在很多情况下有必要监控TCP的状态,可以使用netstat或者ss来获取所有的TCP连接,来展现11种不同的TCP连接状态的数量,可以在大并发中及时发现TCP的相关故障。

其它的系统监控还有运行的进程数、登陆用户、Open File等。

2.3 应用服务监控

小王把硬件监控和系统监控研究明白后,登陆到服务器上继续研究,偶然间一个ps aux,小王发现,我们服务器上运行了这么多的服务,那都需要监控起来啊。

应用服务监控也是监控体系中比较重要的内容,例如:

  • Apache:Apache提供了mod_status和mod_info模块用来输出Apache的状态,小王写了一个脚本,各种grep和awk搞定。
  • Nginx:同样有状态模块,编译的时候加上—with-http_stub_status_module,然后就可以使用stub_status on来开启了。
  • Memcached:小王使用nc给memcached发送了一个stats命令就获取到了所有想要的信息。
  • Redis:小王还是使用nc给redis发送了一个info命令就获取到了redis的相关状态。
  • JVM:使用jmconsole,或者jmx就可以进行远程监控。

于是小王,将线上的各种服务,都一个一个的进行了监控,这样这些服务的详细的运行状态就了如指掌了。

同时,还需要将所有的API接口状态进行监控,比如通过curl检查返回的HTTP状态码。有条件的用户,可以做一个URL监控平台,专门用来做这个事情。

2.4 引入Zabbix

自从小王接收到监控的任务后,这Shell编程能力是越来越强了,但是每天一打开邮箱就被各种报警所淹没,脚本多而杂乱。

小王想,我需要一个什么监控工具来干这些事,不能这么写脚本下去了。于是在网上进行各种搜索,发现了很多的监控工具如Nagios、Cacti、Zabbix,原来自己之前费那么大劲,这些工具早就实现了。

经过相关的对比,小王选择了Zabbix。然后之前的所有监控范畴,都可以整合到Zabbix中。

  • 硬件监控:Zabbix IPMI Interface
  • 系统监控:Zabbix Agent Interface
  • Java监控:Zabbix JMX Interface
  • 网络设备监控:Zabbix SNMP Interface
  • 应用服务监控:Zabbix Agent UserParameter
  • MySQL数据库监控:percona-monitoring-plulgins
  • URL监控:Zabbix Web 监控

这一下子把之前干的工作全集成到一个平台上了。而且之前编写的所有的应用服务的监控脚本,简单修改就可以使用。

同时也可以灵活的设置报警阈值、告警方式、告警升级、告警去重、告警依赖等等,同时还使用Zabbix的自动发现功能实现上线一台服务器后,自动添加监控。

使用Zabbix Proxy实现了多机房的分布式监控,这简直太棒了。

对于告警通知:邮件、微信、短信、钉钉等,都可以与Zabbix快速的集成,网上有很多此类文档。

同时,针对某些可以进行直接处理的报警,Zabbix可以触发Action来轻松帮你实现,故障的自动处理。

于是小王准备向经理汇报工作,此处省略300字,但是不到10分钟小王垂直头回来了。因为经理问了一个问题,小王回答不上来:小王,今天咱们网站的整体PV是多少?现在访问最多的页面是哪个?

2.5 流量分析

小王首先想到的是把访问日志拿出来各种awk然后sort一下,但是这次他没有急于开始,难道就没有做这些统计和分析的工具吗?

于是小王发现了google分析、百度统计、站长工具等等一堆统计的东西,只需要在页面嵌入一个js即可。

但是呢?这个数据始终是在对方那里,而且功能定制起来也不方便,于是google帮助了他,一个叫做piwik的开源项目映入眼帘。

网站流量分析对于运维人员来说,更是一门必须掌握的知识了。比如对于一家电商公司来说,通过对订单来源的统计和分析,可以了解我们在某个网站上的广告投入有没有收到预期的效果。可以区分不同地区的访问人数、甚至商品交易额等。

而且,流量分析是运维向运营拓展的必经之路,作为一名运维工程师很有必要掌握公司站点的各种访问详情。

2.6 网络监控

作为一个针对全国用户的电商网站,时刻掌握各地到机房的网络状态是小王的下一个监控目标。

网络监控是我们构建监控平台是必须要考虑的,尤其是针对有多个机房的场景,各个机房之间的网络状态,机房和全国各地的网络状态都是我们需要重点关注的对象,那么如何掌握这些状态信息呢?我们需要借助于网络监控工具Smokeping。

Smokeping 是rrdtool的作者Tobi Oetiker的作品,是用Perl写的,主要是监视网络性能,www 服务器性能,dns查询性能等,使用rrdtool绘图,而且支持分布式,直接从多个agent进行数据的汇总。

同时,由于自己监控点比较少,还可以借助很多商业的监控工具,比如监控宝、基调、博瑞等。同时这些服务提供商还可以帮助你监控CDN的状态。

2.7 安全监控

虽然iptables帮助小王完成了四层的安全防护,但是针对七层的Web层面怎么办呢?

于是小王使用Nginx + Lua编写了一个WAF,然后把相关的日志记录到了Elasticsearch中,通过kibana可以图形化的展示不同的攻击类型的统计。

同时小王学习使用python还写了一个爬虫定期扫描github,有没有公司相关的关键字,以免同事分享代码时,不小心涉及到敏感的内容。

(图片来源https://github.com/loveshell/ngx_lua_waf)

2.8 业务监控

小王再去向经理汇报,刚走到门口被总经理碰上了,张总说:小王啊,你们经理汇报你最近监控工作干的不错,你给我说下,咱们现在10点的时候总订单是多少,每分钟平均订单有多少?

小王又蒙了,我自己也曾经就是那个小王!

没有业务指标监控的监控平台是一个不完善的监控平台,通常在我们做监控系统中,必须将我们重要的业务指标进行监控,并设置阈值进行告警通知。

比如每分钟的订单、每分钟注册、日活用户、短信使用量等重要的业务指标都可以加入到Zabbix上。

注:由于业务监控图表,涉及到隐私的数据太多,就不截图了。

2.9 日志监控

通常情况下,系统会产生系统日志、应用程序会有应用的访问日志、错误日志,服务有运行日志等,可以使用ELK来进行日志监控。

对于日志来说,最常见的需求就是收集、存储、查询、展示,开源社区正好有相对应的开源项目:

  • logstash(收集)
  • elasticsearch(存储+搜索)
  • kibana(展示)

我们将这三个组合起来的技术称之为ELK Stack,所以说ELK Stack指的是Elasticsearch、Logstash、Kibana技术栈的结合。

如果收集了错误日志,那么如果部署更新有异常出现,可以立即在kibana上看到。当然也可以使用Zabbix来进行错误日志的过滤来进行告警。

2.10 自动化

经过努力,小王完成从监控菜鸟到头脑中有一个相对完整的监控体系的逆袭,但是在大规模的环境中,如果无法做到自动化监控,那么手动添加监控不仅仅是一个恐怖的工作,而且也无法保证完整性。

自动化的方案有很多,通常有主动和被动不同的形式,这里相对Zabbix来说。

主动形式:

比如使用Zabbix的自动发现,主动的对全网进行扫描,然后自动添加相关的监控服务器和引用监控模板。

被动形式:

也可以使用Zabbix API进行被动的监控的添加。比如以CMDB为核心,如果检测到某服务器增加了Nginx服务,那么自动调用Zabbix API添加上Nginx的监控模板。

真正想做到更完整的监控体系,目前的开源软件,确实无法很好的满足,有条件的公司都开始自己开发自己的监控系统,比如小米开源的Open-Falcon。

也有比较好的开源的监控框架如Sensu等,再加上influxdb grafana可以用来定制符合自己企业的监控平台。

2.11 可视化

经过小王的各种努力,终于一个相对完善的监控平台使用Zabbix构建起来了,小王为此还做一个漂亮的screen,来进行展示,但是有一天突然订单量特别少,张总又一次到了运维部,但失望而归,因为整个监控体系并不能反映出来订单量为什么减少了?

运维的重要目标之一就是数据的可视化,一个监控平台不能很好的反映出来业务的波动,就是耍流氓。之前的一切努力在业务部门的领导中变得一文不值!!!

我们能做的有以下几点:

面向传统运维:

  1. 尽可能的完善业务监控,如果有专门的业务分析系统,要想办法和运维的监控平台进行结合。
  2. 梳理清楚各个子系统之间和业务的关系,比如如果突然间流量增加了50M,能够快速的知道这50M流量到了那个业务系统上,访问的哪些URL,以及这个业务系统的相关状态。

面向DevOps:

将所有的监控项和业务之间建立关系树,比如业务、网络、系统、数据库、流量、推广活动(流量分析)之间可以形成一个庞大的关系链。这是一个比较庞大的工程,业务是多变的,如何让监控平台能尽可能的适应多变的业务是一个艰巨的任务。

到面试结束

该结束了,因为我无论怎么努力增加,还是觉得总有漏下的。

监控的话题还有很多很多,比如还有和运维相关的页面性能监控(页面资源数量、DNS解析时间、首屏时间、加载最慢的资源、产生阻塞的JS等)、代码监控、与运维无关的舆论监控等,先这么多吧!

好的,我们是从面试开始引入的监控的话题,那么就从面试结束吧!下次再遇到类似的面试题,我相信读者心里一定有了自己的答案,这里就不在详述,一个相对完善的运维监控体系是否已经在你脑海中形成了呢?

小贴士:面试中,如果你遇到一个有很强的责任心,连洗澡都要带上手机,以免错过报警的人,不要犹豫,先招进来再慢慢培养吧。责任心是运维工程师的第一要素!

后记:小王的故事结束了,小王目前被监控的关系树锻炼的连王菲、李亚鹏的关系都能搞明白了。可是你呢?

如果你是一名运维工程师,动手干吧,监控会是一个不断完善的工程,这就是运维(运营)和项目的本质区别。

如果你是一名Devops,那么开始编程吧!

如果你是一名老板,给公司的运维工程师一个转变的机会和一些时间,人总是不断进步的!

FAQ:

故障自动处理有没有相关的思路?

不同业务形态、不同架构、不同服务可能采用的方式都不同,这个没有一个固定的东西分享。可以参考之前腾讯蓝鲸的分享,他们实现了故障自愈的功能。

运维需要懂业务吗?

我个人的观点是懂业务能让运维走的更远,运维服务的对象不一定是其它部门,为什么不能是终端用户呢?

可以站在终端用户的视角来做运维,比如有用户反映访问慢,为什么慢,是架构的原因,Nginx配置的原因,还是数据库的原因。

不要等着领导来安排,运维能带来的价值是需要运维自己做出来的,思想有多远,运维就能走多远!

那么监控在这里发挥的作用就是:让数据说话!

做监控也需要CMDB吗?

我认为CMDB是基础,尤其是在自动化运维的模式下,你需要有一个地方能准确的提供一台服务器放在哪个位置、配置是什么?什么时候购买的?什么时候过保?都运行了哪些服务、开放了什么端口、版本是什么(升级时使用)。

有了这些数据,就可以轻松和配置管理系统、部署系统、监控系统有效的结合起来。总结起来就是:以业务为导向、以CMDB为中心、以API为基础来进行运维体系的建设。

有了CMDB的数据支撑,那些看着高大上的自动绘出架构图和机柜图就不是难事了。

树莓派 Raspberry Pi 启用 root 登陆账户

刚拿到手的时候,把SD卡烧录下:

烧录软件:Win32DiskImager-0.9.5-install.zip

树莓系统包:2017-02-16-raspbian-jessie-lite.zip

下载链接:微云网盘 (密码:nZRx09)

 

树莓派系统使用的linux是debian系统,所以树莓派启用root和debian是相同的。

debian里root账户默认没有密码,但账户锁定。

当需要root权限时,由默认账户经由sudo执行,Raspberry pi 系统中的Raspbian

默认主机名是 raspberrypi 默认用户是 pi 密码为 raspberry

为了方便折腾,建议第一时间启用 ROOT 账号吧~ 这个也很简单的,只需要执行一下两句命令即可:

// 重新开启root账号,可由pi用户登录后,执行此命令后系统会提示输入两遍的root密码,输入你想设的密码即可。

原因是 新版本ssh默认关闭root登陆 你可以修改一下ssh的配置文件

  1. pi@raspberrypi:~$ sudo nano /etc/ssh/sshd_config

Ctrl + W 快捷键 搜索 PermitRootLogin without-password

修改 PermitRootLogin without-password

为 PermitRootLogin yes

Ctrl + O 快捷键 保存

Ctrl + O 快捷键

Ctrl + X 快捷键 退出 Nano 编辑器

// 启用 root 账号登录

  1. pi@raspberrypi:~$ sudo passwd root
  2. Enter new UNIX password:   #输入第一遍密码
  3. Retype new UNIX password:  #输入第二遍密码

// 执行完之后,用 reboot 命令重启,这样就可以解锁root账户。

  1. pi@raspberrypi:~$ sodu reboot

 

//关机

  1. pi@raspberrypi:~$ poweroff

 

LNMP1.3 安装 fileinfo 组件

最近在折腾一款论坛程序,需要fileinfo组件,而lnmp1.3默认没有支持。
其实很简单,只要修改 include/upgrade_php.sh 这个文件

把其中的:--disable-fileinfo
全部替换:--enable-fileinfo

再执行 ./upgrade.sh 选择4,升级php就行了。

flarum伪静态部分配置(仅限军哥lnmp1.3版本)

  1. location / {
  2.     try_files $uri $uri/ /index.php?$query_string;
  3. }
  4. location /api {
  5.     try_files $uri $uri/ /api.php?$query_string;
  6. }
  7. location /admin {
  8.     try_files $uri $uri/ /admin.php?$query_string;
  9. }
  10. location /flarum {
  11.     deny all;
  12.     return 404;
  13. }
  14. location ~ .php$ {
  15.     fastcgi_split_path_info ^(.+.php)(/.+)$;
  16.     fastcgi_pass unix:/tmp/php-cgi.sock;
  17.     fastcgi_index index.php;
  18.     include fastcgi.conf;
  19. }

nginx实现访问网站或目录密码认证保护

以我们做一个简单的后台管理为例, 地址:http://xxxx/admin/*, 对admin 下面的文件进行权限管理;

1. 进入ngnix配置的地址,以我的ubuntu为例;  cd /etc/ngnix

2. 在ngnix 配置目录新建pass_file文件,使用http://tool.oschina.net/htpasswd生成密码.

3. 将生成的帐号密码复制到pass_file文件,一行一个.

4. 修改ngnix 配置.

  1. location ~ /admin {
  2.         auth_basic “Restricted”;
  3.         auth_basic_user_file /etc/nginx/pass_file;//请使用绝对路径
  4.         root   /home/www/admin; //host 地址,不然认证通过之后,找不到对应的文件
  5. }
       5. 重启ngnix ,sudo service ngnix reload;

6. 登录 http://xxxx/admin/*,弹出验证框,说明验证配置完成

使用 Google BBR 拥塞算法加速 TCP

Google BBR是一个TCP加速优化工具,类似于锐速,可用于优化 TCP 连接。最近一下就火起来了,说明还是有牛逼的地方,咱也别落后,用起来。

GitHub 地址为:https://github.com/google/bbr

仔细看了看,GitHub 主页上有明确的说明“This is not an official Google product.” 说明这其实不是 Google 的官方项目,但是是在 Google 的 GitHub 上,比较奇怪。

要想启用 BBR 需要切换内核,所以必须要 KVM 或者 XEN 架构的 VPS。这点和锐速一致,所以 Openvz 的朋友是用不了的。由于需要跟换内核,属于危险操作,请不要用于生产环境,可能会造成无法开机,切记!

至于加速效果,有人反馈比锐速好,有人反馈比锐速弱。我测试后感觉效果还是不错的,但是用起来比破解版锐速放心一些吧,它是内置到最新的内核里边了。

安装 BBR

1.一键安装脚本

网上有 BBR 的一键安装脚本,我找到两个:

  1. wget –no-check-certificate https://github.com/52fancy/GooGle-BBR/raw/master/BBR.sh && sh BBR.sh

可用于 CentOS 6。

  1. wget -N –no-check-certificate https://soft.dou-bi.co/Bash/bbr.sh && chmod +x bbr.sh && bash bbr.sh

可用于 Debian / Ubuntu 14.04 + (说明看这里:https://www.dou-bi.co/wlzy-16/)。

我是手动安装的,没测试过,请自测。CentOS 7 可以看这里:https://zhujiwiki.com/10156.html

2.手动安装方式

先看官方手动编译内核的文档:

https://github.com/google/bbr/blob/master/Documentation/bbr-quick-start.md

看起来比较麻烦,我们还是直接安装编译好的吧。

我的系统是 Ubuntu x64,可以直接到 ppa 仓库里下载:

http://kernel.ubuntu.com/~kernel-ppa/mainline/

网页拉到最后,看最新的内核,当前最新的是 v4.9:

http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9/

下载内核文件:

  1. wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9/linux-headers-4.9.0-040900_4.9.0-040900.201612111631_all.deb
  2. wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9/linux-headers-4.9.0-040900-generic_4.9.0-040900.201612111631_amd64.deb
  3. wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9/linux-image-4.9.0-040900-generic_4.9.0-040900.201612111631_amd64.deb

32位下这些:

  1. wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9/linux-headers-4.9.0-040900_4.9.0-040900.201612111631_all.deb
  2. wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9/linux-headers-4.9.0-040900-generic_4.9.0-040900.201612111631_i386.deb
  3. wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9/linux-image-4.9.0-040900-generic_4.9.0-040900.201612111631_i386.deb

下载完成之后可以开始安装了:

  1. sudo dpkg -i linux-headers-4.9*.deb linux-image-4.9*.deb

安装完成之后可以删除多余的内核:

  1. dpkg -l | grep linux-image | awk ‘{print $2}’ | grep -v ‘linux-image-4.9’ | sudo xargs dpkg –purge
  2. dpkg -l | grep linux-headers | awk ‘{print $2}’ | grep -v ‘linux-headers-4.9’ | sudo xargs dpkg –purge

然后更新一下 grub:

  1. # sudo update-grub
  2. Generating grub configuration file …
  3. Found linux image: /boot/vmlinuz-4.9.0-040900rc8-generic
  4. Found initrd image: /boot/initrd.img-4.9.0-040900rc8-generic
  5. done

重启 vps:

  1. sudo reboot

重启之后,查看一下当前的内核:

  1. # uname -r
  2. 4.9.0-040900-generic

已经是 4.9 了,现在可以启用 BBR 了:

  1. sudo bash -c ‘echo “net.core.default_qdisc=fq” >> /etc/sysctl.conf’
  2. sudo bash -c ‘echo “net.ipv4.tcp_congestion_control=bbr” >> /etc/sysctl.conf’
  1. sysctl -p

使配置生效。
然后可以检查一下:

  1. # sysctl net.ipv4.tcp_available_congestion_control
  2. net.ipv4.tcp_available_congestion_control = bbr cubic reno
  1. # lsmod | grep bbr
  2. tcp_bbr                20480  14

结果里边已经有 BBR 了,说明启用成功。没成功的话,再重启一下 VPS。

Debian 的手动安装方法可以看这里:https://moonagic.com/try-bbr/

Youtube-dl高级使用方法,混合参数下载

youtube-dl这个解析下载脚本功能可不是盖的,在视频下载方面极其强悍,如果你还没有听说过那真的落伍了;

虽然它一般都被用来下载youtube视频,但它所支持的格式范围很广除了欧美主流视频网站之外,中国的主流视频网站它也支持,比如优酷、搜狐、爱奇艺等;

这是一个命令脚本工具,没有ui界面的,最基础的使用方法是 youtube-dl + url,因此它强大的功能就要靠参数来实现,借用不同的参数可以实现不同的下载方式,比如指定格式、下载视频字幕、批量下载、代理下载等等好多功能可以轻松实现;

后期我还准备另外分享一篇youtube-dl结合ffmpeg重新编码、格式转换、合并视频等等之类的拓展功能介绍的内容,进一步让大家知道这个脚本工具是多么的牛叉好用;

今晚正好我又用到了这个脚本,就来记录一下我常用的一些下载命令方法,日后会增添一些觉得有用的参数继续完善这篇文章;

安装youtube-dl

  1. wget https://yt-dl.org/downloads/latest/youtube-dl -O /usr/local/bin/youtube-dl
  2. chmod a+x /usr/local/bin/youtube-dl

下载全部格式

  1. youtube-dl  –all-formats https://www.youtube.com/watch?v=hLQl3WQQoQ0

–all-formats 添加这个参数之后,所有存在的格式一扫而尽,统统下载;

查看该视频所有格式类型,只看不下载 -F或者–list-formats

–list-formats这是一个列清单参数,执行后并不会下载视频,但能知道这个目标视频都有哪些格式存在,这样就可以有选择的下载啦!

  1. youtube-dl –list-formats https://www.youtube.com/watch?v=hLQl3WQQoQ0

下载指定格式视频

-f + 编号通过上一步获取到了所有视频格式的清单,最左边一列就是编号对应着不同的格式,例如我想下载22号那个mp4格式分辨率为1280*720的视频,则按下面的命令就可以轻松指定下载视频哦;

  1. youtube-dl -f 22 http://www.youtube.com/watch?v=BlXaGWbFVKY

下载youtube字幕及视频

有的youtube视频是有字幕的可供下载的,但不是全部;如果过你想要下载字幕用这个脚本来操作也是很容易的;
先来说说两个参数–write-sub加入字幕文件 –all-subs如果有字幕存在则全部下载

  1. youtube-dl –write-sub –all-subs https://www.youtube.com/watch?v=0TjgZbVdOLA

批量下载

在Putty命令行界面中创建一个专门的目录用于存放下载的视频文件,然后CD至此目录下,创建一个包含所有下载链接的txt文件(使用vi命令即可)。在此目录下,执行下载命令:

  1. youtube-dl -c -i -a video_url.txt

没错,youtube-dl提供了很多有用的附加参数,这里用到的是:

  • -c 断点续传(如果由于意外原因下载中断了,再次启动下载命令时,可以实现断点续传)
  • -i 忽略报错(如果出现某些链接无法打开或者下载的问题,会自动绕过,继续下载其他视频)

【黑五】UltraVPS.eu:€16.7/年KVM-1GB/30GB/1TB 四数据中心

UltraVPS.eu也发布了他们的黑色星期五优惠措施,一款KVM架构1G内存套餐年付仅需16.7欧元,可选包括洛杉矶、达拉斯、荷兰阿姆斯特丹和德国杜塞尔多夫四地区个机房。这是一家总部在德国的VPS服务商,默认加税,注册地址中国非欧盟地区自动免除。

qq%e6%88%aa%e5%9b%be20161126035208

我们一起看看这款黑五特别套餐的信息。

 

CPU:1 core

内存:1GB

硬盘:30GB SSD

月流量:1TB/100Mbps

虚拟架构:KVM

IP/面板:1IPv4/SolusVM

【Order】订购链接

测试IP:69.12.89.3(洛杉矶)  172.107.84.6(达拉斯)

130.255.76.147(德国)  185.45.112.15(荷兰)

网站默认欧元计费,可切换美元,主机均采用纯SSD磁盘,洛杉矶的IP也是QN的,不过商家没有承诺亚洲优化段问题,请知悉。

[转载]Linux KVM环境安装Windows教程 – Grub引导安装Windows系统

本身写文章就是一件非常痛苦的事情,尤其是写技术类的文章必须经过测试完成才敢分享出来,且老左并不能确保每个用户有需要参考的时候能顺利完成,但我可以保证在写文章的时候所有的记录信息都是真实在当前的环境过程中执行出来的。且可能存在的错误或者以至于用户甚至让老左再安装也可能出错,这些问题的出现因素是多样的。

在”Linux KVM环境安装Windows教程 – 分区盘符和挂载Debian安装”文章之后,只能算是完成了第一个部分,还没有收工,这里还需要通过引导安装GHO系统文件才能安装WIN系统,就类似我们用DOS快速还原系统一样的道理,在写这篇文章的时候一直在寻找可用的Windows GHO系统文件,以前有网友分享的但是找到几个都是地址失效,这里就从网上找到一个Windows2003版本不清楚是否能安装上去,无论如何就试试吧。

第一步、上传必要的文件

这里在我们已经安装好Debian环境之后,而且根据需要的要求分区和设置盘符的大小,因为老左测试用的这款机器只有10GB硬盘,并不宽裕所以只能勉强分区上去。

这里我们需要准备3个文件,分别是MAXDOS.IMG(http://aget.win/iso/MAXDOS.IMG)、grub4dos.tar(http://aget.win/iso/grub4dos.tar)、以及关键的WIN系统的.GHO后缀系统文件。前两个老左从网上找到然后分享出来,对于系统文件一来涉及到版权问题,二来文件较大占用资源,三来不能确保是否一定可以使用,就不在这里提供,否则叔叔要找我。

1、将MAXDOS.IMG文件放到/boot/boot目录中(通过mkdir /boot/boot创建)

2、将grub4dos.tar文件放到/boot/目录中并tar -xvf grub4dos.tar解压文件到当前目录。

3、将.GHO系统文件放到/dos文件夹中。

这里文件都准备完毕之后,我们就需要继续登录VNC远程操作安装过程。

第二步、引导安装Windows系统的过程

我们在一切文件准备就绪之后,依旧去登录VNC远程,进入界面之后我们需要按c进入引导grub。

1、进入grub引导

进入grub引导

如果看到这个界面,我们还需要先按右上角的SEND CTRLALTDEL按钮之后再按C键才可以进去。

2、输入命令

输入命令

输入上图所示的命令行,2行,回车之后可以进入。

linux (hd0,1)/grub.exe
boot

kvm-grub-3

选择MAXDOS.IMG进入下一步。

3、准备GHOST系统

选择MAXDOS工具箱

选择MAXDOS工具箱

进入GHOST系统

根据提示的命令,我们输入ghost回车进入系统还原。

4、ghost还原系统

ghost还原系统

早年我们安装系统都是用这个GHOST还原安装的,这个方法安装非常快速,我们有安装过系统不?这里完全需要用到键盘TAB键盘和回车键来选择文件,需要通过LOCAL-DISK-FROM IMAGE,这里来寻找到我们已经准备好的.GHO文件,然后通过这个文件还原系统。

Linux KVM环境安装Windows教程 - Grub引导安装Windows系统

这里来寻找我们GHO的文件盘符,然后选择之后就可以继续找到我们设定好的盘符安装WINDOWS系统。这里真的有点卡顿,估计内存太小导致的(这里测试是用的512MB内存),原本不继续写下去的,无奈已经写了这么多了。

还原GHOST系统

看来要完事了,我们等待等待,因为是SSD硬盘估计会快一些。我原本是要找网上流传的XP系统的,但没找到,找到一个WIN2003,不知道是否好用,但过程肯定应该是这样的。总之这个方法纯属折腾,一般商家是不能这样安装的,被发现会被封机器甚至账号,所以老左这里仅仅是瞎折腾,群友们也让不要这么安装,一来浪费时间,二来也没必要,着实的浪费时间,折腾几天了。

kvm-grub-9

估计占用资源太差了,这个测试VPS要奔溃,卡在这里没有进度。理论上这样等进阶完毕就可以了,过程应该是没有错的,我们在安装完毕之后需要设置网卡和IP以及DNS设置,这样才可以上网。老左不再折腾了,纯属浪费时间,这么浪费时间还不如看看垃圾桶有没有瓶子捡,然后直接买一台WIN VPS或者用其他方法。

PS:根据其他网友的介绍这个方法应该理论这样的,但是鉴于实在太卡了,老左没有等最终安装完毕,如果有朋友有这样安装过或者老左上面的方法过程记录有问题,可以留言给其他网友参考,不能因为我的文章误导大家,以上文章纯属自己折腾,不能确保每个人肯定能安装。

[转载]Linux KVM环境安装Windows教程 – 分区盘符和挂载Debian安装

老左原本在RamNode新年促销活动的时候购买过一个月KVM VPS主机,本来用意就是希望亲自看看网上流传的KVM环境安装Windows系统的方法,虽然大部分商家是不允许这样的操作的,我的本意也仅仅是测试是否可以成功,并不建议用户这样操作,因为可能导致账户机器存在一定的风险。

后来有看到RamNode系统中有2008版本可选,然后就写了一篇”完整RamNode KVM VPS主机安装自带Windows 2008R2系统”文章耽搁到,今天看到之前一台机器已经过期,无奈有开了一台KVM体验如果KVM环境如果没有Windows环境如何来安装的方法。

申明:这里采用KVM架构,以及拥有SolusVM面板可选择驱动等默认条件才可以安装,但是根据网友提醒,并不是所有的KVM环境可以安装的,所以看到这篇文章的网友仅仅老左体验的这个过程,而且这个方法安装Windows过程比较复杂而且耗时超级长,原本准备在一篇文章中写完的,但是过程比较复杂所以分成两步进行,这一篇用来分区盘符和挂载安装Debian系统环境。

第一、KVM安装Debian环境准备工作

因为考虑到Debian环境支持Grub引导,所以我们需要通过挂载步骤安装的方法安装Debian环境,并不是采用默认系统中的Debian安装,过程中需要用到分区盘符。过程就是通过Grub引导DOS,然后通过DOS安装GHO镜像,对于需要的文件我们暂时不管,后面会提到和需要准备的。

KVM安装Debian环境准备工作

这里我们需要选择启动选光盘首选,然后CDROM标签中选择DEBIAN系统挂载。

挂载DEBIAN

这里设置完毕之后需要在SolusVM面板中REBOOT重启服务器。

第二、通过VNC登录服务器配置语言和密码

通过VNC登录服务器安装Debian

选择其中 一向登录VNC桌面就可以。

安装Debian系统

这里看到这个界面,用键盘方向键选择INSTALL然后回车。

选择中文

这里可以选择简体中文,因为后面过程中我们可以稍微看的懂一些,当然如果我们喜欢看其他语言也可以。

选择DEBIAN时区和键盘语言

这里我们选择时区和键盘语言,选择后回车就可以。

debian随便输入一个主机名

随便输入一个主机名。

debian配置网络

配置网络,随便输入一个域名就可以。

设置ROOT密码

这里我们需要设置这台服务器的ROOT密码,因为后面我们需要用到SSH登陆。回车后需要再输入一次。

设置DEBIAN用户名和密码

我们需要设置DBIAN账户登录用户名以及密码,后者需要输入2次,前者需要回车确认一次。

第三、分区系统盘符

分区系统盘符

这里比较重要,我们需要设定分区。

分区系统盘符

这里根据上面的分区我们需要设定大小和盘符。Windows盘符是用来安装后面WIN系统用的,DOS是用来放GHO文件的,这个要根据我们实际的GHO文件大小,也不要太浪费。

debian格式化磁盘

格式化磁盘之后就会自动安装Debian发行版本。在安装过程中需要我们选择镜像源地址,我们可以选择163或者Debian官方的,其他都回车就可以。

第四、Debian安装过程记录

Debian安装过程记录

总之一切自动安装,我们等待就可以。

不参加软件包流行度调查

这里不参加软件包流行度调查。

debian-16

这里必须要安装SSH和标准系统工具,如果没有选择的话用空格选择,然后继续。

debian-17

选择GRUB启动引导到主引导记录。

debian安装完成

看到这里就代表安装完成,我们继续重启机器,前提我们可以提交设置硬盘启动。

总结,这里我们就已经部署完毕Debian环境,我们需要重新将驱动盘选项先后顺序硬盘启动放到前面,然后重启服务器之后可以先用VNC链接看看是否可以进入桌面。

Linux VPS添加SWAP(交换分区)

前言

请注意OpenVZ架构是没法加这个的(实践出真知啊,因为二代OpenVZ有个vSWAP,所以我专门试了下,没成,报错);另外文章仅指XEN架构,但是可能并非所有的VPS主机商都是允许你添加交换文件的;最后一点,KVM架构的话,就不用这么麻烦了,装系统的时候自己随便设定大小。

写在前面的还有一个问题,就是以下的方式也适用于调整增加原SWAP大小,这个在KVMLA提供的凤凰城测试VPS上测试是OK的。

添加(调整)SWAP

在开始之前,特别说明,本文的操作过程来源于:http://www.vpser.net/opt/vps-add-swap.html ,赵容只是操作这个过程,并在多个VPS上尝试。

1.进入目录

  1. cd /var/

2.获取要增加的SWAP文件块(这里以1GB为例)

  1. dd if=/dev/zero of=swapfile bs=1024 count=1038336

3.创建SWAP文件

  1. /sbin/mkswap swapfile

4.激活SWAP文件

  1. /sbin/swapon swapfile

5.查看SWAP信息是否正确

  1. /sbin/swapon –s

6.添加到fstab文件中让系统引导时自动启动

  1. echo “/var/swapfile swap swap defaults 0 0” >>/etc/fstab

上面这步也可以修改/etc/fstab,末尾加入/var/swapfile swap swap defaults 0 0

以上全过程来一个截图,其中图中的最前面和最后面可以对比下SWAP的大小,因为这个测试在KVMLA的XEN VPS上执行,他本身有512MB的SWAP,所以是添加。

结语

以上只是一个过程,如果本身VPS没有SWAP叫唤分区的话,加上一个肯定是有好处的,比如阿里云;但是,本身若有SWAP,增加过多的SWAP感觉意义就不大了,个人觉得SWAP不大于物理内存的2倍为宜。我也在很多VPS上遇到过,内存都用到SWAP去了以后,VPS就卡的很了。当然,上面这些还是我个人肤浅的看法,也许是我没优化好的缘故吧。