关于服务器端:vivo-服务端监控架构设计与实践

一、业务背景当今时代处在信息大暴发的时代,信息借助互联网的潮流在寰球自在的流动,产生了各式各样的平台零碎和软件系统,越来越多的业务也会导致系统的复杂性。 当外围业务呈现了问题影响用户体验,开发人员没有及时发现,发现问题时曾经为时已晚,又或者当服务器的CPU继续增高,磁盘空间被打满等,须要运维人员及时发现并解决,这就须要一套无效的监控系统对其进行监控和预警。 如何对这些业务和服务器进行监控和保护是咱们开发人员和运维人员不可漠视的重要一环,这篇文章全篇大概5000多字,我将对vivo服务端监控的原理和架构演进之路做一次系统性整顿,以便大家做监控技术选型时参考。 vivo服务端监控旨在为服务端利用提供包含系统监控、JVM监控以及自定义业务指标监控在内的一站式数据监控,并配套实时、多维度、多渠道的告警服务,帮忙用户及时把握利用多方面状态,事先及时预警发现故障,预先提供详实的数据用于追究定位问题,晋升服务可用性。目前vivo服务端监控累计接入业务方数量达到200+,本文介绍的是服务端监控,我司还有其余类型的优良监控包含通用监控、调用链监控和客户端监控等。 1.1 监控零碎的根本流程无论是开源的监控零碎还是自研的监控零碎,整体流程都大同小异。 1)数据采集:能够包含JVM监控数据如GC次数,线程数量,老年代和新生代区域大小;系统监控数据如磁盘应用使用率,磁盘读写的吞吐量,网络的进口流量和入口流量,TCP连接数;业务监控数据如谬误日志,拜访日志,视频播放量,PV,UV等。 2)数据传输:将采集的数据以音讯模式或者 HTTP 协定的模式等上报给监控零碎。 3)数据存储:有应用 MySQL、Oracle 等 RDBMS 存储的,也有应用时序数据库OpenTSDB、InfluxDB 存储的,还有应用 HBase 间接存储的。 4)数据可视化:数据指标的图形化展现,能够是折线图,柱状图,饼图等。 5)监控告警:灵便的告警设置,以及反对邮件、短信、IM 等多种告诉通道。 1.2 如何标准的应用监控零碎在应用监控零碎之前,咱们须要理解监控对象的根本工作原理,例如JVM监控,咱们须要分明JVM的内存构造组成和常见的垃圾回收机制;其次须要确定如何去形容和定义监控对象的状态,例如监控某个业务性能的接口性能,能够监控该接口的申请量,耗时状况,谬误量等;在确定了如何监控对象的状态之后,须要定义正当的告警阈值和告警类型,当收到告警揭示时,帮忙开发人员及时发现故障;最初建设欠缺的故障解决体系,收到告警时迅速响应,及时处理线上故障。 二、vivo服务端监控零碎架构及演进之路在介绍vivo服务端监控零碎架构之前,先带大家理解一下OpenTSDB时序数据库,在理解之前阐明下为什么咱们会抉择OpenTSDB,起因有以下几点: 1) 监控数据采集指标在某一时间点具备惟一值,没有简单的构造及关系。 2)监控数据的指标具备随着工夫一直变动的特点。 3)基于HBase分布式、可伸缩的工夫序列数据库,存储层不须要过多投入精力,具备HBase的高吞吐,良好的伸缩性等特点。 4)开源,Java实现,并且提供基于HTTP的应用程序编程接口,问题排查快可批改。 2.1 OpenTSDB简介1)基于HBase的分布式的,可伸缩的工夫序列数据库,主要用途就是做监控零碎。譬如收集大规模集群(包含网络设备、操作系统、应用程序)的监控数据并进行存储和查问,反对秒级数据采集,反对永恒存储,能够做容量布局,并很容易地接入到现有的监控零碎里,OpenTSDB的零碎架构图如下: (来自官网文档) 存储结构单元为Data Point,即某个Metric在某个工夫点的数值。Data Point包含以下局部: Metric,监控指标名称;Tags,Metric的标签,用来标注相似机器名称等信息,包含TagKey和TagValue;Value,Metric对应的理论数值,整数或小数;Timestamp,工夫戳。外围存储两张表:tsdb和tsdb-uid。表tsdb用来存储监控数据,如下图: (图片出处:https://www.jianshu.com) Row Key为Metric+Timestamp的小时整点+TagKey+TagValue,取相应的字节映射组合起来;列族t下的Qualifier为Timestamp的小时整点余出的秒数,对应的值即为Value。  表tsdb-uid用来存储方才提到的字节映射,如下图: (图片出处:https://www.jianshu.com) 图中的“001”示意tagk=hots或者tagv=static,提供正反查问。  2)OpenTSDB应用策略阐明: 不应用OpenTSDB提供的rest接口,通过client与HBase直连;工程端禁用compact动作的Thrd线程;距离10秒获取Redis缓冲数据批量写入OpenTSDB。2.2 OpenTSDB在实践中须要关注的点1)精确性问题 String value = "0.51";float f = Float.parseFloat(value);int raw = Float.floatToRawIntBits(f);byte[] float_bytes = Bytes.fromInt(raw);int raw_back = Bytes.getInt(float_bytes, 0);double decode = Float.intBitsToFloat(raw_back);/** * 打印后果: * Parsed Float: 0.51 * Encode Raw: 1057132380 * Encode Bytes: 3F028F5C * Decode Raw: 1057132380 * Decoded Float: 0.5099999904632568 */System.out.println("Parsed Float: " + f);System.out.println("Encode Raw: " + raw);System.out.println("Encode Bytes: " + UniqueId.uidToString(float_bytes));System.out.println("Decode Raw: " + raw_back);System.out.println("Decoded Float: " + decode);如上代码,OpenTSDB在存储浮点型数据时,无奈知悉存储用意,在转化时会遇到精确性问题,即存储"0.51",取出为"0.5099999904632568"。 ...

February 21, 2022 · 2 min · jiezi

网站遭遇DDOS漏洞等状态该怎么解决

如今,随着互联网时代的进步到物联网的兴起,人们生活,出行交通工具,工作处处离不开网络购物,那息息相关的物品也就离不开各种的网站。因此在各种行业竞争非常激烈的情况下,同行之间雇佣黑客打压对手,攻击对方网站,致使网站瘫痪的事情常发生。今天主要分享下网站遭遇DDOS、漏洞等状态该怎么解决?有需要的朋友可以参考下。 1.首先是对网站的服务器进行安全部署,要想快速发展就必须要有稳定的基础支撑,那么基础设施就是奠基石。需要经常更换服务器的密码,不能长期使用一个,避免外泄。同时要对网站的文件夹进行权限设置,包括一些重要的数据,文件,图片目录,缓存目录等都可以对其进行无脚本执行权限的设置加密,对于模板的文件夹设置只读权限,这里不含PHP运行权限。对网站的后台地址也要进行更换,尽量不使用默认的admin,manage,houtai等名字命名的后台地址,网站的管理员的账号密码要设置成复杂点的,不要使用经常用的密码和数字,避免轻易被破解。2.针对网站的系统定期进行升级,打补丁修复漏洞,定期对网站进行全面的安全检测,对网站的脚本木马或者木马后门经常进行检测。因此要选择专业的网络运维公司,专业的安全运维人员不只是有专业的技术,更多的是有丰富的经验,针对网站漏洞的修复与木马后门的清除可以很好的解决与规避。 3.要对数据库以及网站的代码做到不定期的备份,现在有一些企业使用的虚拟云服务器等,如果有启用备份功能,就选择开启状态,选择固定的周期对这个网站的服务器进行定期备份,这样即使因为攻击或者是系统问题出现了数据丢失或删除的情况,就可以利用备份及时的恢复到网站最新的状态以及数据。还有要为企业网站部署SSL证书,防止网站数据被删、被盗,甚至被篡改以及被浏览器拦截,昨天墨者安全就遇见一个客户,他告诉我他的网站被百度拦截了,360和UC浏览器等都提示您访问的是存在未经证实信息的网站,谨慎访问等字样。还又提示被黑客攻击利用DDOS流量攻击,这时候就要隐藏网站的真实IP,利用替身防护将其恶意访问请求等过滤清洗掉,然后将正常的访问回源到源IP,这样就避免了攻击者对网站进行DDOS、CC攻击。 如过网站一旦被攻击,就会有各种各样的损失,比如企业的敏感数据和文件,还有涉及的用户个人信息银行账号等,这些都是企业的命脉所在,但网站做好安全防护,就不会有数据信息泄露的事情所发生,也避免了企业的在财产方面和信誉方面等各种损失。

June 20, 2019 · 1 min · jiezi

如何防范服务器入侵

Vitaliy Kolesov 原作,授权 LeanCloud 翻译。 加固服务器并不难,但有很多例行操作需要进行时,有可能会遗忘。以我为例,刚买的服务器就在两周内被人入侵了。有天早上我收到几封来自第三方的邮件,说我服务器上有东西在尝试入侵他们的服务器。所以,我需要快速解决这个问题。 如何查找漏洞我碰到的情况比较简单,我执行了以下命令: cat /var/log/auth.log | grep Accepted该命令返回了我的服务器上的成功认证记录,其中有一个 IP 不是我的。所以,是 SSH 服务被入侵了。 别忘了还有一个命令 last,这个命令返回最近成功登录的用户。 如何加固服务器购买服务器后需要立刻进行的操作: 安装 ufw,简单易用的防火墙软件;关闭除 SSH、HTTP(s) 外的所有端口;安装配置 fail2ban 工具。这个工具基于 /var/log/auth.log 识别恶意行为并封禁 IP;修改 sshd 配置,只使用密钥认证。具体怎么做?如果发生了入侵,你需要知道如何调查和清扫。最好的方式是重新创建 VPS。我就是这么做的。我在 hetzner 买了服务器,它的控制台提供了重新创建(移除旧 VPS,新建一个)VPS 并保留原 IP 的功能。 所以我重新创建了一个 VPS。之后我在本地计算机上使用 ssh-keygen 工具(标准 OpenSSH 包的一部分)生成了 SSH 密钥:(下面的命令同时适用于 Linux 和 macOS) ssh-keygen该命令在 ~/.ssh 目录中创建了一对密钥。之后运行以下命令: ssh-copy-id you_user@your_server_id该命令会将新创建的公钥上传到服务器。接下来,登录服务器并修改 sshd 配置: nano /etc/ssh/sshd_config修改配置文件中的 PasswordAuthentication 配置: PasswordAuthentication no这一配置禁用了使用密码登录(只能使用密钥登录)。 安装配置 ufw 和 fail2ban服务器上我用的系统是 Ubuntu,所以通过以下命令可以安装这两个工具: ...

April 29, 2019 · 1 min · jiezi