相信各位小伙伴在学习tomcat,nginx,关系型数据库,非关系型数据库,zabbix,elk等模块后。虽然对它们有所了解,但各个模块之间的联系,它们在实际部署中所处的位置仍不是很明白。别问我怎么知道的,因为我也是酱紫QAQ

所以我对学到的内容做了一些整理:

运维 系统 后台 架构 运维架构图_linux

nginx是一款轻量级的反向代理服务器,nginx只能用来解析静态页面,tomcat可以解析动态页面。使用反向代理使nginx显示tomcat解析到的内容。

单个nginx服务器易发生单点故障,这时就使用keepalived将VIP漂移到备用节点,保证当nginx宕机后服务仍能继续。

服务需要添加新的功能,开发人员写好功能将代码上传到中心代码仓库,如gitlab/github或者svn,由运维人员将其编译,打包,上传,部署到tomcat。使用jenkins可以自动完成编译,打包,上传,部署到tomcat过程。

数据库存储用户信息,用户要查找的信息等。使用数据库集群来分担数据库的负载,在从库进行数据备份。

当流量过大应用系统配置承载不了这股流量,使用RabbiMQ消息队列,进行削峰。或者使用mycat部署读写分离,减轻数据库的负载负担。

redis是一种非关系型数据库,以键值对的方式存储数据,数据存储在内存中,具有速度快的优点。可以将用户经常浏览的内容存放到redis中,提升查找速度,减轻MySQL数据库的负担。

ELK+kafka+filebeat

filebeat可以收集前面整个环境的日志,如nginx,tomcat,mysql,redis等。可以当某个服务出现问题时,可以根据日志快速定位到出错的节点和原因。kafka,数据缓冲队列,具有峰值处理能力,使用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃。 Logstash 负责收集和过滤数据还有修改数据格式。ElasticSearch 只搜索和分析日志。Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮你汇总、分析和搜索重要数据日志。

filebeat安装在要收集日志的应用服务器中,filebeat收集到日志之后传输到kafka中,logstash通过kafka拿到日志,在由logstash传给后面的es,es将日志传给后面的kibana,最后通过kibana展示出来。

zabbix

zabbix监控上面环境中各个服务的状态, 能监视各种网络参数,保证服务器系统的安全运营;并提供柔软的通知机制以让系统管理员快速定位/解决存在的各种问题。

Zabbix与ELK整合实现对安全日志数据的实时监控告警

ELK是一套日志收集套件,它其实有由Elasticsearch、Logstash和Kibana三个软件组成,通过ELK可以收集系统日志、网站日志、应用系统日志等各种日志数据,并且还可以对日志进行过滤、清洗,然后进行集中存放并可用于实时检索、分析。这是ELK的基础功能。

但是有些时候,我们希望在收集日志的时候,能够将日志中的异常信息(警告、错误、失败等信息)及时的提取出来,因为日志中的异常信息意味着操作系统、应用程序可能存在故障,如果能将日志中的故障信息及时的告知运维人员,那么运维就可以第一时间去进行故障排查和处理,进而也就可以避免很多故障的发生。

ELK(更确切的说应该是logstash)可以实时的读取日志的内容,并且还可以过滤日志信息,通过ELK的读取和过滤功能,就可以将日志中的一些异常关键字(error、failed、OutOff、Warning)过滤出来,然后通过logstash的zabbix插件将这个错误日志信息发送给zabbix,那么zabbix在接收到这个数据后,结合自身的机制,然后发起告警动作,这样就实现了日志异常zabbix实时告警的功能了。