
可观测性数据可视化后端【免费下载链接】graphite-webA highly scalable real-time graphing system项目地址https://gitcode.com/gh_mirrors/gr/graphite-web点击查看免费下载Graphite 是一套企业级规模的实时图形化监控系统由 Graphite-WebDjango Web 应用、Carbon指标处理守护进程与 Whisper时序数据库库三大组件构成。本指南以 Graphite-Web 为核心系统讲解其架构分工、安装布局、数据摄入、Web 配置、Render URL API、函数体系、Dashboard 与标签支持帮助读者完整掌握这套监控系统从部署到画图的全链路能力。Graphite-Web 在 Graphite 系统中的角色定位Graphite 项目在仓库根目录 README.md 中明确将其划分为三个主要组件Graphite-Web—— 基于 Django 的 Web 应用负责按需渲染图形与展示 DashboardCarbon—— 指标处理守护进程负责接收、转发与聚合时序数据Whisper—— 时序数据库库负责持久化存储固定大小的时序数据文件设计上与 RRD 类似。三个组件各司其职Carbon 负责收数据Whisper 负责存数据Graphite-Web 负责画图与查询。数据一经送入 Carbon即可在 Web 应用中立即查询并绘制图形。从 docs/overview.rst 可以了解到项目的历史背景Graphite 最初由 Chris Davis 于 2006 年在 Orbitz 作为副项目设计2008 年以 Apache 2.0 许可开源随后在 Sears 等公司的电商监控系统中成为基础设施。它被定位为能在廉价硬件上良好运行的企业级监控工具。架构图Graphite 三大组件的协作关系在源码层面Graphite-Web 作为 Django 应用的主 URL 分发逻辑位于 webapp/graphite/urls.py它挂载了admin、render、composer、metrics、browser、account、dashboard、whitelist、version、events、tags、functions等子模块并支持通过URL_PREFIX部署在非根路径# webapp/graphite/urls.py节选 graphite_urls [ path(admin/, admin.site.urls), path(render, include(graphite.render.urls)), path(composer, include(graphite.composer.urls)), path(metrics, include(graphite.metrics.urls)), path(browser, include(graphite.browser.urls)), path(dashboard, include(graphite.dashboard.urls)), path(tags, include(graphite.tags.urls)), path(functions, include(graphite.functions.urls)), ... ]从 webapp/graphite/settings.py 可以看到当前仓库的 Web 应用版本为WEBAPP_VERSION 1.2.0-dev且该文件明确标注不要直接修改此文件请使用 local_settings.py 覆盖。安装方式与依赖要求根据 docs/install.rstGraphite 提供多种安装途径最快捷的是 Dockergraphite-statsd 镜像可一条命令拉起完整环境并映射常用端口docker run -d \ --name graphite \ --restartalways \ -p 80:80 \ -p 2003-2004:2003-2004 \ -p 2023-2024:2023-2024 \ -p 8125:8125/udp \ -p 8126:8126 \ graphiteapp/graphite-statsd若从源码安装基础依赖包括UNIX 类操作系统Python 3.8 或更高版本cairocffiCairo 图形库绑定负责图形渲染Django4.2django-tagging0.4.6注意不是django-taggitpytz、pyparsing2.3.0fontconfig及至少一个字体包一套 WSGI 服务器与 Web 服务器组合如 Apache mod_wsgi、gunicorn nginx、uWSGI nginx。可选依赖还包括渲染缓存需要 memcached 与 pymemcacheLDAP 认证需要 python-ldapAMQP 支持需要 txamqp0.8 版本RRD 支持需要 python-rrdtool此外还有 MySQL/PostgreSQL 等数据库驱动。仓库根目录提供了 check-dependencies.py 与 requirements.txt可在安装前检查依赖是否满足。渲染依赖 Cairo 与字体如果 Web 应用运行正常但所有图形都返回为损坏图片很可能就是系统中缺少可供 Cairo 使用的字体。默认安装布局Graphite 默认将整个安装放在独立目录/opt/graphite下bin/—— 可执行脚本conf/—— Carbon 与 Graphite-Web 的配置目录如carbon.conf、storage-schemas.conf、graphTemplates.conflib/—— Carbon 的PYTHONPATHstorage/—— 数据与日志目录包含log/Carbon 与 Web 应用日志、rrd/RRD 数据文件、whisper/Whisper 数据文件、ceres/Ceres 数据文件webapp/—— Graphite-Web 的PYTHONPATH其中graphite/目录存放local_settings.pycontent/目录存放静态内容。仓库中的 webapp/graphite/settings.py 正是基于此布局推导路径CONF_DIR默认为GRAPHITE_ROOT/confWHISPER_DIR默认为/opt/graphite/storage/whisperLOG_DIR默认为STORAGE_DIR/log/webapp等且所有路径均可通过local_settings.py覆盖。数据摄入向 Graphite 投喂时序数据Graphite 本身不负责采集数据数据由外部程序采集后发送给 Carbon。docs/feeding-carbon.rst 总结了三种主流发送方式Plaintext、Pickle 与 AMQP。Plaintext 协议最直接数据格式为metric path metric value metric timestamp默认发送到 2003 端口。Unix 下用nc即可PORT2003 SERVERgraphite.your.org echo local.random.diceroll 4 date %s | nc ${SERVER} ${PORT}如果 Carbon 监听的是 UDP 协议需要加-u参数部分nc实现需要-q0、-c或-N参数指示其发送完毕后关闭 socket。Pickle 协议批量高效Pickle 协议支持将一批指标打包发送默认端口 2004数据为[(path, (timestamp, value)), ...]列表需在其前附加 4 字节大端长度头payload pickle.dumps(listOfMetricTuples, protocol2) header struct.pack(!L, len(payload)) message header payload数据建模三步曲向 Graphite 送数据之前docs/feeding-carbon.rst 建议按三步规划规划命名层级如servers.HOSTNAME.METRIC。路径中用.分隔的每一段称为 path component易变的部分应尽量放在层级深处。也可以采用带标签的命名方式如disk.used;datacenterdc1;racka1;serverweb01。配置数据保留策略Whisper 是固定大小的数据库须提前通过/opt/graphite/conf/storage-schemas.conf决定存储精度与时长。Carbon 按顺序从上到下用正则匹配 metric 名称命中第一个匹配的 schema若无匹配则使用默认 schema2 小时分钟级数据。理解消息格式metric_path value timestamp\n。其中 timestamp 为 Unix 秒数若为-1则 Carbon 使用到达时间。Carbon 侧的完整配置体系包括storage-schemas.conf的多级保留策略、storage-aggregation.conf的下采样聚合方法、relay-rules.conf的转发规则、aggregation-rules.conf的入站聚合、rewrite-rules.conf的名称改写以及 whitelist/blacklist 过滤详见 docs/config-carbon.rst。Web 应用核心配置local_settings.pyGraphite-Web 遵循主 settings 局部覆盖的约定settings.py会导入local_settings.py后者存放运行时配置其模板为 webapp/graphite/local_settings.py.example。也可以通过环境变量GRAPHITE_SETTINGS_MODULE指定其他配置模块如多实例部署。加载逻辑位于 webapp/graphite/settings.py。docs/config-local-settings.rst 将配置分为几大类要点如下通用设置设置项默认值说明URL_PREFIX/部署到非根路径时设置SECRET_KEYUNSAFE_DEFAULT用于认证令牌、CSRF、Cookie 的哈希加盐负载均衡集群中各节点须保持一致ALLOWED_HOSTS*Django 允许访问的主机列表TIME_ZONEUTCsettings.py/America/Chicago文档图形时间偏移几小时时多半需要显式设置本地时区DATE_FORMAT%m/%d短日期格式DEBUGFalse开启 Django 详细错误页LOG_RENDERING_PERFORMANCEFalse生成rendering.log记录 render 调用耗时LOG_CACHE_PERFORMANCEFalse生成cache.log记录 carbon-cache 远程调用及 memcached 命中情况缓存设置MEMCACHE_HOSTS默认[]不启用。启用后缓存计算后的 target 与渲染图片集群中各 webapp 必须配置完全相同的值以免缓存失效。DEFAULT_CACHE_DURATION默认60秒。DEFAULT_CACHE_POLICY按查询时间范围分级设置缓存时长例如DEFAULT_CACHE_POLICY [(0, 60), # 默认缓存 60 秒 (7200, 120), # 2 小时查询缓存 2 分钟 (21600, 180)] # 6 小时查询缓存 3 分钟MEMCACHE_KEY_PREFIX默认graphite、MEMCACHE_OPTIONS默认{}。文件系统路径GRAPHITE_ROOT默认/opt/graphite、CONF_DIR、STORAGE_DIR、STATIC_ROOT、DASHBOARD_CONF、GRAPHTEMPLATES_CONF、WHISPER_DIR、CERES_DIR、RRD_DIR、LOG_DIR、INDEX_FILE等均可单独覆盖。静态文件目录需要先执行收集命令并交由 Web 服务器暴露PYTHONPATH$GRAPHITE_ROOT/webapp django-admin.py collectstatic --noinput --settingsgraphite.settings存储与超时STORAGE_FINDERS默认(graphite.finders.remote.RemoteFinder, graphite.finders.standard.StandardFinder)可替换为 Ceres 等其他存储后端。FETCH_TIMEOUT默认 6 秒、FIND_TIMEOUT默认 3 秒。TAGDB默认graphite.tags.localdatabase.LocalDatabaseTagDB也可切换为graphite.tags.redis.RedisTagDB含TAGDB_REDIS_HOST/PORT/DB/PASSWORD等参数。认证、Dashboard 授权与数据库LDAPUSE_LDAP_AUTH、LDAP_SERVER、LDAP_PORT、LDAP_URI、LDAP_SEARCH_BASE、LDAP_BASE_USER、LDAP_BASE_PASS、LDAP_USER_QUERY、LDAP_USER_DN_TEMPLATE等配合ldap.set_option可定制 TLS 选项Remote UserUSE_REMOTE_USER_AUTHENTICATION、REMOTE_USER_BACKEND、REMOTE_USER_MIDDLEWARE、LOGIN_URLDashboard 权限DASHBOARD_REQUIRE_AUTHENTICATION默认False、DASHBOARD_REQUIRE_EDIT_GROUP、DASHBOARD_REQUIRE_PERMISSIONS数据库Graphite 默认使用STORAGE_DIR/graphite.db的 SQLite 存储用户资料、Dashboard 与 Events多实例必须改用 PostgreSQL 或 MySQL并通过DATABASES字典配置。初始化 schema 需要执行PYTHONPATH$GRAPHITE_ROOT/webapp django-admin.py migrate --settingsgraphite.settings。集群配置多实例横向扩展CLUSTER_SERVERS远程 Graphite webapp 地址列表如[10.0.2.2:80, http://10.0.2.3:80?formatpicklelocal1]支持formatpickle/msgpack与local参数。USE_WORKER_POOL默认True与POOL_MAX_WORKERS默认10线程池并行化对多个集群服务器/存储 finder 的请求。REMOTE_RETRY_DELAY默认 60 秒、FIND_CACHE_DURATION默认 300 秒、MAX_FETCH_RETRIES默认 2、FIND_TOLERANCE。REMOTE_RENDERING默认False与RENDERING_HOSTS将渲染委托给远程节点。CARBONLINK_HOSTS默认[127.0.0.1:7002]让 Web 应用直接查询 carbon-cache 内存中尚未落盘的数据。Web 应用部署三种主流栈docs/config-webapp.rst 与 docs/admin-webapp.rst 给出了三种经过验证的部署组合。nginx gunicornGunicorn 监听本地 8080 端口nginx 反向代理。启动命令示例PYTHONPATH/opt/graphite/webapp gunicorn wsgi --workers4 --bind127.0.0.1:8080 --log-file/var/log/gunicorn.log --preload --pythonpath/opt/graphite/webapp/graphite nginx 站点配置要点upstream graphite指向127.0.0.1:8080location /static别名到/opt/graphite/webapp/contentlocation /通过try_files转发到graphite代理块并传递Host、X-Real-IP、X-Scheme等头。仓库的 examples/example-graphite-vhost.conf 提供了 Apache vhost 参考配置。Apache mod_wsgi创建/opt/graphite/conf/graphite.wsgi参考仓库中的 conf/graphite.wsgi.exampleimport sys sys.path.append(/opt/graphite/webapp) from graphite.wsgi import applicationApache 虚拟主机中使用WSGIDaemonProcess、WSGIProcessGroup、WSGIScriptAlias等指令并将/static/别名到/opt/graphite/webapp/content/。若启用了URL_PREFIX如/graphiteWSGIScriptAlias需写成WSGIScriptAlias /graphite /opt/graphite/conf/graphite.wsgi/graphite。nginx uWSGI/etc/uwsgi/apps-available/graphite.ini示例[uwsgi] processes 2 socket localhost:8080 gid www-data uid www-data virtualenv /opt/graphite chdir /opt/graphite/conf module wsgi:applicationnginx 侧location /使用include uwsgi_params; uwsgi_pass localhost:8080;。Render URL API按需生成图形与数据Graphite-Web 的核心能力通过/render端点暴露路由定义于 webapp/graphite/render/urls.py。访问http://GRAPHITE_HOST:GRAPHITE_PORT/render若返回一张 330x250 的 No Data 图片即说明 API 正常。请求参数以namevalue形式拼接docs/render_api.rst 对参数有完整说明。几个典型示例# 单服务器负载的大图 http://graphite/render?targetserver.web1.loadheight800width600 # 过去 12 小时所有 web 机器的平均负载 http://graphite/render?targetaverageSeries(server.web*.load)from-12hours # 过去一天的注册用户数JSON 原始数据 http://graphite/render?targetapp.numUsersformatjson # 每分钟新注册速率 http://graphite/render?targetsummarize(derivative(app.numUsers),1min)titleNew_Users_Per_Minute注意大部分函数与参数大小写敏感例如linewidth2会静默失败正确写法是lineWidth2。target 参数与通配符target指定一条或多条指标路径并可嵌套函数。路径支持三种通配符均只作用于单个路径段、不跨点*匹配零或多个字符如servers.ix*ehssvc*v.cpu.total.*[...]字符列表或范围如foo[a-z0-9]bar列表中的-置于开头或末尾以免被当作范围{foo,bar,...}值列表如servers.ix01ehssvc04v.cpu.total.{user,system,iowait}。函数可以嵌套也可以使用管道符串联管道结果作为下一函数的第一个参数以下四种写法等价targetmovingAverage(aliasByNode(company.server*.applicationInstance.requestsHandled,1),5min) targetaliasByNode(company.server*.applicationInstance.requestsHandled,1)|movingAverage(5min) targetcompany.server*.applicationInstance.requestsHandled|aliasByNode(1)|movingAverage(5min) targetmovingAverage(company.server*.applicationInstance.requestsHandled|aliasByNode(1),5min)target可重复出现以一次绘制多条相关指标。template函数则支持在路径中定义变量targettemplate(hosts.$hostname.cpu)template[hostname]worker1 targettemplate(hosts.$hostname.cpu, hostnameworker1) targettemplate(hosts.$1.cpu, worker1)template[1]worker*from / until 时间窗口from指定起点默认 24 小时前until指定终点默认当前时刻。相对时间用-加单位s秒、min分钟、h小时、d天、w周、mon30 天、y365 天。绝对时间支持HH:MM_YYYYMMDD、YYYYMMDD、MM/DD/YY及一切at(1)兼容格式。两者可混用from-8duntil-7d # 上周同一天 from04:00_20110501until16:00_20110501 from20091201until20091231 fromnoonyesterday frommonday数据输出格式formatformat控制返回内容支持png、raw、csv、json、svg、pdf、dygraph、rickshaw、pickle等。例如# raw 格式 entries,1311836008,1311836013,1|1.0,2.0,3.0,5.0,6.0 # csv 格式 entries,2011-07-28 01:53:28,1.0 # json 格式 [{target: entries, datapoints: [[1.0, 1311836008], [2.0, 1311836009], ...]}]svg输出会嵌入metadata脚本描述图形元数据dygraph/rickshaw输出专门适配对应前端图表库的数据结构。rawData与pickle参数自 0.9.x 起已废弃统一改用format。图形参数精选docs/render_api.rst 完整列出了几十个图形参数常见的关键参数包括width/height默认 330 / 250控制图片尺寸graphTypeline默认或pie饼图配合pieModeaverage/maximum/minimum、pieLabels、valueLabels使用lineModeslope默认、staircase、connectedlineWidth默认 1.2线条像素宽度areaModenone/first/all/stacked配合areaAlpha0.0–1.0默认 1.0控制区域填充bgcolor/fgcolor/majorGridLineColor/minorGridLineColor/colorList颜色类参数支持颜色名如black、blue、red、gold或#RRGGBB[AA]十六进制可带透明度hideLegend/hideAxes/hideXAxis/hideYAxis/hideGrid/graphOnly控制元素显隐fontName/fontSize/fontBold/fontItalic字体控制字体须已安装在服务器上title/vtitle/vtitleRight标题与 Y 轴标签yMin/yMax/yStep/yDivisors/yAxisSide/yUnitSystemY 轴范围、步长、单位压缩si/binary/sec/msec/nonelogBase对数刻度如 10 表示常用对数cacheTimeout/noCache渲染缓存控制需 memcacheddrawNullAsZero/noNullPoints空值处理maxDataPointsJSON 输出时限制每序列点数超出则整段聚合可用consolidateBy指定聚合函数minXStep默认 1渲染时点间最小像素步长低于此值触发渲染期合并设为 0 可关闭tz时区转换默认取local_settings.py中时区localOnly只返回本地 finder 可访问的指标不拉取远程集群uniqueLegend/hideNullFromLegend图例去重与空序列隐藏xFilesFactor查询期聚合默认值取自DEFAULT_XFILES_FACTOR默认 0。Render 的源码处理流程从 webapp/graphite/render/views.py 可以看出renderView的实际流程先解析参数失败抛出InputParameterError构造requestContext含时间窗口、targets、模板变量、时区、xFilesFactor 等随后根据noCache决定是否查询请求缓存hashRequest数据层则通过evaluateTarget求值——webapp/graphite/render/evaluator.py 中的evaluateTarget会先用prefetchData预取路径表达式再用 grammar 解析 target 字符串并递归求值TimeSeries列表未知函数会抛出InputParameterError。最终按format分发到 CSV/JSON/raw/pickle 等序列化渲染器或调用 Cairo 图形渲染缓存命中的响应直接返回未命中则写入 memcached 并打上cache_timeout头。函数体系与函数插件docs/functions.rst 说明函数用于转换、合并与计算序列数据可在 Composer 界面或通过 Render API 的target参数调用。完整的函数清单由 webapp/graphite/render/functions.py 提供可通过 HTTP 函数 API 查询curl -s http://graphite/functions?pretty1 # 全部函数 curl -s http://graphite/functions?pretty1grouped1 # 按分组列出 curl -s http://graphite/functions/absolute?pretty1 # 单个函数详情编写自定义函数插件函数插件是一个定义了一个或多个函数、并导出SeriesFunctions/PieFunctions字典的 Python 文件。加载逻辑位于 webapp/graphite/functions/init.py启动时会扫描graphite/functions/custom目录下所有.py文件并加载FUNCTION_PLUGINS设置中列出的模块每个函数必须带有.group与.params属性params由 webapp/graphite/functions/params.py 的Param对象描述含 name、paramtype、required、default、multiple、options、suggestions 等。示例from graphite.functions.params import Param, ParamTypes def toUpperCase(requestContext, seriesList): Custom function that changes series names to UPPERCASE for series in seriesList: series.name series.name.upper() return seriesList toUpperCase.group Custom toUpperCase.params [ Param(seriesList, ParamTypes.seriesList, requiredTrue), ] SeriesFunctions { upper: toUpperCase, }自定义插件文件可放在/opt/graphite/webapp/graphite/functions/custom目录自动加载或通过设置FUNCTION_PLUGINS [some.function_plugin]加载打包模块。ParamTypes支持seriesList、aggFunc、boolean、date、float、integer、interval、node、string、tag等多种参数类型。仓库的 webapp/tests/funcplugins/ 目录提供了插件加载的测试样例。Dashboard 界面docs/dashboard.rst 说明Dashboard 是同时展示多张图共享同一时间范围的工具访问http://my.graphite.host/dashboard或通过 Composer 顶部链接进入。核心操作包括添加图形在 completer 或浏览器树中选中指标即添加已存在的指标再次点击则移除合并指标将一张图拖到另一张上待出现 Drop to Merge 后放下即可合并多指标导入图形通过Graphs | New Graph | From URL或From Saved Graph导入保存Dashboard | Save保存修改Save As首次保存或另存新名权限受 config-local-settings.rst 中的DASHBOARD_REQUIRE_AUTHENTICATION等设置控制时间范围相对时间如 6 hours可设定 Until 回退或绝对时间mm/dd/yyyy 12/24 小时制刷新手动刷新或按下 Auto-Refresh 自动刷新默认 60 秒对应AUTO_REFRESH_INTERVAL设置。Dashboard 默认按 JSON 文本存储所有 UI 操作都可以通过 JSON 编辑方式等价完成便于批量重排。仓库根目录的 conf/dashboard.conf.example 与 conf/graphTemplates.conf.example 分别提供了 Dashboard 与图形模板的示例配置图形模板用于设定默认颜色与样式可通过 Render API 的template参数引用。标签支持Tagged Series从 1.1.x 系列起Graphite 支持用标签标识序列见 docs/tags.rst。向 Carbon 发送带标签指标时将标签附加在名称后my.series;tag1value1;tag2value2Carbon 会自动解码标签、归一化顺序并注册到标签数据库。查询时以seriesByTag函数为入口支持精确匹配、不等匹配与正则匹配seriesByTag(tag1value1) seriesByTag(name~cpu\..*, tag1!value1) seriesByTag(namedisk.used, server~web.*) | groupByTags(sumSeries, datacenter) seriesByTag(namedisk.used,datacenterdc1) | aliasByTags(server, name)标签表达式格式为tagspec、tag!spec、tag~value、tag!~spec正则条件默认从值开头锚定匹配。标签数据存储在独立的标签数据库TagDB中——默认使用 Graphite 的 SQLite/MySQL/PostgreSQL 数据库也可配置 Redisgraphite.tags.redis.RedisTagDB或自定义插件。需要留意更改指标携带的标签数量或标签值会在磁盘上新建数据库文件因此标签不应存放随指标生命周期变化的数据。测试与验证仓库在 webapp/tests/ 中提供了与上述主题对应的测试可作为理解与验证的补充材料如 test_render.py 验证 render 视图、test_finders.py 与 test_finders_remote.py 验证指标查找、test_functions.py 验证函数计算、test_tags.py 验证标签查询。结合 tox.ini 与 setup.cfg 可了解项目的测试与打包配置。许可协议Graphite-Web 采用 Apache License 2.0 授权具体条款见仓库根目录的 LICENSE。三大组件Graphite-Web、Carbon、Whisper均属 Graphite 项目生态通常一并部署使用。赞分享可观测性数据可视化后端【免费下载链接】graphite-webA highly scalable real-time graphing system项目地址https://gitcode.com/gh_mirrors/gr/graphite-web点击查看免费下载相关推荐Spacedrive 的 WASM 扩展系统基于 Wasmer 的沙箱插件架构与实战指南Spacedrive 的 WASM 扩展系统基于 Wasmer 的沙箱插件架构与实战指南 Spacedrive 是一款基于 Rust 构建的跨平台文件浏览器桌面应用移动开发后端存储数据同步Ride Sharing Service 低层设计LLD实战基于 Java 的可扩展打车系统架构指南Ride Sharing Service 低层设计LLD实战基于 Java 的可扩展打车系统架构指南 导读 本文以 solutions/java/src/示例工程Hermes 扩展体系深度指南基于 JSI 的运行时扩展架构、安装流程与扩展开发实战Hermes 扩展体系深度指南基于 JSI 的运行时扩展架构、安装流程与扩展开发实战 Hermes 的 Extensions 扩展体系是一套建立在 JSIJ语言运行时编译器移动开发上一篇嵌入式系统调试sanitizers与J-Link调试器的协同工作方案下一篇ArchiSteamFarm HTTP缓存策略性能优化与数据一致性创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考