JAVA项目镜像构建:Tomcat
JAVA项目镜像构建:Tomcat
tomcat目录文件:1.apache-tomcat-8.5.43.tar.gz 2.Dockerfile 3.Dockerfile2 4.ROOT.war
Dockerfile(环境镜像)
FROM centos:7MAINTAINER www.ctnrs.comENV VERSION=8.5.43RUN yum install java-1.8.0-openjdk wget curl unzip iproute net-tools -y && \ yum clean all && \ rm -rf /var/cache/yum/*ADD apache-tomcat-${VERSION}.tar.gz /usr/local/RUN mv /usr/local/apache-tomcat-${VERSION} /usr/local/tomcat && \ sed -i '1a JAVA_OPTS="-Djava.sec ...
基于Jenkins发布微服务
ansible-yum源:
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
1.安装相关的插件
pipeline、git、git parameter 、extended choice parameter、ansible
2.生成相关插件的语法:
git parameter
extended choice parameter
choice选项参数
git
3.编写流水线脚本
pipeline { agent { label "test1" } environment { git_address = "http://192.168.0.11/my-group/ms.git" git_password = "c601674b-44e0-45a2-aaba-3f476e2c3c51" ansible_ssh ...
微服务部署
项目架构原理:
用户使用手机端或电脑端访问前端程序,前端程序来调用服务端的服务接口,前端一般是在客户端完成的,处理数据,渲染数据,服务端提供一个统一的接口(负载均衡提供的统一接口)供前端去调用,接下来到网关,网关不是网络的网关,它是一个反向的路由,例如使用nginx做反向代理网关,那么nginx(API接口)作用是为后端微服务提供一个统一的入口,来实现不同的功能,不单是路由功能,还有安全认证,限流,负载均衡等功能,那么请求来到网关会帮你转发到后端的微服务,它帮你转发的时候,会去请求注册中心(集中管理每个微服务实例IP)里面的微服务,这个微服务下有哪些实例IP,拿到之后根据自己的调度算法帮你转发到其中的一个微服务实例IP,然后微服务都会调用后端的数据库(数据库,分布式存储),存储用户的相关信息。配置中心呢,是集中管理每个微服务相关的配置文件。
为什么要用注册中心呢?(主流注册中心:eureka, consul, nacos)
1.集中帮你记录每个微服务对应的多副本实例IP,像每个微服务都有很多实例IP
2.实现对每个微服务对应的多副本实例IP负载均衡
3.保证对每个微服务对应的多副本实 ...
如何自己写metrice接口?
1.自己写metrice接口,要遵循数据模型 1) 先知道怎么收集你要的监控指标 2) 集成官方的客户端或者自己写的数据格式,暴露出来2.使用社区维护的exporter(采集器,以数据模型暴露metrice接口)如何自动化监控100台服务器?传统的方式:1.要在这100台机器上安装node_exporter(采集器)2.在prometheus配置文件里面增加这100台机器的配置自动化部署:1.使用ansible批量部署安装node_exporter2.基于consul服务发现机制3.将node_exporter所在机器的IP和端口注册到consul服务发现里面4.prometheus从consul里面获取所有的IP和端口自动的加入监控100台: web服务器 db服务器 负载均衡服务器 消息队列服务器实际运维中会把他们进行分组管理"id": "web1","name": "webservers""id": "web2","name": ...
Grafana可视化展示
Grafana是一个开源的度量分析和可视化系统。
官方文档:https://grafana.com/docs/grafana/latest/
部署文档:https://grafana.com/grafana/download
访问地址:http://IP:3000 用户名/密码:admin/admin # 第一次需要重置密码
Grafana只用于展示数据,但这个数据从哪里来? 需要你根据提供数据的服务选择,支持的数据源如下:
自定义仪表盘:设置导航栏
最终实现简单效果图
监控k8s
监控k8s:
prometheus---->apiserver(192.168.0.13:6443 )---->kubelet(cadvisor)
prometheus采集是通过访问k8s的统一接口aipserver这个地址获取数据的,apiserver是去请求kubelet的,而kubelet集成了cadvisor,cadvisor用于收集正在运行的容器资源使用和性能信息。
apiserver一般是不能被访问的,使用https协议,需要授权,那么prometheus怎么获取数据呢?就需 要在k8s上授权RBAC,授权后就会产生一个token,prometheus就是拿着这个token去访问apiserver的。
监控K8s集群Pod步骤:
k8s节点配置
1、K8s RBAC授权
kubectl apply -f rbac.yaml
2、获取Token并保存到文件
kubectl get sa prometheus -n kube-system -o yamlkubectl describe secret prometheus-token-xxx -n kube ...
基于ansible监控100台机器
consul服务器:
#基于consul的服务发现#Consul是一个分布式的服务发现和键/值存储系统。#Docker部署Consul:(任意机器部署,只要prometheus和被监控端能够和consul通信即可docker run --name consul -d -p 8500:8500 consul
prometheus服务器:
#服务端配置vim /opt/monitor/prometheus/prometheus.ymlscrape_configs: - job_name: 'webservers' #job名称,一般定义一个分组的名称 basic_auth: username: prometheus #指定被监控端接口指标的用户名 password: 123.com #指定被监控端接口指标的密码 consul_sd_configs: - server: 192.168.0.11:8500 #consul服务发现的地址及端口 services: [ ...
PromQL基本使用
PromQL(Prometheus Query Language) 是 Prometheus 自己开发的数据查询 DSL 语言,语言表现力 非常丰富,支持条件查询、操作符,并且内建了大量内置函数,供我们针对监控数据的各种维度进行查 询。
https://prometheus.io/docs/prometheus/latest/querying/examples/
https://prometheus.io/docs/prometheus/latest/querying/operators/
https://prometheus.io/docs/querying/functions/
目标实例状态:up #查看当前的一个实例以及实例的状态,1表示正常,0表示不正常count(up) #查看当前实例的总数 count()计数函数查询指标最新样本(称为瞬时向量): node_cpu_seconds_total 可以通过附加一组标签来进一步过来这些时间序列: node_cpu_seconds_total{job="Linux Server"} ...
告警触发流程
在prometheus配置里面创建告警规则
判断当前实例的状态是否正常,up=1代表正常,up=0代表失联,不正常
groups:- name: general.rules rules: - alert: InstanceDown expr: up == 0 for: 2m labels: severity: error annotations: summary: "Instance {{ $labels.instance }} 停止工作" description: "{{ $labels.instance }}: job {{ $labels.job }} 已经停止5分钟以上."
统计cpu,内存,文件系统的使用率,超过80%发送告警
groups:- name: node.rules rules: - alert: NodeFilesystemUsage ...
Alertmanager告警收敛
分组(group):将类似性质的警报分类为单个通知
抑制(Inhibition):当警报发出后,停止重复发送由此警报引发的其他警报
静默(Silences):是一种简单的特定时间静音提醒的机制
抑制规则
inhibit_rules: - source_match: level: 'high' #指定告警级别 target_match: level: 'warning' #指定抑制告警级别 equal: ['alertname', 'dev', 'instance']
场景: 一台服务器上有nginx服务等等其他的服务,某一天服务器挂掉了,那么如果不做抑制的话,就会发送多个告警邮件,这显然不是我们想要的,这个时候,我们可以通过设定级别标签的方式,比如设定服务器挂掉就是一个高级别,而上面的其他服务设定为警告级别,这样我们就可以使用抑制做告警收敛,也就是只发送一个服务器挂掉的警告,其他的服务的警告就被抑制了。
抑制(Inhi ...