当前位置: 首页 > news >正文

云南建站/seo全站优化全案例

云南建站,seo全站优化全案例,seo推广学院,简单网站建设运营作者:来自 Elastic Jack Shirazi•Sylvain Juge•Alexander Wert Elastic APM K8s Attacher 允许将 Elastic APM 应用程序代理(例如 Elastic APM Java 代理)自动安装到 Kubernetes 集群中运行的应用程序中。该机制使用变异 webhook&#xff0…

作者:来自 Elastic Jack Shirazi•Sylvain Juge•Alexander Wert

Elastic® APM K8s Attacher 允许将 Elastic APM 应用程序代理(例如 Elastic APM Java 代理)自动安装到 Kubernetes 集群中运行的应用程序中。该机制使用变异 webhook(mutating webhook),这是一个标准的 Kubernetes 组件,但你无需了解使用 Attacher 的所有详细信息。本质上,你可以安装 Attacher,向任何包含你想要监控的应用程序的 Kubernetes 部署添加一个注释(annotation),就这样!

在本博客中,我们将使用 Java 应用程序从头开始介绍一个完整的示例。除了 Java 代码和为应用程序使用 JVM 之外,对于 Attacher 支持的其他语言,其他一切都相同。

先决条件

本演练假设系统上已安装以下内容:JDK 17、Docker、Kubernetes 和 Helm。

示例应用程序

虽然该应用程序(如下所示)是 Java 应用程序,但它可以轻松地用任何语言实现,因为它只是一个简单的循环,每 2 秒调用一次方法链 methodA->methodB->methodC->methodD,其中 methodC 休眠 10 毫秒,methodD 休眠 200 毫秒。选择应用程序只是为了能够在 Elastic APM UI 中清楚地显示正在监视该应用程序。

完整的 Java 应用程序如下所示:

package test;public class Testing implements Runnable {public static void main(String[] args) {new Thread(new Testing()).start();}public void run(){while(true) {try {Thread.sleep(2000);} catch (InterruptedException e) {}methodA();}}public void methodA() {methodB();}public void methodB() {methodC();}public void methodC() {System.out.println("methodC executed");try {Thread.sleep(10);} catch (InterruptedException e) {}methodD();}public void methodD() {System.out.println("methodD executed");try {Thread.sleep(200);} catch (InterruptedException e) {}}
}

我们为你创建了一个包含该简单 Java 应用程序的 Docker 镜像,可从以下 Docker 存储库中提取:

docker.elastic.co/demos/apm/k8s-webhook-test

部署 pod

首先我们需要一个部署配置。我们将配置文件命名为 webhook-test.yaml,内容非常少 — 只需拉取镜像并将其作为默认命名空间中名为 webhook-test 的 pod 和容器运行即可:

apiVersion: v1
kind: Pod
metadata:name: webhook-testlabels:app: webhook-test
spec:containers:- image: docker.elastic.co/demos/apm/k8s-webhook-testimagePullPolicy: Alwaysname: webhook-test

这可以使用 kubectl 正常部署:

kubectl apply -f webhook-test.yaml

结果正如预期:

$ kubectl get pods
NAME           READY   STATUS    RESTARTS   AGE
webhook-test   1/1     Running   0          10s$ kubectl logs webhook-test
methodC executed
methodD executed
methodC executed
methodD executed

到目前为止,这只是设置了一个没有 APM 监控的标准 Kubernetes 应用程序。现在我们开始讨论有趣的部分:添加自动检测。

安装 Elastic APM K8s Attacher

第一步是安装 Elastic APM K8s Attacher。对于集群,这只需要执行一次 — 一旦安装,它就始终可用。在安装之前,我们将定义监视数据的去向。正如你稍后将看到的,我们可以随时决定或更改这一点。现在,我们将指定我们自己的 Elastic APM 服务器,该服务器位于 https://myserver.somecloud:443 — 我们还有一个用于授权该 Elastic APM 服务器的秘密令牌,其值为 MY_SECRET_TOKEN。(如果你想设置快速测试 Elastic APM 服务器,你可以在 https://cloud.elastic.co/ 上进行设置)。

为应用程序设置了两个额外的环境变量,这些变量通常不需要,但当我们在演练结束时看到生成的 UI 内容时会有所帮助(当代理自动安装时,这两个变量会告诉代理在 UI 中给这个应用程序起什么名字以及要跟踪什么方法)。现在我们只需要定义自定义 yaml 文件来保存这些内容。安装时,自定义 yaml 将合并到 Attacher 的 yaml 中:

apm:secret_token: MY_SECRET_TOKENnamespaces:- default
webhookConfig:agents:java:environment:ELASTIC_APM_SERVER_URL: "https://myserver.somecloud:443"ELASTIC_APM_TRACE_METHODS: "test.Testing#methodB"ELASTIC_APM_SERVICE_NAME: "webhook-test"

该 custom.yaml 文件就是我们安装附加器所需的全部内容(请注意,我们目前仅为代理自动安装指定了默认命名空间 - 这可以轻松更改,稍后你将看到)。接下来,我们将 Elastic 图表添加到 helm - 这只需执行一次,然后所有 Elastic 图表都可用于 helm。这是常用的 helm add repo 命令,具体来说:

helm repo add elastic https://helm.elastic.co

现在 Elastic 图表可供安装(helm search repo 将显示所有可用图表)。我们将使用 “elastic-webhook” 作为安装名称,从而产生以下安装命令:

helm install elastic-webhook elastic/apm-attacher --namespace=elastic-apm --create-namespace --values custom.yaml

就这样,我们现在安装了 Elastic APM K8s Attacher,并将其设置为将数据发送到 custom.yaml 文件中定义的 APM 服务器!(如果需要,你可以使用 helm list -A 确认安装。)

自动安装 Java 代理

Elastic APM K8s Attacher 已安装,但它不会将 APM 应用程序代理自动安装到每个 pod 中 — 这可能会导致问题!相反,Attacher 被故意限制为将代理自动安装到 a) 由 custom.yaml 中列出的命名空间定义的部署中,以及 b) 那些具有特定注释 “co.elastic.apm/attach” 的命名空间中的部署中。

因此,目前,重新启动我们上面创建的 webhook-test pod 不会对 pod 产生任何不同的影响,因为它尚未设置为受监控。我们需要做的是添加注释(annotation)。具体来说,我们需要使用与 Attacher 一起安装的默认代理配置为 Java 代理添加注释,该配置称为 “java”(我们稍后会看到该代理配置是如何更改的 — 默认配置会安装最新的代理版本,并将该版本的所有其他内容保留为默认设置)。因此,将该注释添加到 webhook-test yaml 中会为我们提供新的 yaml 文件内容(附加配置显示为标签 (1)):

apiVersion: v1
kind: Pod
metadata:name: webhook-testannotations: #(1)co.elastic.apm/attach: java #(1)labels:app: webhook-test
spec:containers:- image: docker.elastic.co/demos/apm/k8s-webhook-testimagePullPolicy: Alwaysname: webhook-test

应用此更改使我们现在可以监控应用程序:

$ kubectl delete -f webhook-test.yaml
pod "webhook-test" deleted
$ kubectl apply -f webhook-test.yaml
pod/webhook-test created
$ kubectl logs webhook-test
… StartupInfo - Starting Elastic APM 1.45.0 …

由于代理现在正在将数据提供给我们的 APM 服务器,我们现在可以在 UI 中看到它:

请注意,由于 custom.yaml 中的 ELASTIC_APM_TRACE_METHODS 环境变量设置为 test.Testing#methodB,因此代理将 Testing.methodB 方法标识为跟踪根 — 这会告诉代理专门跟踪该方法。该方法所花费的时间将在每次调用的 UI 中可用,但我们目前看不到子方法。在下一节中,我们将看到自定义 Attacher 是多么容易,并且在这样做时,我们将看到有关应用程序中正在执行的方法链的更多详细信息。

自定义代理

在你的系统中,你可能会有开发、测试和生产环境。你需要指定要使用的代理版本,而不仅仅是提取最新版本,你需要对某些应用程序或实例进行调试,并且你需要将特定选项设置为特定值。这听起来很费劲,但附加器可以让你以非常简单的方式启用这些类型的更改。在本节中,我们将添加一个指定所有这些更改的配置,我们可以看到配置和启用它是多么容易。

我们从上面定义的 custom.yaml 文件开始。这是合并到 Attacher 中的文件。添加一个包含上一段列出的所有项目的新配置很容易 —— 尽管首先我们需要为新配置确定一个名称。我们在这里将其称为 “java-interesting”。完整的新 custom.yaml 是(第一部分与之前相同,新配置只是附加的):

apm:secret_token: MY_SECRET_TOKENnamespaces:- default
webhookConfig:agents:java:environment:ELASTIC_APM_SERVER_URL: "https://myserver.somecloud:443"ELASTIC_APM_TRACE_METHODS: "test.Testing#methodB"ELASTIC_APM_SERVICE_NAME: "webhook-test"java-interesting:image: docker.elastic.co/observability/apm-agent-java:1.52.0artifact: "/usr/agent/elastic-apm-agent.jar"environment:ELASTIC_APM_SERVER_URL: "https://myserver.somecloud:443"ELASTIC_APM_TRACE_METHODS: "test.Testing#methodB"ELASTIC_APM_SERVICE_NAME: "webhook-test"ELASTIC_APM_ENVIRONMENT: "testing"ELASTIC_APM_LOG_LEVEL: "debug"ELASTIC_APM_PROFILING_INFERRED_SPANS_ENABLED: "true"JAVA_TOOL_OPTIONS: "-javaagent:/elastic/apm/agent/elastic-apm-agent.jar"

将附加配置分解,我们有:

  • 新配置的名称 java-interesting
  • APM Java 代理映像 docker.elastic.co/observability/apm-agent-java
    • 使用特定版本 1.43.0 而不是最新
  • 我们需要指定代理 jar 位置(附件将其放在此处)
    • artifact:“/usr/agent/elastic-apm-agent.jar”
  • 然后是环境变量
    • ELASTIC_APM_SERVER_URL 与之前一样
    • ELASTIC_APM_ENVIRONMENT 设置为 testing,在 UI 中查看时很有用
    • ELASTIC_APM_LOG_LEVEL 设置为 debug 以获得更详细的代理输出
    • ELASTIC_APM_PROFILING_INFERRED_SPANS_ENABLED 启用它(设置为 true)将为我们提供有关应用程序中正在执行的方法链的其他有趣信息
    • 最后,我们需要将 JAVA_TOOL_OPTIONS 设置为启用启动代理“-javaagent:/elastic/apm/agent/elastic-apm-agent.jar” —— 这基本上是 Attacher 自动附加 Java 代理的方式

Java 代理的更多配置和配置选项详细信息可在此处找到,其他语言代理也可用。

使用新配置跟踪的应用程序

最后,我们只需使用更改后的 custom.yaml 升级附加程序:

helm upgrade elastic-webhook elastic/apm-attacher --namespace=elastic-apm --create-namespace --values custom.yaml

这是与原始安装相同的命令,但现在使用升级。就是这样 — 将配置添加到 custom.yaml 并升级附件,就完成了!很简单。

当然,我们仍然需要在应用程序上使用新配置。在本例中,我们将编辑现有的 webhook-test.yaml 文件,将 java 替换为 java-interesting,因此注释行现在是:

co.elastic.apm/attach: java-interesting

应用新的 pod 配置并重新启动 pod,你可以看到日志现在包含调试输出:

$ kubectl delete -f webhook-test.yaml
pod "webhook-test" deleted
$ kubectl apply -f webhook-test.yaml
pod/webhook-test created
$ kubectl logs webhook-test
… StartupInfo - Starting Elastic APM 1.44.0 …
… DEBUG co.elastic.apm.agent. …
… DEBUG co.elastic.apm.agent. …

更有趣的是 UI。现在推断跨度(inferred spans)已打开,完整的方法链可见。

这给出了 methodB 的详细信息(它耗时 211 毫秒,因为它调用 methodC - 10 毫秒 - 而 methodC 又调用 methodD - 200 毫秒)。methodC 和 methodD 的时间是推断出来的,而不是记录出来的(推断出来的,而不是跟踪出来的 — 如果你需要准确的时间,你可以把这些方法添加到 trace_methods 中,然后对它们进行跟踪)。

关于 ECK operator 的说明

Elastic Cloud on Kubernetes operator 允许你在 Kubernetes 上安装和管理许多其他 Elastic 组件。在发布本博客时,Elastic APM K8s Attacher 是一个单独的组件,这些管理机制之间没有冲突 —— 它们适用于不同的组件并且彼此独立。

自己尝试一下!

此演练可轻松在你的系统上重复,你可以通过将示例应用程序替换为你自己的应用程序并将 Docker 注册表替换为你使用的注册表来使其更有用。

了解有关使用 Kubernetes 和 Elastic Observability 进行实时监控的更多信息。

本文中描述的任何特性或功能的发布和时间均由 Elastic 自行决定。任何当前不可用的特性或功能可能无法按时交付或根本无法交付。

原文:How to easily add application monitoring in Kubernetes pods — Elastic Observability Labs

相关文章:

Observability:如何在 Kubernetes pod 中轻松添加应用程序监控

作者:来自 Elastic Jack Shirazi•Sylvain Juge•Alexander Wert Elastic APM K8s Attacher 允许将 Elastic APM 应用程序代理(例如 Elastic APM Java 代理)自动安装到 Kubernetes 集群中运行的应用程序中。该机制使用变异 webhook&#xff0…...

关于Nginx前后端分离部署spring boot和vue工程以及反向代理的配置说明

最近项目中用到关于Nginx前后端分离部署spring boot和vue工程以及反向代理的配置,总结了一下说明: 1、后端是spring boot工程,端口8000,通过 jar命令启动 nohup java -jar xxx-jsonflow-biz.jar > /usr/local/nohup.out 2>…...

redis渐进式遍历

文章目录 一. 渐进式遍历介绍二. scan命令 一. 渐进式遍历介绍 keys * , 一次性把整个redis中所有的key都获取到, 这个操作比较危险, 可能会阻塞redis服务器 通过渐进式遍历, 就可以做到, 既能够获取到所有的key, 又不会卡死服务器 渐进式遍历, 不是一个命令把所有key都拿到,…...

【C++】数据类型与操作实践:详细解析与优化

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目一:三个数的倒序输出1.1 题目描述与代码实现代码实现: 1.2 代码解析与细节说明1.3 使用 int 类型的合理性分析1.4 其他数据类型的考虑1.5 代码优…...

C# 集合(Collection)

文章目录 前言一、动态数组(ArrayList)二、哈希表(Hashtable)三、排序列表(SortedList)四、堆栈(Stack)五、队列(Queue)六、点阵列(BitArray&…...

【智能控制】实验,基于MATLAB的模糊推理系统设计,模糊控制系统设计

关注作者了解更多 我的其他CSDN专栏 过程控制系统 工程测试技术 虚拟仪器技术 可编程控制器 工业现场总线 数字图像处理 智能控制 传感器技术 嵌入式系统 复变函数与积分变换 单片机原理 线性代数 大学物理 热工与工程流体力学 数字信号处理 光电融合集成电路…...

前端跳转路由的时候,清掉缓存

清除路由缓存的方法 ‌使用 $router.push() 方法‌:在跳转路由时,可以通过传递一个包含 replace: true 属性的对象来实现清除路由缓存。例如: this.$router.push({ path: "/new-route", replace: true }); ‌使用 $router.replace…...

基于 LlamaFactory 的 LoRA 微调模型支持 vllm 批量推理的实现

背景 LlamaFactory 的 LoRA 微调功能非常便捷,微调后的模型,没有直接支持 vllm 推理,故导致推理速度不够快。 LlamaFactory 目前支持通过 VLLM API 进行部署,调用 API 时的响应速度,仍然没有vllm批量推理的速度快。 …...

【赵渝强老师】PostgreSQL的物理存储结构

PostgreSQL在执行initdb的数据库集群初始化时会指定一个目录。该目录通过环境变量$PGDATA来表示。当数据库集群初始化完成后,会在这个目录生成相关的子目录以及一些文件。这些生成的文件就是PostgreSQL的物理存储结构中的文件。如下图所示。 如上图所示&#xff0c…...

智能探针技术:实现可视、可知、可诊的主动网络运维策略

网络维护的重要性 网络运维是确保网络系统稳定、高效、安全运行的关键活动。在当今这个高度依赖信息技术的时代,网络运维的重要性不仅体现在技术层面,更关乎到企业运营的方方面面。网络运维具有保障网络的稳定性、提升网络运维性能、降低企业运营成本等…...

CTF-PWN: 全保护下格式化字符串利用 [第一届“吾杯”网络安全技能大赛 如果能重来] 赛后学习(不会)

通过网盘分享的文件:如果能重来.zip 链接: https://pan.baidu.com/s/1XKIJx32nWVcSpKiWFQGpYA?pwd1111 提取码: 1111 --来自百度网盘超级会员v2的分享漏洞分析 格式化字符串漏洞,在printf(format); __int64 sub_13D7() {char format[56]; // [rsp10h] [rbp-40h]…...

debian 11 虚拟机环境搭建过坑记录

目录 安装过程系统配置修改 sudoers 文件网络配置换源安装桌面mount nfs 挂载安装复制功能tab 无法补全其他安装 软件配置eclipse 配置git 配置老虚拟机硬盘挂载 参考 原来去 debian 官网下载了一个最新的 debian 12,安装后出现包依赖问题,搞了半天&…...

MYSQL 什么是内连接 外连接 左连接 右连接?及适用场景

在 SQL 中,连接(JOIN)是用于组合来自两个或更多表的行的一种方法。根据连接的方式不同,可以分为几种类型的连接:内连接(INNER JOIN)、外连接(OUTER JOIN)、左连接&#x…...

利用Ubuntu批量下载modis图像(New)

由于最近modis原来批量下载的代码不再直接给出,因此,再次梳理如何利用Ubuntu下载modis数据。 之前的下载代码为十分长,现在只给出一部分,需要自己再补充另一部分。之前的为: 感谢郭师兄的指导(https://blo…...

【Springboot】@Autowired和@Resource的区别

【Springboot】Autowired和Resource的区别 【一】定义【1】Autowired【2】Resource 【二】区别【1】包含的属性不同【2】Autowired默认按byType自动装配,而Resource默认byName自动装配【3】注解应用的地方不同【4】出处不同【5】装配顺序不用(1&#xff…...

UIE与ERNIE-Layout:智能视频问答任务初探

内容来自百度飞桨ai社区UIE与ERNIE-Layout:智能视频问答任务初探: 如有侵权,请联系删除 1 环境准备 In [2] # 安装依赖库 !pip install paddlenlp --upgrade !pip install paddleocr --upgrade !pip install paddlespeech --upgrade In …...

数据结构:树

树的基本定义: 树是一种数据结构,它是由n(n>1)个有限节点组成一个具有层次关系的集合。把它叫做 “树” 是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点: …...

docker 怎么启动nginx

在Docker中启动Nginx容器是一个简单的过程。以下是启动Nginx容器的步骤: 拉取Nginx镜像: 首先,你需要从Docker Hub拉取Nginx的官方镜像。使用以下命令: docker pull nginx运行Nginx容器: 使用docker run命令来启动一个…...

【智商检测——DP】

题目 代码 #include <bits/stdc.h> using namespace std; const int N 1e510, M 110; int f[N][M]; int main() {int n, k;cin >> n >> k;for(int i 1; i < n; i){int x;cin >> x;f[i][0] __gcd(f[i-1][0], x);for(int j 1; j < min(i, k)…...

YOLOv11改进,YOLOv11添加SAConv可切换空洞卷积,二次创新C3k2结构

摘要 作者提出的技术结合了递归特征金字塔和可切换空洞卷积,通过强化多尺度特征学习和自适应的空洞卷积,显著提升了目标检测的效果。 理论介绍 空洞卷积(Atrous Convolution)是一种可以在卷积操作中插入“空洞”来扩大感受野的技术,更有效地捕捉到图像中的大范围上下文…...

使用R语言优雅的获取任意区域的POI,道路,河流等数据

POI是“Polnt of Information”的缩写&#xff0c;中文可以翻译为“信息点”。是地图上任何非地理意义的有意义的点&#xff0c;如商店&#xff0c;酒吧&#xff0c;加油站&#xff0c;医院&#xff0c;车站等。POI&#xff0c;道路网&#xff0c;河流等是我们日常研究中经常需…...

【设计模式】工厂方法模式 在java中的应用

文章目录 1. 引言工厂方法模式的定义 2. 工厂方法模式的核心概念工厂方法模式的目的和原理与其他创建型模式的比较&#xff08;如简单工厂和抽象工厂&#xff09; 3. Java中工厂方法模式的实现基本的工厂方法模式结构示例代码&#xff1a;创建不同类型的日志记录器 4. 工厂方法…...

Pytest框架学习20--conftest.py

conftest.py作用 正常情况下&#xff0c;如果多个py文件之间需要共享数据&#xff0c;如一个变量&#xff0c;或者调用一个方法 需要先在一个新文件中编写函数等&#xff0c;然后在使用的文件中导入&#xff0c;然后使用 pytest中定义个conftest.py来实现数据&#xff0c;参…...

【面试开放题】挫折、问题、擅长、应用技能

1. 项目中遇到的最大挫折是什么&#xff1f;你是如何应对的&#xff1f; 解答思路&#xff1a; 这个问题通常考察你的问题解决能力、抗压能力和团队协作精神。回答时&#xff0c;可以从以下几个角度展开&#xff1a; 问题背景&#xff1a; 描述项目中遇到的具体挑战。是技术难…...

CTF-PWN: 全保护下格式化字符串利用 [第一届“吾杯”网络安全技能大赛 如果能重来] 赛后学习(没思路了)

通过网盘分享的文件&#xff1a;如果能重来.zip 链接: https://pan.baidu.com/s/1XKIJx32nWVcSpKiWFQGpYA?pwd1111 提取码: 1111 --来自百度网盘超级会员v2的分享漏洞分析 格式化字符串漏洞,在printf(format); __int64 sub_13D7() {char format[56]; // [rsp10h] [rbp-40h]…...

C++学习日记---第16天

笔记复习 1.C对象模型 在C中&#xff0c;类内的成员变量和成员函数分开存储 我们知道&#xff0c;C中的成员变量和成员函数均可分为两种&#xff0c;一种是普通的&#xff0c;一种是静态的&#xff0c;对于静态成员变量和静态成员函数&#xff0c;我们知道他们不属于类的对象…...

SOA、分布式、微服务之间的关系和区别?

在当今的软件开发领域&#xff0c;SOA&#xff08;面向服务架构&#xff09;、分布式系统和微服务是三个重要的概念。它们各自有着独特的特性和应用场景&#xff0c;同时也存在着密切的关系。以下是关于这三者之间关系和区别的详细分析&#xff1a; 关系 分布式架构的范畴&…...

java基础概念46-数据结构1

一、引入 List集合的三种实现类使用了不同的数据结构&#xff01; 二、数据结构的定义 三、常见的数据结构 3-1、栈 特点&#xff1a;先进后出&#xff0c;后进先出。 java内存容器&#xff1a; 3-2、队列 特点&#xff1a;先进先出、后进后出。 栈VS队列-小结 3-3、数组 3-…...

Node.js-Mongodb数据库

MongoDB MongoDB是什么&#xff1f; MongoDB是一个基于分布式文件存储的数据库 数据库是什么&#xff1f; 数据库&#xff08;DataBase&#xff09;是按照数据结构来组织、存储和管理数据的应用程序&#xff08;软件&#xff09; 数据库作用&#xff1f; 对数据进行增、删…...

STM32 ADC --- 知识点总结

STM32 ADC — 知识点总结 文章目录 STM32 ADC --- 知识点总结cubeMX中配置注解单次转换模式、连续转换模式、扫描模式单通道采样的情况单次转换模式&#xff1a;连续转换模式&#xff1a; 多通道采样的情况禁止扫描模式&#xff08;单次转换模式或连续转换模式&#xff09;单次…...