容器云环境,你们如何监控应用运行情况? --JFrog 云原生应用监控实践

守給你的承諾、 提交于 2020-08-13 14:43:49

引言

自从2018年从Cloud Native Computing Foundation(CNCF)出现以来,您可能已经在使用K8操作系统,随着容器云技术的发展以及落地,提高了企业运维的效率和质量,并且降低了企业运营成本,但同时带来的问题是运维的复杂度和难度,举个例子🌰:由于容器的生命周期短,随时可能飘移到其他物理资源上运行,因此日志的采集和运行的监控很难像传统方式登录到服务器上查看,而运营团队需要了解有价值的数据来进行问题定位以及运营数据分析。

为了更广泛地提供这种可观察性,我们需要提供满足云原生环境下的监控能力。

JFrog 通过使用Elasticsearch和Kibana套件,以及Prometheus 和Grafana套件来监控Artifactory 制品库以及Xray 漏洞扫描工具的运行情况,下面我们一起了解JFrog 如何在云原生环境进行应用运维。

 

日志分析

Easticsearch是一个分布式且可扩展的搜索引擎,可用于搜索全文,结构化文本和分析。它通常用于搜索大量数据以及搜索不同类型的文档。

Kibana是Elasticsearch最常用的可视化和仪表板。Kibana使您能够通过构建可视化和仪表板的Web UI探索Elasticsearch日志数据。 

下面我们将向您展示如何利用同类最佳的开源日志分析技术:Elastic,Fluentd和Kibana为运营团队提供100%免费的开源日志分析平台

 

首先使用Fluentd,我们提供了与开源数据收集器Fluentd 的JFrog日志分析集成配置,该集成可随JFrog Platform部署的每个产品实例安装。Fluentd在JFrog平台中为每个产品执行日志输入,字段提取和记录转换,从而将该数据的输出标准化为JSON。

由于所有日志数据均以这种通用格式提供,因此Fluentd将通过Fluentd的可插入体系结构将其传送到您的Elasticsearch分析工具。

 

安装FluentD

安装FluentD,每个JPD(JFrog Platfrom Deployment)节点都需要安装Fluentd日志记录代理。该代理将负责为新的日志行添加各种JPD日志文件以解析到字段中,应用相应的记录转换,然后发送到Fluentd的相关输出插件。

例如,对于运行Red Hat UBI Linux的节点,td-agent必须安装Fluentd代理。对于基于root的程序包管理器(需要root访问):

 

$ curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent3.sh | SH

 

配置FluentD

根据我们是刚刚完成基于根的安装还是基于非根的安装,可能需要将Fluentd配置文件放置在不同的位置。

默认情况下,对于软件包管理器根安装,该td-agent.conf文件位于中/etc/td-agent/。

$ ls -al /etc/td-agent/td-agent.conf 
-rw-r--r-- 1root 8017 May 11 18:09 /etc/td-agent/td-agent.conf

 

对于非root的安装,我们可以将td-agent.conf文件存储在我们具有写许可权的任何位置。运行td-agent时,可以使用该-c标记将fluentd指向该文件位置。

该配置文件必须替换为从JFrog日志分析Github存储库派生的配置文件。

在此存储库中,弹性文件夹包含配置文件模板。使用与节点中运行的JFrog应用程序匹配的模板:

 

以Artifactory 为例子,添加采集日志配置如下:

我们将需要使用match指令更新此配置文件,该指令指定指向我们的Elasticsearch实例的主机和端口:

#ELASTIC OUTPUT

  @type elasticsearch

  @id elasticsearch

  host elasticsearch

  port 9200

  index_name unified-artifactory

  include_tag_key true

  type_name fluentd

  logstash_format false

#END ELASTIC OUTPUT

 

此处的主机是我们的内部K8s集群主机。如果以其他方式配置Elasticsearch和Kibana,也可以将其设置为外部IP地址。

 

运行FluentD

现在我们已经有了新的配置文件,我们可以在登录到容器后在容器上启动td-agent作为服务:

$ systemctl启动td-agent

$ td-agent -c td-agent.conf

这将启动Fluentd日志采集代理,该代理将跟踪JPD日志并将其全部发送到Elasticsearch。

您必须有运行Artifactory和Xray的所有Kubernetes Pod重复执行此过程,当然也可以添加Side Car 容器到Artifactory和Xray 组件中。

 

使用Elasticsearch和Kibana

如果尚未安装和配置Elasticsearch以及设置Kibana,我们提供了一些必要的引导和对应的YAML文件,用于将Elasticsearch和Kibana部署到Kubernetes

通过Kibana,在每个Artifactory和Xray Pod中安装Fluentd并运行td-agent的情况下,您可以在Kibana索引管理页面中看到生成的索引,如下图:

同时JFrog集成提供了一个NDJSON文件,该文件定义了索引模式和可视化配置。可以通过“ Kibana保存的对象”页面导入该文件。单击“导入”按钮导入该文件。

 

导入后,您应该能够看到索引模式,可视化效果,仪表板,小部件,如下图:

 

在索引模式中,您可以看到我们有2个JFrog Product相关Scripted Field。

这是因为我们要将request_content_length和response_content_length转换为GB。您可以在“ Discover”部分中查看正在生成的日志。

最后,让我们查看仪表板,该仪表板现在包含在数据小部件(Wedgets)中显示的信息,以使您可以实时观察JFrog Unified Platform的日志数据,包含以下数据,如下图:

  1. 日志卷,可以按类型过滤
  2. 服务错误
  3. HTTP响应码
  4. 存取储存库
  5. 以GB为单位的数据传输,用于上传/下载
  6. 上传/下载的top 10的IP
  7. 通过用户名审核操作
  8. IP和用户名拒绝的操作和登录
  9. 按用户名的上传操作

应用监控

云原生环境本身会提供基础的资源监控,但是缺少足够的应用内部监控用于更好的进行运营决策,为了增强您监控能力,我们使用Promethus和Grafana套件进行监控,并提供了相应的集成配置手册:JFrog log analytics solution for Prometheus and Grafana

通过此集成,可以收集JFrog Platform日志数据并转化为相应的监控指标(Promethus metrics),以使用可视化工具Grafana获得应用内视。

 

监控原理以及数据流如下图:

安装FluentD

总体安装过程与上一章节一致,和日志分析不同的是,我们如何不改变业务逻辑的同时暴露指标服务,以便使用监控工具快速分析。

这里我们需要安装Prometheus FluentD插件,该插件将我们的日志记录转换为Prometheus的HTTP指标接口(Metrics)。

 

配置FluentD

FluentD使用文本配置文件进行配置,该文件包含输入源,过滤器和输出链。Prometheus FluentD插件提供用于配置Prometheus指标的语法。在我们的案例中,我们将Artifactory和Xray日志事件转换为Prometheus的指标。我们已经在这里设置了Artifactory和Xray FluentD配置示例。

 

选择适当的fluent.conf.*文件,然后启动td-agent。

  1. fluent.conf.rt – Artifactory版本7
  2. fluent.conf.rt6 – Artifactory版本6
  3. fluent.conf.xray – Xray

然后,td-agent在端口24321 / metrics上公开HTTP度量接口。您可以转到该URL,然后看到类似以下内容的内容。

 

Prometheus

对于我们的环境,我们使用Prometheus Kubernetes Operator安装了Prometheus。如果您尚未安装Prometheus,请点击此处,了解如何使用操作员安装Prometheus的说明。使用Prometheus Kubernetes Operator,我们可以配置ServiceMonitors,这使Prometheus可以自动检测服务的新指标接口。否则,可以按照Prometheus文档中的描述使用YAML配置文件。以下ServiceMonitor资源配置可以使用Kubernetes 选择器检测任何新的指标接口。

该选择器将使我们的指标服务与标签应用程序匹配:artifactory-ha. 该服务公开了我们在上面的FluentD Prometheus插件中设置的HTTP指标(Metrics)接口,配置如下图:

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
 name: servicemonitor-artifactory-ha-primary
 labels:
   metrics: jfrog
spec:
 selector:
   matchLabels:
     app: artifactory-ha-primary
 endpoints:
 - port: metrics
   interval: 15s

 

apiVersion: v1
kind: Service
metadata:
 labels:
   app: artifactory-ha-member
 name: artifactory-member-ha-metrics
spec:
 ports:
 - name: metrics
   port: 24231
   protocol: TCP
 selector:
   role : unified-artifactory-ha-member

 

 

我们可以在Prometheus Target列表中进一步验证对度量标准接口服务的自动检测。这使得Prometheus的配置变得快速简便,特别是对于可能具有数百台服务器的大型系统而言。如下图

 

 

Grafana

现在Prometheus收集了指标,我们现在可以使用Prometheus的可视化层Grafana对其进行可视化。使用Prometheus的PromQL查询语言,我们可以为仪表板设置查询。例如,以下PromQL提供了请求次数最多的仓库。

topk10,(repo)的和(jfrog_rt_req {repo=“”}))

并可以为我们提供以下条形仪表小部件。

 

 

我们提供的FluentD配置包含了多个Artifactory和Xray监控指标,您可以查询和创建自己的仪表板小部件。一个很好的起点是使用我们的示例仪表板。此示例仪表板提供以下图形小部件,包含如下指标报表:

  1. 上传数据传输
  2. 下载数据传输
  3. 热门下载IP
  4. 热门上传IP
  5. 请求量最大的工件
  6. 请求最多的仓库
  7. 数据最多的仓库
  8. 审核用户
  9. Artifactory 5XX状态码
  10. Artifactory 错误
  11. Xray 5XX状态码
  12. Xray错误
  13. 拒绝登录
  14. 按IP拒绝操作
  15. 按用户拒绝的操作

 

如下面三个图例,展示了Grafana dashboard监控Artifactory 制品库应用内视。

 

  1. 按时间、按IP下载上传数据量趋势/GB(6小时内)

2. 按仓库,按用户下载文件次数(6小时内)

 

 

总结

在云原生环境以及DevOps背景下,我们不光要对基础资源(IAAS层),中间件(PAAS层)进行监控,同时更应该注意应用层监控,这样才能为开发提供更好的运维甚至是运营支撑。

今天和大家一起介绍了JFrog 内部对应用的监控方案以及案例

 

有关更多详细信息,请查看JFrog Log Analytics GitHub,您可以在其中找到更多配置选项和指标信息。

 

欢迎观看JFrog杰蛙每周二在线课堂,点击报名:

https://www.bagevent.com/event/6643470

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!