# Конфігурація

> Налаштування інструменту otelc та телеметрії, що продукується інструментованими застосунками.

---

LLMS index: [llms.txt](/llms.txt)

---

Конфігурація відбувається у двох точках: під час збірки, де ви контролюєте, як інструмент `otelc` інструментує ваш застосунок, та під час виконання, де стандартні змінні середовища OpenTelemetry контролюють телеметрію, яку продукує інструментований застосунок.

## Команда otelc {#the-otelc-command}

`otelc` обгортає інструментарій Go. Його підкоманди:

| Команда         | Призначення                                                                                               |
| --------------- | --------------------------------------------------------------------------------------------------------- |
| `otelc go …`    | Запустити команду `go` (наприклад, `go build`) з інструментуванням                                        |
| `otelc setup`   | Налаштувати середовище для інструментування                                                               |
| `otelc pin`     | Згенерувати або оновити `otel.instrumentation.go` для фіксації пакунків інструментування поточного модуля |
| `otelc cleanup` | Видалити всі артефакти, створені фазами налаштування та збірки                                            |
| `otelc version` | Вивести версію інструменту                                                                                |

Прапорці передаються перед підкомандою:

| Прапорець          | Змінна середовища | Призначення                                            |
| ------------------ | ----------------- | ------------------------------------------------------ |
| `--rules <file>`   |                   | Використовувати власний файл правил інструментування   |
| `--debug`, `-d`    | `OTELC_DEBUG=1`   | Увімкнути налагоджувальне логування для збірки         |
| `--work-dir`, `-w` | `OTELC_WORK_DIR`  | Тека для робочих файлів, що записуються під час збірки |

Наприклад, щоб зібрати з власним файлом правил та налагоджувальним виведенням:

```sh
otelc --rules my-rules.yaml --debug go build -o myapp .
```

## Змінні середовища під час виконання {#runtime-environment-variables}

Інструментовані застосунки поважають стандартні [змінні середовища SDK](/docs/languages/sdk-configuration/) OpenTelemetry для експортерів, ресурсів та ідентичності сервісу, наприклад:

- `OTEL_SERVICE_NAME`: імʼя сервісу, що передається з телеметрією
- `OTEL_EXPORTER_OTLP_ENDPOINT`: кінцева точка OTLP для експорту
- `OTEL_RESOURCE_ATTRIBUTES`: додаткові атрибути ресурсу

Крім того, наступні змінні контролюють, які впроваджені інструментування активні під час виконання:

| Змінна                              | Призначення                                                                                                                                   |
| ----------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| `OTEL_GO_ENABLED_INSTRUMENTATIONS`  | Розділений комами список інструментувань для ввімкнення, наприклад `nethttp,grpc`. Коли встановлено, активні лише зазначені інструментування. |
| `OTEL_GO_DISABLED_INSTRUMENTATIONS` | Розділений комами список інструментувань для вимкнення.                                                                                       |

## Власні правила інструментування {#custom-instrumentation-rules}

Який код інструментується визначається декларативними YAML правилами. Кожне правило називає цільовий пакунок, опціонально звужує відповідність за допомогою селекторів та оголошує, що впроваджувати. Наприклад, наступне правило викликає функції-гачки на вході та виході `(*sql.DB).Exec`:

```yaml
instrument_sql_exec:
  target: database/sql
  where:
    func: Exec
    recv: '*DB'
  do:
    - inject_hooks:
        before: BeforeExec
        after: AfterExec
        path: github.com/example/sqlinstr
```

Передайте власний файл правил для збірки за допомогою `--rules`. Правила також можуть постачатися всередині Go пакунків: пакунок оголошує інструментування файлом `otel.instrumentation.go` (або `otelc.tool.go`) та надає свої правила у файлах `otelc.yml` або `*.otelc.yml` поряд із кодом, а інструмент виявляє та завантажує їх, коли інструментує ваш застосунок. Правила підтримують кілька механізмів впровадження, окрім функціональних гачків, включаючи впровадження полів структур, обгортання місць викликів та додавання файлів. Для повної схеми та довідника типів правил дивіться [документацію правил інструментування](https://github.com/open-telemetry/opentelemetry-go-compile-instrumentation/blob/main/docs/rules.md) у репозиторії.
