PHPackages                             yangweijie/opentelemetry-auto-thinkphp - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. yangweijie/opentelemetry-auto-thinkphp

ActiveLibrary

yangweijie/opentelemetry-auto-thinkphp
======================================

OpenTelemetry auto-instrumentation for ThinkPHP

v0.9.0(1y ago)30Apache-2.0PHPPHP ^8.0

Since Sep 29Pushed 1y ago1 watchersCompare

[ Source](https://github.com/yangweijie/contrib-auto-thinkphp)[ Packagist](https://packagist.org/packages/yangweijie/opentelemetry-auto-thinkphp)[ Docs](https://opentelemetry.io/docs/php)[ RSS](/packages/yangweijie-opentelemetry-auto-thinkphp/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (1)Dependencies (15)Versions (2)Used By (0)

contrib-auto-thinkphp
=====================

[](#contrib-auto-thinkphp)

OpenTelemetry auto-instrumentation for ThinkPHP

OpenTelemetry ThinkPHP auto-instrumentation
===========================================

[](#opentelemetry-thinkphp-auto-instrumentation)

请阅读  来知晓如何安装扩展和配置 SDK。

概览
--

[](#概览)

Auto-instrumentation hooks 通过 composer 注册，并且 spans 会自动被创建。 当前版本不支持指标的自动上报。

要求
--

[](#要求)

- [opentelemetry extension](https://pecl.php.net/package/opentelemetry)

配置
--

[](#配置)

该扩展可以被禁用 [runtime configuration](https://opentelemetry.io/docs/instrumentation/php/sdk/#configuration):

```
OTEL_PHP_DISABLED_INSTRUMENTATIONS=thinkphp
```

### 环境变量

[](#环境变量)

[环境变量](https://opentelemetry.io/docs/specs/otel/configuration/sdk-environment-variables/)

### 如何启用

[](#如何启用)

首先，参考 [openobserver 快速开始](https://openobserve.ai/docs/quickstart/#__tabbed_1_1)在本地或者服务器上部署 一套openobserver 程序。

然后登录后台，在“采集”-&gt; “日志”-&gt; “自定义”-&gt; “OTLP Collector” 中复制 出 endpoint 和 Authorization

[![配置](images/config.png)](images/config.png)

在`composer.json`中配置 extra log 的driver 文件 用于临时修复TP var\_export 获得引用对象变量报错的bug。等官方修复了我再把这段检测去掉。

```
    "extra": {
        "include_files": [
            "vendor/yangweijie/opentelemetry-auto-thinkphp/src/polyfill/log/driver/File.php"
        ]
    },

```

#### 命令行

[](#命令行)

##### 官方的方式 执行命令前带上环境变量配置

[](#官方的方式-执行命令前带上环境变量配置)

参考 包根目录下的 `otlp.bat`（win）和 `otlp.sh` ，可以将其拷贝至项目根目录, 然后将配置里的endpoint 替换为复制出来的。

##### ThinkPHP的方式

[](#thinkphp的方式)

当然是在.env 里配置了。

```
OTEL_PHP_AUTOLOAD_ENABLED=true
OTEL_SERVICE_NAME=default

OTEL_TRACES_EXPORTER=otlp
OTEL_LOGS_EXPORTER=otlp
OTEL_METRICS_EXPORTER=none

OTEL_PHP_DETECTORS=env,os,process,host
OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf
OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:5080/api/default
OTEL_PROPAGATORS=baggage,tracecontext
OTEL_EXPORTER_OTLP_HEADERS="Authorization=Basic OTE3NjQ3Mjg4QHFxLmNvbTpPa3BYMlp1MVIzTVRnUFhO,stream-name=default"

```

记得和APP\_DEBUG 同级 不要放在 \[XXX\] 后面

然后正常 `php think help` 和 `php think run` 都行

#### web服务

[](#web服务)

##### think-server

[](#think-server)

跟上面说的一样:

- 在根目录下 `otlp.bat run` 或 `otlp.sh run`
- 或者 配了.env `php think run` 后浏览器直接 ip+端口或 nginx 配反向代理访问

##### nginx

[](#nginx)

官方的做法是在 修改php.ini，这样我觉的不妥，全部的应用都开启了（当然可以开启后，在单个项目的nginx config里配置 SERVER变量来关闭）。

我实践出来的最佳方法（nginx）：

```
fastcgi_param OTEL_PHP_DETECTORS env,os,process,host;
fastcgi_param OTEL_PHP_LOG_DESTINATION psr3;
# fastcgi_param OTEL_PHP_LOG_DESTINATION error_log;
fastcgi_param OTEL_PHP_AUTOLOAD_ENABLED true;
fastcgi_param OTEL_SERVICE_NAME default;
fastcgi_param OTEL_TRACES_EXPORTER otlp;
fastcgi_param OTEL_METRICS_EXPORTER none;
fastcgi_param OTEL_LOGS_EXPORTER otlp;
fastcgi_param OTEL_EXPORTER_OTLP_ENDPOINT http://localhost:5080/api/default;
fastcgi_param OTEL_EXPORTER_OTLP_HEADERS 'Authorization=Basic OTE3NjQ3Mjg4QHFxLmNvbTpPa3BYMlp1MVIzTVRnUFhO,stream-name=default';
```

将这段内容替换调ENDPOINT 和 HEADERS 后，放置在 nginx 的 `config/php` 目录下 然后，在 自己域名配置的php部分包含这个文件

```
location ~ [^/]\.php(/|$)
{
	fastcgi_pass 127.0.0.1:9013;
	fastcgi_index  index.php;
	include pathinfo.conf;
	include fastcgi.conf;
	include php/open_observe.conf;
}

```

试过直接放在server段 无效的。

所以如果结合php.ini 的修改，就是将通用的放在ini里。

在nginx配置里配一下 `fastcgi_param OTEL_PHP_DISABLED_INSTRUMENTATIONS thinkphp`禁用 和 header 来区分 上报的项目和用户

被扩展的上下文
-------

[](#被扩展的上下文)

`deployment.environment.name` 开发环境

通过 APP\_DEBUG 和 ENV\_NAME 非空(就是在入口.env.xxx 文件来作为环境变量文件) 来 判断 满足一个就是test 不满足 就是prod

Log
---

[](#log)

### 搜索

[](#搜索)

[参考1](https://openobserve.ai/docs/example-queries/) 、[参考2](https://geekdaxue.co/read/OpenObserve-doc/log-search)

#### 全列搜索 match\_all 大小不敏感

[](#全列搜索-match_all-大小不敏感)

```
match_all('error')

```

#### 全文索引搜索 大小写敏感

[](#全文索引搜索-大小写敏感)

```
match_all_raw('error')

```

#### 全文索引搜索 忽略大小写敏感

[](#全文索引搜索-忽略大小写敏感)

```
match_all_raw_ignore_case('error')

```

#### 指定列搜索 区分大小写， 如果是日志内容应该搜 body

[](#指定列搜索-区分大小写-如果是日志内容应该搜-body)

```
str_match(fieldname, 'error')

```

#### 指定列搜索 不区分大小写

[](#指定列搜索-不区分大小写)

```
str_match_ignore_case(fieldname, 'error')

```

#### 精确搜索某列值

[](#精确搜索某列值)

```
code=200

```

```
code='200'

```

#### 指定流 来源

[](#指定流-来源)

```
stream='stderr'

```

#### 使用查询函数（lua扩展的）

[](#使用查询函数lua扩展的)

```
extract_ip(log) | code=200

```

#### SQL 模式

[](#sql-模式)

```
SELECT * FROM "default" WHERE trace_id='7613688775511defb36d27f7869e612d'

```

[![效果图](images/log1.png)](images/log1.png)[![查询](images/log2.png)](images/log2.png)[![详情](images/log_detail.png)](images/log_detail.png)[![table详情](images/log_detail_table.png)](images/log_detail_table.png)

trace
-----

[](#trace)

> trace 主要是同一个请求内 不同span 的组合 同属于一个trace\_id。

> 每个span 会 记录耗时。

### span 主要构成

[](#span-主要构成)

#### Name

[](#name)

#### Parent span ID (empty for root spans)

[](#parent-span-id-empty-for-root-spans)

#### Start and End Timestamps

[](#start-and-end-timestamps)

#### Span Context 上下文

[](#span-context-上下文)

#### Attributes 属性

[](#attributes-属性)

#### Span Events 事件

[](#span-events-事件)

可以认为是 Span 的结构化日志 何时使用span event ， 当一个事件发生 无需记录开始和结束，反正用 Span。

#### Span Links

[](#span-links)

#### Span Status

[](#span-status)

#### SpanKind

[](#spankind)

`SpanKind`调用方向通信风格`CLIENT`发起request/response`SERVER`进入request/response`PRODUCER`发起deferred execution`CONSUMER`进入deferred execution`INTERNAL````
{
  "name": "/v1/sys/health",
  "context": {
    "trace_id": "7bba9f33312b3dbb8b2c2c62bb7abe2d",
    "span_id": "086e83747d0e381e"
  },
  "parent_id": "",
  "start_time": "2021-10-22 16:04:01.209458162 +0000 UTC",
  "end_time": "2021-10-22 16:04:01.209514132 +0000 UTC",
  "status_code": "STATUS_CODE_OK",
  "status_message": "",
  "attributes": {
    "net.transport": "IP.TCP",
    "net.peer.ip": "172.17.0.1",
    "net.peer.port": "51820",
    "net.host.ip": "10.177.2.152",
    "net.host.port": "26040",
    "http.method": "GET",
    "http.target": "/v1/sys/health",
    "http.server_name": "mortar-gateway",
    "http.route": "/v1/sys/health",
    "http.user_agent": "Consul Health Check",
    "http.scheme": "http",
    "http.host": "10.177.2.152:26040",
    "http.flavor": "1.1"
  },
  "events": [
    {
      "name": "",
      "message": "OK",
      "timestamp": "2021-10-22 16:04:01.209512872 +0000 UTC"
    }
  ]
}

```

### 效果图

[](#效果图)

[![trace](images/trace.png)](images/trace.png)[![trace 详情1](images/trace_detail.png)](images/trace_detail.png)[![trace 详情2](images/trace_detail2.png)](images/trace_detail2.png)

###  Health Score

22

—

LowBetter than 23% of packages

Maintenance38

Infrequent updates — may be unmaintained

Popularity4

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity33

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

587d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/c0b5f090a9bb92727e9c2e8281d05c2da5f2f9bf66cf1811714a9ffc0e383325?d=identicon)[yangweijie](/maintainers/yangweijie)

---

Top Contributors

[![yangweijie](https://avatars.githubusercontent.com/u/1614114?v=4)](https://github.com/yangweijie "yangweijie (22 commits)")

---

Tags

tracingopentelemetryotelinstrumentationopen-telemetrythinkphp

### Embed Badge

![Health badge](/badges/yangweijie-opentelemetry-auto-thinkphp/health.svg)

```
[![Health](https://phpackages.com/badges/yangweijie-opentelemetry-auto-thinkphp/health.svg)](https://phpackages.com/packages/yangweijie-opentelemetry-auto-thinkphp)
```

###  Alternatives

[open-telemetry/opentelemetry-auto-laravel

OpenTelemetry auto-instrumentation for Laravel

531.9M8](/packages/open-telemetry-opentelemetry-auto-laravel)[open-telemetry/opentelemetry-auto-symfony

OpenTelemetry auto-instrumentation for Symfony

551.2M1](/packages/open-telemetry-opentelemetry-auto-symfony)[open-telemetry/opentelemetry-auto-pdo

OpenTelemetry auto-instrumentation for PDO

111.2M1](/packages/open-telemetry-opentelemetry-auto-pdo)[open-telemetry/opentelemetry-auto-wordpress

OpenTelemetry auto-instrumentation for Wordpress

17166.0k](/packages/open-telemetry-opentelemetry-auto-wordpress)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
