您的位置:澳门402永利com > 澳门402永利com网络 > 张开品质监察和控制的举办

张开品质监察和控制的举办

发布时间:2019-10-25 02:38编辑:澳门402永利com网络浏览(113)

    图片 1

    1 什么是 Kubernetes?

    监视日志和指标状态是集群管理员的重点工作。它的好处很明显:指标能帮你设置一个合理的性能目标,而日志分析可以发现影响你工作负载的问题。然而,困难的是如何找到一个与大量运行的应用程序一起工作的监视解决方案。

     
    Kubernetes 是 Google 开源的容器集群管理系统,其管理操作包括部署,调度和节点集群间扩展等。
     
    如下图所示为目前 Kubernetes 的架构图,由 master 和 node 端构成,调度部署和扩展由 master 发起,node 协助 master 实现这些功能。
     
    图片 2
     
    使用 Kubernetes 可以做到:
     
    自动化容器的部署和复制;
    随时扩展或收缩容器规模;
    将容器组织成组,并且提供容器间的负载均衡;
    提供容器弹性,如果容器失效就替换它等等。

    在本文中,我将使用 Graylog (用于日志)和 Prometheus (用于指标)去打造一个 Kubernetes 集群的监视解决方案。当然了,这不仅是将三个东西连接起来那么简单,实现上,最终结果看起来应该如题图所示:

    2 Prometheus + Grafana

     
    针对 Kubernetes master 端,如何评估各个组件的性能呢?目前社区提供一种搭建便捷、实用性强的监控方案:Prometheus

    • Grafana。
       
      Prometheus 是使用 Golang 开发的开源监控系统,被人称为下一代监控系统,是为数不多的适合 Docker、Mesos 、Kubernetes 环境的监控系统之一 。
       
      Grafana 是一个开源的图表可视化系统,简言之,其特点在于图表配置比较方便、生成的图表漂亮。
       
      Prometheus + Grafana 监控系统的组合中,前者负责采样数据并存储这些数据;后者则侧重于形象生动的展示数据。
       
      搭建好的这两个长(下面)这个样子,是不是感觉 grafana 的图形化展示能力很强大呢?
       
      图片 3
       
      prometheus 截图
       
      图片 4
       
      grafana 截图
       
      那么它们要如何安装和配置?下面就分别对这两者进行个详细的介绍。  

    正如你所了解的,Kubernetes 不是一件东西 —— 它由主控节点、工作节点、网络连接、配置管理等等组成。同样,Graylog 是一个配角(apache2、mongodb、等等),Prometheus 也一样(telegraf、grafana 等等)。在部署中连接这些点看起来似乎有些让人恐惧,但是使用合适的工具将不会那么困难。

    3 Prometheus

     
    概念
     
    Prometheus 是源于 Google Borgmon 的一个系统监控和报警工具,用 Golang 语言开发。基本原理是通过 HTTP 协议周期性地抓取被监控组件的状态(pull 方式),这样做的好处是任意组件只要提供 HTTP 接口就可以接入监控系统,不需要任何 SDK 或者其他的集成过程。
     
    这样做非常适合虚拟化环境比如 VM 或者 Docker ,故其为为数不多的适合 Docker、Mesos 、Kubernetes 环境的监控系统之一,被很多人称为下一代监控系统。
     
    pull 方式
     
    Prometheus 采集数据用的是 pull 也就是拉模型,通过 HTTP 协议去采集指标,只要应用系统能够提供 HTTP 接口就可以接入监控系统,相比于私有协议或二进制协议来说开发简单。
     
    push 方式
     
    对于定时任务这种短周期的指标采集,如果采用 pull 模式,可能造成任务结束了 Prometheus 还没有来得及采集的情况,这个时候可以使用加一个中转层,客户端推数据到 Push Gateway 缓存一下,由 Prometheus 从 push gateway pull 指标过来。
     
    组成及架构
     
    ○ Prometheus server:主要负责数据采集和存储,提供 PromQL 查询语言的支持;
    ○ Push Gateway:支持临时性 Job 主动推送指标的中间网关;
    ○ exporters:提供被监控组件信息的 HTTP 接口被叫做 exporter ,目前互联网公司常用的组件大部分都有 exporter 可以直接使用,比如 Varnish、Haproxy、Nginx、MySQL、Linux 系统信息 (包括磁盘、内存、CPU、网络等等);
    ○ PromDash:使用 rails 开发的 dashboard,用于可视化指标数据;
    ○ WebUI:9090 端口提供的图形化功能;
    ○ alertmanager:实验性组件、用来进行报警;
    ○ APIclients:提供 HTTPAPI 接口
     
    图片 5
     
    安装与配置
     
    下载 Prometheus
     
    在官网 中选择合适的版本下载,解压。
     
    配置文件
     
    配置 job 和每个 job 要收集的目标 metric 数据源即可。配置文件分为 job、targets 两级,Kubernetes 的监控中主要配置 api-server 和 etcd 的 metrics 地址。
     
    其中,api-server 和 etcd 的 metrics 地址为: {apiserver_ip}:{apiserver_port}/metrics、{etcd_ip1}:{etcd_port1}/metrics,… ,{etcd_ipX}:{etcd_portX}/metrics
     
    #my global config
    global:
    scrape_interval: 15s # By default, scrape targets every 15 seconds.pull数据的间隔时间——默认 evaluation_interval: 15s # By default, scrape targets every 15 seconds.# scrape_timeout is set to the global default (10s).# Attach these labels to any time series or alerts when communicating with# external systems (federation, remote storage, Alertmanager).
    external_labels:
    monitor: ‘codelab-monitor’# Load and evaluate rules in this file every ‘evaluation_interval’ seconds.
    rule_files:
    #- “first.rules”# – “second.rules”
     
    #A scrape configuration containing exactly one endpoint to scrape:# Here it’s Prometheus itself.
    scrape_configs:
    #The job name is added as a label `job=` to any timeseries scraped from this config.
    – job_name: ‘etcd-server-v2’# Override the global default and scrape targets from this job every 5 seconds.
    scrape_interval: 10s #给每个job设置pull数据的间隔时间
    # metrics_path defaults to ‘/metrics’# scheme defaults to ‘http’.
    static_configs:
    – targets: [‘{etcd_ip1}:{etcd_port1}’,'{etcd_ip2}:{etcd_port2}’, … , ‘{etcd_ipX}:{etcd_portX}’]

    – job_name: ‘apiserver’# Override the global default and scrape targets from this job every 5 seconds.
    scrape_interval: 10s
    #metrics_path defaults to ‘/metrics’# scheme defaults to ‘http’.
    static_configs:
    – targets: [‘{apiserver_ip}:{apiserver_port}’]
     
    启动方式
     
    源码启动——当前采用这个方式:直接启动。 参数里面指定配置文件路径、监听端口号。
    nohup ./prometheus -config.file=prometheus.yml -web.listen-address “:9090” -log.level=debug 2>&1 >> run.log &
     
    启动成功后的效果
     
    ○ 访问监控页面: 端口提供图形化功能), status–>targets 可以看到 job 下面各个 metric 的状态信息。
     
    图片 6
     
    ○ 在页面 中输入针对该 target 的 Prometheus query 语句即可实时绘图,但是趋势图不能保存,使用起来不便。
     
    如以下 query 语句,用于计算名为 apiserver、scheduler 和 controller-manager 的 job 在 20s 内平均 cpu 使用率:rate(process_cpu_seconds_total{job=~”apiserver|scheduler|controller-manager”}[20s]),Prometheus query 语法见第 5 节。
     
    以上请求得到的图形可以认为是以下两个步骤的组合:
     
    ○ 根据 http 请求:]) 后得到的 json 数据(包括 job 名称、时间信息和 cpu 使用率信息等)
     
    ○ 解析 json 内容,然后进行绘图
     
    图片 7  

    我将使用 conjure-up 和 Canonical 版本的 Kubernetes (CDK) 去探索 Kubernetes。我发现 conjure-up 接口对部署大型软件很有帮助,但是我知道一些人可能不喜欢 GUI、TUI 以及其它用户界面。对于这些人,我将用命令行再去部署一遍。

    4 Grafana

     
    Grafana 是一个开源的图表可视化系统,与 Kibana 类似,能够对后端的数据进行实时展示,简单地说图表配置比较方便、生成的图表比较漂亮。它一般和一些时间序列数据库进行配合来展示数据,例如:Graphite、OpenTSDB、InfluxDB 和 Elasticsearch 等。
     
    安装与配置
     
    下载 Grafana:
     
    在官网 选择合适版本下载、解压。
     
    启动方式:
     
    ○ 源码启动(当前采用这个方式)
     
    配置文件在 ./conf/defaults.ini, 比如默认的监听端口是 3000,data、log 之类的路径等,我们这边均使用默认配置。
    nohup ./bin/grafana-server -homepath ./ 2>&1 >> run.log &
     
    ○ docker 启动
     
    docker run –name grafana -d
    -p 3000:3000
    -v $DATAPATH:/var/lib/grafana
    grafana/grafana

    启动成功后效果
     
    访问页面 ,默认情况下管理员的账号和密码均为 admin,登录即可。
     
    使用指南
     
    ○ 添加数据源 datasource
     
    添加 prometheus 地址,作为一个数据源,数据源类型选择的是 prometheus。当前 prometheus 内包含了3个 job(一个 Kubernetes、一个 etcd、一个 prometheus 自身), 其中 etcd 的 job 里面又有四个 target,在 grafana 中称其为 instance。
     
    图片 8
     
    添加 dashboard
     
    添加 dashboard,通过名字区分不同的 dashboard 即可。
     
    图片 9
     
    ○ 为 dashboard 添加监控 panel
     
    常见的 panel 是 graph, 其中 metric 配置为核心配置。Query 中使用的是 Prometheus query 语言,一个 panel 中可以添加 n 多的 query,以图形化方式显示。(所以为了视觉美观和直观,建议图中的线条不要太多)
     
    图片 10  

    在开始之前需要注意的一点是,Graylog 和 Prometheus 是部署在 Kubernetes 外侧而不是集群上。像 Kubernetes 仪表盘和 Heapster 是运行的集群的非常好的信息来源,但是我的目标是为日志/指标提供一个分析机制,而不管集群运行与否。

    5 Prometheus Query 语言

     
    ○ prometheus 的查询语法基础:
    ○ prometheus 查询语法的操作符:
    ○ prometheus 的函数:
    ○ prometheus 官方最佳实践: ,其中有个例子和 Kubernetes 计算平均延迟时间比较类似。

     

    来自: 网易云-共创云上精彩世界

     

    开始探索

    如果你的系统上没有 conjure-up,首先要做的第一件事情是,请先安装它,在 Linux 上,这很简单:

    1. sudo snap install conjure-up --classic

    对于 macOS 用户也提供了 brew 包:

    1. brew install conjure-up

    你需要最新的 2.5.2 版,它的好处是添加了 CDK spell,因此,如果你的系统上已经安装了旧的版本,请使用 sudo snap refresh conjure-up 或者 brew update && brew upgrade conjure-up 去更新它。

    安装完成后,运行它:

    1. conjure-up

    图片 11

    你将发现有一个 spell 列表。选择 CDK 然后按下回车。

    图片 12

    这个时候,你将看到 CDK spell 可用的附加组件。我们感兴趣的是 Graylog 和 Prometheus,因此选择这两个,然后点击 “Continue”。

    它将引导你选择各种云,以决定你的集群部署的地方。之后,你将看到一些部署的后续步骤,接下来是回顾屏幕,让你再次确认部署内容:

    图片 13

    除了典型的 K8s 相关的应用程序(etcd、flannel、load-balancer、master 以及 workers)之外,你将看到我们选择的日志和指标相关的额外应用程序。

    Graylog 栈包含如下:

    • apache2:graylog web 界面的反向代理
    • elasticsearch:日志使用的文档数据库
    • filebeat:从 K8s master/workers 转发日志到 graylog
    • graylog:为日志收集器提供一个 api,以及提供一个日志分析界面
    • mongodb:保存 graylog 元数据的数据库

    Prometheus 栈包含如下:

    • grafana:指标相关的仪表板的 web 界面
    • prometheus:指标收集器以及时序数据库
    • telegraf:发送主机的指标到 prometheus 中

    你可以在回顾屏幕上微调部署,但是默认组件是必选 的。点击 “Deploy all Remaining Applications” 继续。

    部署工作将花费一些时间,它将部署你的机器和配置你的云。完成后,conjure-up 将展示一个摘要屏幕,它包含一些链接,你可以用你的终端去浏览各种感兴趣的内容:

    图片 14

     

    浏览日志

    现在,Graylog 已经部署和配置完成,我们可以看一下采集到的一些数据。默认情况下,filebeat 应用程序将从 Kubernetes 的 master 和 worker 中转发系统日志( /var/log/*.log )和容器日志(/var/log/containers/*.log)到 graylog 中。

    记住如下的 apache2 的地址和 graylog 的 admin 密码:

    1. juju status --format yaml apache2/0|greppublic-address
    2. public-address:<your-apache2-ip>
    3. juju run-action --wait graylog/0 show-admin-password
    4. admin-password:<your-graylog-password>

    在浏览器中输入 http://<your-apache2-ip> ,然后以管理员用户名(admin)和密码(<your-graylog-password>)登入。

    注意: 如果这个界面不可用,请等待大约 5 分钟时间,以便于配置的反向代理生效。

    登入后,顶部的 “Sources” 选项卡可以看到从 K8s 的 master 和 workers 中收集日志的概述:

    图片 15

    通过点击 “System / Inputs” 选项卡深入这些日志,选择 “Show received messages” 查看 filebeat 的输入:

    图片 16

    在这里,你可以应用各种过滤或者设置 Graylog 仪表板去帮助识别大多数比较重要的事件。查看 Graylog Dashboard 文档,可以了解如何定制你的视图的详细资料。

     

    浏览指标

    我们的部署通过 grafana 仪表板提供了两种类型的指标:系统指标,包括像 K8s master 和 worker 的 CPU /内存/磁盘使用情况,以及集群指标,包括像从 K8s cAdvisor 端点上收集的容器级指标。

    记住如下的 grafana 的地址和 admin 密码:

    1. juju status --format yaml grafana/0|greppublic-address
    2. public-address:<your-grafana-ip>
    3. juju run-action --wait grafana/0get-admin-password
    4. password:<your-grafana-password>

    在浏览器中输入 http://<your-grafana-ip>:3000,输入管理员用户(admin)和密码(<your-grafana-password>)登入。成功登入后,点击 “Home” 下拉框,选取 “Kubernetes Metrics (via Prometheus)” 去查看集群指标仪表板:

    图片 17

    我们也可以通过下拉框切换到 “Node Metrics (via Telegraf) ” 去查看 K8s 主机的系统指标。

    图片 18

     

    另一种方法

    正如在文章开始的介绍中提到的,我喜欢用 conjure-up 的向导去完成像 Kubernetes 这种复杂软件的部署。现在,我们来看一下 conjure-up 的另一种方法,你可能希望去看到实现相同结果的一些命令行的方法。还有其它的可能已经部署了前面的 CDK,并想去扩展使用上述的 Graylog/Prometheus 组件。不管什么原因你既然看到这了,既来之则安之,继续向下看吧。

    支持 conjure-up 的工具是 Juju。CDK spell 所做的一切,都可以使用 juju 命令行来完成。我们来看一下,如何一步步完成这些工作。

     

    从 Scratch 中启动

    如果你使用的是 Linux,安装 Juju 很简单,命令如下:

    1. sudo snap install juju --classic

    对于 macOS,Juju 也可以从 brew 中安装:

    1. brew install juju

    现在为你选择的云配置一个控制器。你或许会被提示请求一个凭据(用户名密码):

    1. juju bootstrap

    我们接下来需要基于 CDK 捆绑部署:

    1. juju deploy canonical-kubernetes

     

    从 CDK 开始

    使用我们部署的 Kubernetes 集群,我们需要去添加 Graylog 和 Prometheus 所需要的全部应用程序:

    1. ## deploy graylog-related applications
    2. juju deploy xenial/apache2
    3. juju deploy xenial/elasticsearch
    4. juju deploy xenial/filebeat
    5. juju deploy xenial/graylog
    6. juju deploy xenial/mongodb
    1. ## deploy prometheus-related applications
    2. juju deploy xenial/grafana
    3. juju deploy xenial/prometheus
    4. juju deploy xenial/telegraf

    现在软件已经部署完毕,将它们连接到一起,以便于它们之间可以相互通讯:

    1. ## relate graylog applications
    2. juju relate apache2:reverseproxy graylog:website
    3. juju relate graylog:elasticsearch elasticsearch:client
    4. juju relate graylog:mongodb mongodb:database
    5. juju relate filebeat:beats-host kubernetes-master:juju-info
    6. juju relate filebeat:beats-host kubernetes-worker:jujuu-info
    1. ## relate prometheus applications
    2. juju relate prometheus:grafana-source grafana:grafana-source
    3. juju relate telegraf:prometheus-client prometheus:target
    4. juju relate kubernetes-master:juju-info telegraf:juju-info
    5. juju relate kubernetes-worker:juju-info telegraf:juju-info

    这个时候,所有的应用程序已经可以相互之间进行通讯了,但是我们还需要多做一点配置(比如,配置 apache2 反向代理、告诉 prometheus 如何从 K8s 中取数、导入到 grafana 仪表板等等):

    1. ## configure graylog applications
    2. juju config apache2 enable_modules="headers proxy_html proxy_http"
    3. juju config apache2 vhost_http_template="$(base64 <vhost-tmpl>)"
    4. juju config elasticsearch firewall_enabled="false"
    5. juju config filebeat
    6. logpath="/var/log/*.log /var/log/containers/*.log"
    7. juju config filebeat logstash_hosts="<graylog-ip>:5044"
    8. juju config graylog elasticsearch_cluster_name="<es-cluster>"
    1. ## configure prometheus applications
    2. juju config prometheus scrape-jobs="<scraper-yaml>"
    3. juju run-action --wait grafana/0import-dashboard
    4. dashboard="$(base64 <dashboard-json>)"

    以上的步骤需要根据你的部署来指定一些值。你可以用与 conjure-up 相同的方法得到这些:

    • <vhost-tmpl>: 从 github 获取我们的示例 模板
    • <graylog-ip>juju run --unit graylog/0 'unit-get private-address'
    • <es-cluster>juju config elasticsearch cluster-name
    • <scraper-yaml>: 从 github 获取我们的示例 scraper ;[K8S_PASSWORD][20][K8S_API_ENDPOINT][21] substitute 的正确值
    • <dashboard-json>: 从 github 获取我们的 主机 和 k8s 仪表板

    最后,发布 apache2 和 grafana 应用程序,以便于可以通过它们的 web 界面访问:

    1. ## expose relevant endpoints
    2. juju expose apache2
    3. juju expose grafana

    现在我们已经完成了所有的部署、配置、和发布工作,你可以使用与上面的浏览日志浏览指标部分相同的方法去查看它们。

     

    总结

    我的目标是向你展示如何去部署一个 Kubernetes 集群,很方便地去监视它的日志和指标。无论你是喜欢向导的方式还是命令行的方式,我希望你清楚地看到部署一个监视系统并不复杂。关键是要搞清楚所有部分是如何工作的,并将它们连接到一起工作,通过断开/修复/重复的方式,直到它们每一个都能正常工作。

    这里有一些像 conjure-up 和 Juju 一样非常好的工具。充分发挥这个生态系统贡献者的专长让管理大型软件变得更容易。从一套可靠的应用程序开始,按需定制,然后投入到工作中!

    大胆去尝试吧,然后告诉我你用的如何。你可以在 Freenode IRC 的 #conjure-up#juju 中找到像我这样的爱好者。感谢阅读!

     

    关于作者

    Kevin 在 2014 年加入 Canonical 公司,他专注于复杂软件建模。他在 Juju 大型软件团队中找到了自己的位置,他的任务是将大数据和机器学习应用程序转化成可重复的(可靠的)解决方案。

    这篇文章最初发表在 Kevin Monroe 的博客 上。


    via:

    作者:Kevin Monroe 译者:qhwdw 校对:wxy

    本文由 LCTT 原创编译,Linux中国 荣誉推出

    本文永久更新链接地址

    图片 19

    本文由澳门402永利com发布于澳门402永利com网络,转载请注明出处:张开品质监察和控制的举办

    关键词: