项目经验
2019-05-09 17:32
1026 查看
项目经验
要点
Kubernetes
生产应用- 云主机弹性伸缩
- 日志收集平台
ELK
- 监控平台 从
zabbix
到prometheus
- 代码发布平台
Jenkins
- 堡垒机
jumpserver
- 打点服务应用
prometheus
<a id = "ks"> Kubernetes
生产应用 </a>
关键点 :
- 服务弹性伸缩,
deployment利用Horizontal Pod Autoscaling实现对pod的弹性伸缩- 对内对外提供服务, 利用
ingress和service实现- 权限管理, 利用
namespace和rdac实现 helm软件包管理工具 node节点的弹性伸缩, 利用对云主机的弹性伸缩实现
监控
kube-prometheus
日志收集
节点上运行一个
agent来收集日志,但DaemonSet模式下
- 阿里云日志服务
FELKpod中包含一个sidecar容器来收集应用日志
- 在每个
pod中添加一个fluentd或filebeat容器收集日志传输到外部ELK中直接在应用程序中将日志信息推送到采集后端
代码发布
jenkins shell(目前比较low)- 可用
drone或jenkins-pipeline。- 自己写一个。已经有大概思路。
<a id = "ecs"> 云主机弹性伸缩。</a>
对主机的弹性伸缩服务,这个是云服务商提供的服务。\
弹性伸缩主要是根据设置的伸缩规则,在业务需求增长时自动为您增加ECS实例以保证计算能力,在业务需求下降时自动减少ECS实例以节约成本。\
产品主要通过在SLB后面挂载ECS。实现对cpu或内存使用率的监控,当内存或cpu超过一定的阈值,利用之前定义的伸缩策略,利用之前制作好到镜像进行伸缩ECS。\
带来下面问题问题
新发布代码无法在老镜像中。如果弹性伸缩的话,新增的
ECS中的代码就和线上代码不一致了。解决
个人觉得比
low,这样也使发布比较重。但在Kubernetes中就不存在这样的问题了。在发布代码后,调用云服务商的
API,给新ECS打镜像、修改项目的弹性伸缩策略、把新镜像id替换老镜像id。
<a id = "elk"> 日志收集 </a>
elk+kafka
- a.
filebeat收集nginx的日志并把日志发给logstash- b.
logstash对日志进行字段拆分并写到elasticicsearch。如果利用到kafka,就在写到elasticicsearch之前,先写到kafka,之后elasticicsearch从kafka中获取数据。- c. 利用
kibana进行展示。- d. 在
kibana根据不同的业务,提前配置好对request_time、upstream_time、status_code等等的dashboard, 方便定位问题。- e. 告警: 写好脚本,定期检查不同业务的
request_time、upstream_time、status b60 _code。如果超时或status_code为5XX就钉钉告警
程序部分日志收集和告警
要求:
网关
nginx服务产生request_id,这个请求后面的一系列请求都带上这个request_id写日志.
目地
方便定位问题。当
nginx中出现5xx等错误时,根据这个请求的request_id,可以找到程序中对应的一系列请求,从而快速定位具体问题在哪里。
资源:
考虑到资源问题,目前仅仅收集warn/error/fatal三个等级的程序日志,导入到elk中。根据request_id快速定位程序问题。
告警:
定时任务,统计最近1分钟,如果某个项目出现10个
error或者出现过fatal就告警。
每天统计项目出现的warn次数。发邮件。
项目warn较多的(500条warn),额外会钉钉发告警,让开发处理一下
<a id = "prometheus"> 监控 </a>
从
mysql+zabbix+grafana+微信/钉钉到
prometheus+grafana+alertmanager + 钉钉
主要监控点
cpu使用率- 内存使用量/使用率
- 服务器负载
- 磁盘容量/
io- 网络流量
tcp连接数- 来源
IP连接数- 访问
IP连接数
对服务的监控:''
redis:cpu,内存使用量、hit、miss、get、set、ops... elasticsearch:cpu、jvm、内存、gc、indics、健康状态、ops... mongodb:cpu、mem、ops...
之所以迁移到
prometheus
prometheus对资源的要求非常低。就一个二进制问题,运行起来就可以了。- 当
zabbix监控超过100台服务器之后,查看监控的时候就明显慢了。 prometheus添加告警更加清晰方便。
<a id = "jenkins"> jenkins
代码发布 </a>
对开发要求:
规定所有开发,所有编译过程,都写一个 `makefile` 。我这边仅仅需要 `make 49d2 build` 即可
大致流程:
- 先从
git
仓库获取根据对应的tag
或branch
获取代码。 - 利用
jenkins
的shell
功能,进行make build
- 获取
build
后的代码,rsync
到服务器。 - 重启
supervisor
服务。 - 健康检查;
sleep 3s
,查看端口和进程是否正常。同时请求健康检查接口,查看服务是否正常。 - 到这里这个发布完成。但同时会触发下面步骤。后台运行。
-
利用
api
对新发布的项目中的某一个ecs
进行打镜像. 一般10分钟左右 - 修改弹性伸缩策略的的镜像
ID
为a步骤产生的镜像ID
。 - 发钉钉和邮件提醒。主要包括项目名称、修改前后的镜像名称。
<a id = "jumpserver"> 堡垒机 jumpserver
</a>
目的:
- 目前还没有把所有的程序日志收集,偶尔开发到服务器查看相应的debug日志。
- 开发需要到服务器,就带来权限管理问题了。用它主要就是为了解决这个问题。
优点:
- 不同的开发,给不同的访问服务器的权限
- 资源统一管理。
- 操作审计等等
<a id = "point"> 打点服务,定位资源使用情况 </a>
prometheus+pushgateway+grafana+alertmanager+钉钉目的
经常会遇到如下问题, 某个服务、资源的
cpu或者内存飙高。为了清楚了解。这些资源为飙高,是什么服务导致,我们就加入了打点服务。方案:
- 程序在调用其依赖的资源时,往时序数据库打一个点。
prometheus作为时序数据库。 pushgateway作为prometheus时序数据库的网关。 grafana做展示 alertmanager+ 钉钉,实现告警
作者: lvnian
相关文章推荐
- Java项目经验——程序员成长的钥匙
- 项目经验培训平台投入测试
- SFB 项目经验-52-Outlook-2010/2013-连接Exchange 2016需要密码!
- 一位网友的项目管理经验——网摘
- 什么是“技术不行”和“技术行”——基础扎实,熟悉常用语言与框架,有项目经验和心得,精通1、2门语言和框架,知识有一定的深度和广度
- 项目经理和架构师在软件开发中的哲理性经验总结
- 【管理经验】--P2B互联网金融项目3.0上线小感
- zz项目开发经验
- 初为项目经理的经验与大家分享
- 项目经验-曹林
- 一个项目经理的经验总结
- 项目经验-刘斌
- 项目管理心得:一个项目经理的个人体会、经验总结
- 项目经验-王晓刚
- 项目开发计划模板-根据经验以及参考资料整理
- 项目管理心得:一个项目经理的个人体会、经验总结【转】
- 全网枢纽大数据传输项目经验积累
- web项目开发流程经验总结
- 项目经验-张国义
- Lync 项目经验-10-Polycom CX700-不停弹窗口要输入用户名和密码