dockerfile指令
1.FROM
1 | #指定所创建镜像的基础镜像,如果本地不存在,则默认去镜像仓库下载指定镜像 |
2.MAINTAINER
1 | #指定维护者信息 |
3.RUN
1 | #镜像制作过程中,在可写层执行指定命令 |
4.CMD
1 | #指定启动容器时默认执行的命令,一般用于执行服务启动脚本。每个 Dockerfile 只能有一条 CMD 指令,如果指定了多条,只有最后一条会生效,并且 docker run 接的命令会覆盖掉 CMD 指令的内容。支持三种格式: |
1.FROM
1 | #指定所创建镜像的基础镜像,如果本地不存在,则默认去镜像仓库下载指定镜像 |
2.MAINTAINER
1 | #指定维护者信息 |
3.RUN
1 | #镜像制作过程中,在可写层执行指定命令 |
4.CMD
1 | #指定启动容器时默认执行的命令,一般用于执行服务启动脚本。每个 Dockerfile 只能有一条 CMD 指令,如果指定了多条,只有最后一条会生效,并且 docker run 接的命令会覆盖掉 CMD 指令的内容。支持三种格式: |
1.查找镜像
1 | docker serch IMG_NAME[:TAG] |
2.下载镜像
1 | docker pull IMG_NAME[:TAG] |
3.查看镜像
1 | docker images |
4.镜像打tag
1 | docer tag SRC_IMG_NAME[:TAG] NEW_IMG_NAME[:TAG] |
1.创建容器
1 | docker create [OPTIONS] CONTAINER_NAME[:TAG] |
2.启动容器
1 | docker start CONTAINER_ID |
3.运行容器(相当于docker create + docker start)
1 | docker run [OPTIONS] NAME[:TAG] |
1.1、数据采集层
这一层主要收集日志,也可以做一些简单的数据处理和过滤。通常有两种方式:
(1)日志采集客户端监,比如filebeat、logstash、Flume、Logagent、rsyslog、fluentd等
(2)直接从程序中将日志写入消息队列或es集群
1.2、消息队列
由于数据处理层中的logstash不能持久化存储数据,为防止异常时日志无法储存到es集群中,通常会加一层消息队列作为缓存和持久化存储数据,一般选择kafka或redis。
1.3、数据处理
日志写入es集群前,通常需要做一些数据处理,比如清理一些无效日志、对一些日志做格式化处理、根据不同的类型写入不同的索引等,由于这块可能比较消耗时间和性能,所以官方建议使用比较轻量级的filebeat来收集日志,将日志处理的操作放在服务端做。虽然logstash的功能十分强大,但是其缺点也一直然人诟病,就是在解析时对日志的消费速率会有很大影响。新版的es中针对这点也做了相应的策略,推出的ignest node可以用来处理数据。
1.4、数据存储
Es集群分布式存储数据,采用lucene作为其底层检索引擎,在上层提供了丰富的查询的api,方便快速查询想要的数据
1.5、数据展示
可以通过简单的配置kibana或grafana,就能图形化展示出es中存储的信息。也可以通过api的调用自己实现图形化的展示。
本文主要讲述如何使用prometheus,结合kube-state-metrics,cAdvisor,Grafana对k8s集群进行监控和报警,和监控大盘的整体展示。
kube-state-metrics安装有以下配置文件,可以把kube-state-metrics-deployment.yaml里面的镜像路径改成内网的镜像路径。
1 | #把配置文件都放在kube-state-metrics,执行这个命令即可部署 |
镜像准备(注意,提前在所有节点都下载好镜像,不然coredns kube-proxy 这些pod会自动安装安装不上 )
master节点粘贴下面脚本,下载镜像:
1 |
|
node节点粘贴下面脚本,下载镜像:
1 |
|
Alertmanager与Prometheus是相互分离的两个组件。Prometheus服务器根据报警规则将警报发送给Alertmanager,然后Alertmanager将silencing、inhibition、aggregation等消息通过电子邮件、PaperDuty和HipChat发送通知。
在 Prometheus 中告警分为两部分:
Prometheus 服务根据所设置的告警规则将告警信息发送给 Alertmanager。
Alertmanager 对收到的告警信息进行处理,包括分组,抑制,静默策略路由告警通知。
使用告警服务主要的步骤如下:
安装配置 Alertmanager。
通过设置 -alertmanager.url 让 Prometheus 服务与 Alertmanager 进行通信。
在 Prometheus 服务中设置告警规则。
分组是指当出现问题时,Alertmanager会收到一个单一的通知,而当系统宕机时,很有可能成百上千的警报会同时生成,这种机制在较大的中断中特别有用。
例如,当数十或数百个服务的实例在运行,网络发生故障时,有可能服务实例的一半不可达数据库。在告警规则中配置为每一个服务实例都发送警报的话,那么结果是数百警报被发送至Alertmanager。
但是作为用户只想看到单一的报警页面,同时仍然能够清楚的看到哪些实例受到影响,因此,人们通过配置Alertmanager将警报分组打包,并发送一个相对看起来紧凑的通知。
分组警报、警报时间,以及接收警报的receiver是在配置文件中通过路由树配置的。
抑制是指当警报发出后,停止重复发送由此警报引发其他错误的警报的机制。
例如,当警报被触发,通知整个集群不可达,可以配置Alertmanager忽略由该警报触发而产生的所有其他警报,这可以防止通知数百或数千与此问题不相关的其他警报。
抑制机制可以通过Alertmanager的配置文件来配置。
在 Prometheus 中负责数据汇报的程序统一叫做 Exporter, 而不同的 Exporter 负责不同的业务。 它们具有统一命名格式,即 xx_exporter, 例如负责主机信息收集的 node_exporter。
Exporter原理就是将收集的数据转化为文本格式,并对外暴露接口,提供 http 请求。
node_exporter 主要用于 *NIX 系统监控, 用 Golang 编写。
默认开启的功能:
默认关闭的功能:
注意:我们可以使用 –collectors.enabled 运行参数指定 node_exporter 收集的功能模块, 如果不指定,将使用默认模块。
我们可以到下载页面 选择对应的二进制安装包,下面我将以 0.14.0 作为例子:
1 | #使用 wget 下载 Node Exporter |
Prometheus 启动的时候,可以加载运行参数 -config.file 指定配置文件,默认为 prometheus.yml。
在配置文件中我们可以指定 global, alerting, rule_files, scrape_configs, remote_write, remote_read 等属性。
global 属于全局的默认配置,它主要包含 4 个属性,
scrape_interval: 拉取 targets 的默认时间间隔。
scrape_timeout: 拉取一个 target 的超时时间。
evaluation_interval: 执行 rules 的时间间隔。
external_labels: 额外的属性,会添加到拉取的数据并存到数据库中。
通常我们可以使用运行参数 -alertmanager.xxx 来配置 Alertmanager, 但是这样不够灵活,没有办法做到动态更新加载,以及动态定义告警属性。
所以 alerting 配置主要用来解决这个问题,它能够更好的管理 Alertmanager, 主要包含 2 个参数:
rule_files 主要用于配置 rules 文件,它支持多个文件以及文件目录。
配置文件结构大致为:
1 | rule_files: |
PromQL (Prometheus Query Language) 是 Prometheus 自己开发的数据查询 DSL 语言,语言表现力非常丰富,内置函数很多,在日常数据可视化,rule 告警中都会使用到它。
我们可以在页面 http://localhost:9090/graph 中,输入下面的查询语句,查看结果,例如:
http_requests_total{code=”200”}
1 | 字符串: 在查询语句中,字符串往往作为查询条件 labels 的值,和 Golang 字符串语法一致,可以使用 "", '', 或者 `` , 格式如: |
PromQL 查询结果主要有 3 种类型: