在Docker中部署DataKit最佳实践
本文主要介绍如何在 Docker 中安装 DataKit。
配置和启动 DataKit 容器
登陆观测云平台,点击「集成」 -「DataKit」 - 「Docker」,然后拷贝第二步的启动命令,启动参数按实际情况配置。
拷贝启动命令:
sudo docker run \--hostname "$(hostname)" \--workdir /usr/local/datakit \-v "/etc/conf/dir/conf.d":"/usr/local/datakit/conf.d/host-inputs-conf"-v "/":"/rootfs" \-v /var/run/docker.sock:/var/run/docker.sock \-e ENV_DATAWAY="https://openway.guance.com?token=tkn_XXXX" \-e ENV_DEFAULT_ENABLED_INPUTS='cpu,disk,diskio,mem,swap,system,net,host_processes,hostobject,container,dk' \-e ENV_GLOBAL_HOST_TAGS="tag1=a1,tag2=a2" \-e ENV_HTTP_LISTEN="0.0.0.0:9529" \-e HOST_PROC="/rootfs/proc" \-e HOST_SYS="/rootfs/sys" \-e HOST_ETC="/rootfs/etc" \-e HOST_VAR="/rootfs/var" \-e HOST_RUN="/rootfs/run" \-e HOST_DEV="/rootfs/dev" \-e HOST_ROOT="/rootfs" \--cpus 2 \--memory 1g \--privileged \--publish 9529:9529 \--name datakit-docker \-d \pubrepo.guance.com/datakit/datakit:1.66.2
容器启动后,查看是否启动成功:
docker ps
如下所示,启动成功:
启动参数说明:
--hostname
:将宿主机的主机名作为 DataKit 运行的主机名,如果需要在当前宿主机上运行多个 DataKit,可以给它适当加一些后缀 --hostname "$(hostname)-dk1"--workdir
:设置容器工作目录-v
:各种宿主机文件挂载:- DataKit 中有很多配置文件,我们可以将其在宿主机上准备好,通过 -v 一次性整个挂载到容器中去(容器中的路径为 conf.d/host-inputs-conf 目录)
- 此处将宿主机根目录挂载进 Datakit,目的是访问宿主机上的各种信息(比如 /proc 目录下的各种文件),便于默认开启的采集器采集数据
- 将 docker.sock 文件挂载进 Datakit 容器,便于 container 采集器采集数据。不同宿主机该文件目录可能不同,需按照实际来配置
-e
:各种 Datakit 运行期的环境变量配置,这些环境变量功能跟 DaemonSet 部署 时是一样的ENV_DATAWAY
: 将 token 粘贴到 ENV_DATAWAY 环境变量值中 “token=”--publish
:便于外部将 Trace 等数据发送给 Datakit 容器,此处我们将 Datakit 的 HTTP 端口映射到外面的 9529 上,诸如 trace 数据设置发送地址的时候,需关注这个端口设置。--name
: 指定 Docker 容器名称,否则,name 将随机生成- 此处对该运行的 DataKit 设置了 2C 的 CPU 和 1GiB 内存限制
假如我们在 /host/conf/dir 目录下配置了如下一些采集器:
- APM:DDTrace/OpenTelemetry 等采集器
- Prometheuse exporter:在当前 docker 环境中,某些应用容器暴露了自身指标(一般形如 http://ip:9100/metrics),那么我们可以将其端口暴露出来,然后编写 prom.conf 来采集这些指标
- 日志采集:如果某些 Docker 容器将日志写入了宿主机的某个目录,我们可以单独编写日志采集配置来采集这些文件。不过事先我们需要通过 -v 将这些宿主机的目录挂载进 Datakit 容器。另外,默认开启的 container 采集器,会自动采集所有容器的 stdout 日志
登陆观测云平台,点击「基础设施」 - 「容器」,查看名称为 datakit-docker 容器是否上报,点击进入查看容器详情。
场景演示
如何使用 Docker 的 DataKit 采集用户应用访问数据。
开启 RUM 采集器
在挂载的目录 /etc/conf/dir/conf.d
下创建 rum 目录,然后在 rum 目录下,新建 rum.conf
文件,内容如下:
# {"version": "1.66.2", "desc": "do NOT edit this line"} [[inputs.rum]] ## profile Agent endpoints register by version respectively. ## Endpoints can be skipped listen by remove them from the list. ## Default value set as below. DO NOT MODIFY THESE ENDPOINTS if not necessary. endpoints = ["/v1/write/rum"] ## used to upload rum session replay. session_replay_endpoints = ["/v1/write/rum/replay"] ## specify which metrics should be captured. measurements = ["view", "resource", "action", "long_task", "error", "telemetry"] ## Android command-line-tools HOME android_cmdline_home = "/usr/local/datakit/data/rum/tools/cmdline-tools" ## proguard HOME proguard_home = "/usr/local/datakit/data/rum/tools/proguard" ## android-ndk HOME ndk_home = "/usr/local/datakit/data/rum/tools/android-ndk" ## atos or atosl bin path ## for macOS datakit use the built-in tool atos default ## for Linux there are several tools that can be used to instead of macOS atos partially, ## such as https://github.com/everettjf/atosl-rs atos_bin_path = "/usr/local/datakit/data/rum/tools/atosl" # Provide a list to resolve CDN of your static resource. # Below is the Datakit default built-in CDN list, you can uncomment that and change it to your cdn list, # it's a JSON array like: [{"domain": "CDN domain", "name": "CDN human readable name", "website": "CDN official website"},...], # domain field value can contains '*' as wildcard, for example: "kunlun*.com", # it will match "kunluna.com", "kunlunab.com" and "kunlunabc.com" but not "kunlunab.c.com". # cdn_map = ''' # [ # {"domain":"15cdn.com","name":"some-CDN-name","website":"https://www.15cdn.com"}, # {"domain":"tzcdn.cn","name":"some-CDN-name","website":"https://www.15cdn.com"} # ] # ''' ## Threads config controls how many goroutines an agent cloud start to handle HTTP request. ## buffer is the size of jobs' buffering of worker channel. ## threads is the total number fo goroutines at running time. # [inputs.rum.threads] # buffer = 100 # threads = 8 ## Storage config a local storage space in hard dirver to cache trace data. ## path is the local file path used to cache data. ## capacity is total space size(MB) used to store data. # [inputs.rum.storage] # path = "./rum_storage" # capacity = 5120 ## session_replay config is used to control Session Replay uploading behavior. ## cache_path set the disk directory where temporarily cache session replay data. ## cache_capacity_mb specify the max storage space (in MiB) that session replay cache can use. ## clear_cache_on_start set whether we should clear all previous session replay cache on restarting Datakit. ## upload_workers set the count of session replay uploading workers. ## send_timeout specify the http timeout when uploading session replay data to dataway. ## send_retry_count set the max retry count when sending every session replay request. ## filter_rules set the the filtering rules that matched session replay data will be dropped, ## all rules are of relationship OR, that is to day, the data match any one of them will be dropped. # [inputs.rum.session_replay] # cache_path = "/usr/local/datakit/cache/session_replay" # cache_capacity_mb = 20480 # clear_cache_on_start = false # upload_workers = 16 # send_timeout = "75s" # send_retry_count = 3 # filter_rules = [ # "{ service = 'xxx' or version IN [ 'v1', 'v2'] }", # "{ app_id = 'yyy' and env = 'production' }" # ]
然后重启 DataKit。
docker restart datakit-docker
docker ps
进入容器查看是否挂载成功,如下图所示已成功挂载。
docker exec -it datakit-docker /bin/bash
datakit monitor
应用接入
登录观测云控制台,进入「用户访问监测」,点击左上角「新建应用」,即可开始创建一个新的应用。
选择 Web 应用,并选择本地环境部署的 NPM 接入方式。
按需填入配置参数,点击创建,即可在应用列表查看应用。
然后,将 SDK 复制到前端项目中。
启动应用后,进行访问,相关数据会上报到观测云平台。
观测云效果
登录观测云控制台,点击「用户访问监测」 -「应用列表」,然后点击创建的应用。
点击查看器,就能查询采集到的用户访问数据。
相关文章:

在Docker中部署DataKit最佳实践
本文主要介绍如何在 Docker 中安装 DataKit。 配置和启动 DataKit 容器 登陆观测云平台,点击「集成」 -「DataKit」 - 「Docker」,然后拷贝第二步的启动命令,启动参数按实际情况配置。 拷贝启动命令: sudo docker run \--hostn…...

进程的状态 ─── linux第11课
目录 编辑 补充知识: 1.并行和并发 分时操作系统(Time-Sharing Systems) 实时操作系统(Real-Time Systems) 进程的状态(操作系统层面) 编辑 运行状态 阻塞状态 状态总结: 挂起状态 linux下的进程状态 补充知识: …...

MySQL数据库基本概念
目录 什么是数据库 从软件角度出发 从网络角度出发 MySQL数据库的client端和sever端进程 mysql的client端进程连接sever端进程 mysql配置文件 MySql存储引擎 MySQL的sql语句的分类 数据库 库的操作 创建数据库 不同校验规则对查询的数据的影响 不区分大小写 区…...
什么是 jQuery
一、jQuery 基础入门 (一)什么是 jQuery jQuery 本质上是一个快速、小巧且功能丰富的 JavaScript 库。它将 JavaScript 中常用的功能代码进行了封装,为开发者提供了一套简洁、高效的 API,涵盖了 HTML 文档遍历与操作、事件处理、…...

Redis Desktop Manager(Redis可视化工具)安装及使用详细教程
一、安装包下载 直接从官网下载,官网下载链接地址:Downloads - Redis 二、安装步骤 2.1说明 Redis Desktop Manager是一款简单快速、跨平台的Redis桌面管理工具,也也被称作Redis可视化工具。 支持命令控制台操作,以及常用&…...

[KEIL]单片机技巧 01
1、查看外设寄存器的值 配合对应的芯片开发手册以查看寄存器及其每一位的意义,可以解决90%以上的单纯的片内外设bug,学会如何通过寄存器的值来排外设上的蛊是嵌入式开发从小白到入门的重要一步,一定要善于使用这个工具,而不是外设…...
云原生监控篇——全链路可观测性与AIOps实战
引言:监控即生命线 2023年某全球支付平台因一次未被捕获的数据库连接泄漏,导致每小时损失120万美元。而另一家社交巨头通过实时异常检测系统,在30秒内自动隔离了大规模DDoS攻击。这两个案例揭示了云原生时代的核心生存法则——监控不是可选项…...
C# 13与.NET 9革新及工业开发应用
摘要 微软推出的C# 13与.NET 9以“高效且智能”为导向,具备扩展类型、半自动属性、锁对象优化等十大革新。本文深入剖析新特性于工业级开发的应用场景,包含性能优化策略、AI集成方案以及EF Core实战技巧,为开发者提供从理论到实践的完整指引…...

Linux系统之DHCP网络协议
目录 一、DHCP概述 二、DHCP部署实操 2.1、安装DHCP软件 2.2、拷贝配置文件 2.3、配置文件详解 2.4、重启软件服务 2.5、新开一台服务器,查看dhcp地址获取 一、DHCP概述 DHCP(Dynamic Host Configuration Protocol)是一种应用层网络协…...

【Linux】【网络】不同子网下的客户端和服务器通信其它方式
【Linux】【网络】不同子网下的客户端和服务器通信其它方式 那么,在 NAT 环境下,应该如何让内网设备做为服务器,使内网设备被外部连接? 1 多拨 部分运营商,支持在多个设备上,通过 PPPoE 登录同一个宽带账…...
【C++/数据结构】栈
零.导言 栈是一种数据结构,在后续的学习中可能经常使用,因此我们今天就来学习如何实现栈,以更好地使用它。 一.栈的实现 栈的形式如下: #include<iostream> #include<cassert>using namespace std;typedef int Stack…...

Qt 对象树详解:从原理到运用
1. 什么是对象树? 对象树是一种基于父子关系的对象管理机制。在 Qt 中,所有继承自 QObject 的类都可以参与到对象树中。 当一个对象被设置为另一个对象的父对象时,子对象会被添加到父对象的内部列表中,形成一种树状结构。 Qt 提…...
【软路由】ImmortalWrt 编译指南:从入门到精通
对于喜欢折腾路由器,追求极致性能和定制化的玩家来说,OpenWrt 无疑是一个理想的选择。而在众多 OpenWrt 衍生版本中,ImmortalWrt 以其更活跃的社区、更激进的特性更新和对新硬件的支持而备受关注。 本文将带你深入了解 ImmortalWrt࿰…...

【智能音频新风尚】智能音频眼镜+FPC,打造极致听觉享受!【新立电子】
智能音频眼镜,作为一款将时尚元素与前沿科技精妙融合的智能设备,这种将音频技术与眼镜形态完美结合的可穿戴设备,不仅解放了用户的双手,更为人们提供了一种全新的音频交互体验。新立电子FPC在智能音频眼镜中的应用,为音…...

第2章 windows故障排除(网络安全防御实战--蓝军武器库)
网络安全防御实战--蓝军武器库是2020年出版的,已经过去3年时间了,最近利用闲暇时间,抓紧吸收,总的来说,第2章开始带你入门了,这里给出了几个windows重要的工具,说实话,好多我也是第一…...

深度学习笔记——线性回归的从0开始实现
记录学习到的知识: 语义分割是将标签或类别与图片的每个像素关联的一种深度学习算法。 它用来识别构成可区分类别的像素集合。 图像分割是一个端到端图像分析过程,它将数字图像分成多个片段,并对每个区域中包含的信息进行分类。三种图像分割…...
配置Spring Boot中的Jackson序列化
配置Spring Boot中的Jackson序列化 在开发基于Spring Boot的应用程序时,Jackson是默认的JSON序列化和反序列化工具。它提供了强大的功能,可以灵活地处理JSON数据。然而,Jackson的默认行为可能无法完全满足我们的需求。例如,日期格…...
AWS跨账号服务全解析:安全共享资源的最佳实践
在复杂的云环境中,企业常常需要将不同业务部门、项目或环境分配到独立的AWS账户中,以实现资源隔离和权限管控。然而,跨账户的资源共享与协作需求也随之而来。AWS为此提供了丰富的跨账号服务,允许不同账户之间安全、高效地共享资源。本文将深入解析这些服务,并结合实际场景…...

Rust~String、str、str、String、Box<str> 或 Box<str>
Rust语言圣经中定义 str Rust 语言类型大致分为两种:基本类型和标准库类型,前者由语言特性直接提供,后者在标准库中定义 str 是唯一定义在 Rust 语言特性中的字符串,但也是几乎不会用到的字符串类型 str 字符串是 DST 动态大小…...

SpringBoot五:JSR303校验
精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 松散绑定 意思是比如在yaml中写的是last-name,这个和lastName意思是一样的,-后的字母默认是大写的 JSR303校验 就是可以在字段增加…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...

USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...
学习一下用鸿蒙DevEco Studio HarmonyOS5实现百度地图
在鸿蒙(HarmonyOS5)中集成百度地图,可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API,可以构建跨设备的定位、导航和地图展示功能。 1. 鸿蒙环境准备 开发工具:下载安装 De…...