OpenObserve
это Rust Разработана высокопроизводительная облачная платформа наблюдения с открытым исходным кодом (журналы, метрики, отслеживание) по сравнению с Elasticsearch это экономит ок. 140 Умножение на стоимость хранения, OpenObserve способен справиться PB данных уровня, если вы ищете наблюдаемый инструмент для ведения журналов, показателей и отслеживания, то OpenObserve Это очень стоит попробовать. OpenObserve Хотя в настоящее время в alpha стадии, но фактически подвергся обширным испытаниям.
Elasticsearch Это универсальная поисковая система, вы можете использовать приложение поиска или журнал поиска. OpenObserve создан специально для поиска по журналам, если вы ищете Elasticsearch легкие альтернативы, то вам следует взглянуть на ZincSearch, если вам просто нужна поисковая система по журналам, то OpenObserve Это очень хорошо по выбору.
OpenObserve не полагается на индексацию данных, он хранит неиндексированные данные в сжатом формате на локальном диске или в объектном хранилище в формате столбца паркета. Это приводит к значительному снижению вычислительных требований во время приема данных и очень высокой степени сжатия, что приводит к снижению затрат на хранение примерно в 140 раз. Отсутствие индексации данных означает, что поиск с полным сканированием может быть медленнее, чем Elasticsearch, но все равно должен быть быстрым благодаря различным другим методам, таким как секционирование и кэширование. Uber обнаружил, что 80% запросов в его производственной среде были агрегированными запросами, а столбчатое хранилище данных OpenObserve означает, что агрегированные запросы часто выполняются намного быстрее, чем Elasticsearch.
Ниже показано, что мы используем Fluentbit Преобразование реальных данных журнала из Kubernetes кластер отправлен в Elasticsearch и OpenObserve Это актуально только для хранения. ЭБС Стоимость рулона 8 центов/ГБ/месяц (GP3),s3 Стоимость 2.3 центов/ГБ/месяц。существовать Elasticsearch из Режим высокой доступности Вниз,Обычно есть 1 мастернода 2 копии. Нет необходимости копировать s3 для достижения постоянства/доступности данных, потому что AWS Сделаем ваш объект резервнымхранилищесуществовать Amazon S3 Не менее трех зон доступности в регионе. (AZ) из на нескольких устройствах.
OpenObserve VS Elasticsearch
В приведенном выше сценарии OpenObserve Имеет соотношение Elasticsearch Низкий 140 раз стоимость хранения из существенных преимуществ, и это даже не учитывает дополнительные неиспользованные EBS Емкость тома (которая необходима, чтобы не исчерпать дисковое пространство) и работа, необходимая для постоянного мониторинга использования диска, чтобы он не заполнялся.
узел без сохранения состояния Архитектурапозволять OpenObserve Масштабируйте горизонтально, не беспокоясь о дублировании или повреждении данных. и Elasticsearch Для сравнения, вы обычно обнаружите, что управление OpenObserve кластериз Рабочая нагрузка по эксплуатации и техническому обслуживаниюи Стоимость Низкийгораздо больше。
OpenObserve Встроенный графический интерфейс пользователя исключает необходимость Kibana и т. д. другие компоненты из потребностей, и потому что Rust из Преимущества, отличная производительность без необходимости сталкиваться JVM Проблемы, вызванные этим.
и Elasticsearch По сравнению с Elasticsearch Это универсальный поисковый движок, но также имеет функцию инструмента наблюдения. и OpenObserve Это инструмент наблюдения, созданный с нуля, с упором на обеспечение отличных характеристик наблюдения.
OpenObserve Его можно запустить на одном узле или в кластере, как Режим высокой доступностибегать。
Режим одного узла Есть несколько типов Архитектура,В основном хранилища данных разными способами,Основные из них следующие:
Модель салазок и локального диска
Если вам просто нужно использовать его ненадолго и протестировать,или Нет требований к высокой доступности,Вы можете использовать этомодель。Конечно, ты все еще можешьсуществовать Одна машина обрабатывает более 2 TB изданные. существования Мы тестировали, используя конфигурацию по умолчанию, Mac M2 Скорость обработки составляет ок. 31 МБ/секунда, т.е. обработка в минуту 1.8 ГБ,обработано в день 2.6 ТБ. Этот режим также работает OpenObserve изпо умолчаниюмодель。
Локальный режим саней
Sled иобъектхранилищемодель
Модель OpenObserve по умолчанию в основном такая же.,толькоданныежитьсуществовать Понятнообъектхранилищесередина,Это может лучше поддерживать высокую доступность,Потому что данные не будут потеряны.
Модель хранения объектов салазок
Etcd иобъектхранилищемодель
Шаблон заключается в использовании Etcd для хранения метаданных, а данные по-прежнему хранятся в объектном хранилище.
модель хранения объектов etcd
Режим высокой доступность не поддерживает локальное дисковое хранилище, в модели кластера OpenObserve Будет работать несколько узлов, каждый узел не имеет состояния, хранилище данных существует, хранилище объектов, элемент хранилищее существует. Etcd середина,Это может лучше поддерживать высокую доступность,Потому что данные не будут потеряны.
хранилище объектов etcd
В этом режиме OpenObserve В основном включают Router、Querier、Ingester и Compactor Четыре компонента, каждый из которых можно развернуть по горизонтали и т. д.; Используется для пользователей хранилища, функций, правил сигнализации, информации об узлах кластера и других элементов данных объектов хранилища (например; s3、minio、gcs и т. д.) хранение parquet
Индекс файла и списка файлов и все данные.
Router
Маршрутизатор передает запрос ingester или запросчик, который также доступен через браузер UI интерфейс.Router На самом деле это очень простой прокси-сервер, который используется для отправки соответствующих запросов и ответов между программами приема и программами запросов.Ingester
Используется для получения запросов на прием и преобразования данных в parquet
Тогда формат будет следующим: хранилищесуществовать хранилище объектов, существующие данные будут перенесены в хранилище объектов до того, как временное хранилище данных будет существовать. WAL
середина.Querier
Для запроса данных узел запроса полностью не имеет состояния.Compactor
Объединит маленькие файлы в большие файлы,делатьпоискболее эффективный。Compactor
Также полностью обрабатывает политики хранения данных. stream Удаление и обновление индекса списка файлов.OpenObserve Из Установить очень просто, достаточно скачать бинарный файл, он поддерживает Linux、Windows и MacOS, также поддерживается Docker Зеркало. Конечно, мы все еще ссылаемся на это здесь. Kubernetes В кластере для простоты мы напрямую используем значение по умолчанию Модель салазок и локального диска。
Сначала создайте пространство имен:
$ kubectl create ns openobserve
Затем создайте файл манифеста ресурса, как показано ниже:
# openobserve.yaml
apiVersion: v1
kind: Service
metadata:
name: openobserve
namespace: openobserve
spec:
clusterIP: None
selector:
app: openobserve
ports:
- name: http
port: 5080
targetPort: 5080
---
# create statefulset
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: openobserve
namespace: openobserve
labels:
app: openobserve
spec:
serviceName: openobserve
replicas: 1
selector:
matchLabels:
app: openobserve
template:
metadata:
labels:
app: openobserve
spec:
securityContext:
fsGroup: 2000
runAsUser: 10000
runAsGroup: 3000
runAsNonRoot: true
containers:
- name: openobserve
image: public.ecr.aws/zinclabs/openobserve:latest
env:
- name: ZO_ROOT_USER_EMAIL # Укажите почту администратора
value: root@example.com
- name: ZO_ROOT_USER_PASSWORD # Укажите пароль администратора
value: root321
- name: ZO_DATA_DIR
value: /data
imagePullPolicy: Always
resources:
limits:
cpu: 4096m
memory: 2048Mi
requests:
cpu: 256m
memory: 50Mi
ports:
- containerPort: 5080
name: http
volumeMounts:
- name: data
mountPath: /data
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes:
- ReadWriteOnce
storageClassName: cfsauto # Укажите доступный класс хранилища
resources:
requests:
storage: 10Gi
В приведенном выше списке ресурсов мы использовали StatefulSet создать OpenObserve, следует отметить, что необходимо настроить ZO_ROOT_USER_EMAIL
и ZO_ROOT_USER_PASSWORD
Две переменные среды используются для указания почту администратораипароль。Затемсуществовать PVC Укажите доступное из в шаблоне StorageClass, используемый для постоянного хранения данных.
Затем напрямую примените приведенный выше файл списка ресурсов:
$ kubectl apply -f openobserve.yaml
$ kubectl get pods -n openobserve
NAME READY STATUS RESTARTS AGE
openobserve-0 1/1 Running 0 2m31s
$ kubectl get svc -n openobserve
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
openobserve ClusterIP None <none> 5080/TCP 2m52s
Журнал OpenObserve, чтобы проверить успешность запуска:
$ kubectl logs -f openobserve-0 -n openobserve
[2023-08-04T10:18:06Z INFO openobserve] Starting OpenObserve v0.5.1
[2023-08-04T10:18:06Z INFO openobserve::service::db::user] get; org_id=Some("default") name="root@example.com"
[2023-08-04T10:18:06Z INFO tracing::span] set;
[2023-08-04T10:18:06Z INFO openobserve::service::db::user] Users Cached
# ......
[2023-08-04T10:18:06Z INFO openobserve::common::meta::telemetry] sending event OpenObserve - Starting server
[2023-08-04T10:18:07Z INFO actix_server::builder] starting 4 workers
[2023-08-04T10:18:07Z INFO actix_server::server] Tokio runtime found; starting in existing Tokio runtime
[2023-08-04T10:18:07Z INFO openobserve] starting HTTP server at: 0.0.0.0:5080, thread_id: 0
[2023-08-04T10:18:07Z INFO openobserve] starting HTTP server at: 0.0.0.0:5080, thread_id: 0
[2023-08-04T10:18:07Z INFO openobserve] starting HTTP server at: 0.0.0.0:5080, thread_id: 0
После запуска мы можем пройти kubectl port-forward
Команда будет OpenObserve из 5080 Сопоставьте порт с локальным, а затем получите к нему доступ в браузере. http://localhost:5080
можно увидеть OpenObserve из UI интерфейс.
$ kubectl port-forward svc/openobserve 5080:5080 -n openobserve
Forwarding from 127.0.0.1:5080 -> 5080
Forwarding from [::1]:5080 -> 5080
OpenObserve Login
Используйте адрес электронной почты и пароль администратора, указанные выше, для входа в систему, после чего вы увидите основной интерфейс OpenObserve:
OpenObserve Web
Поскольку данных еще нет, на странице нет контента. ingestion На странице представлено Logs、Metrics、Traces данныеиз Различные способы приема:
Ingestion
Здесь мы можем сначала использовать JSON API Давайте загрузим несколько примеров данных журнала, чтобы понять это. OpenObserve изделать Как использовать。Первыйделатьиспользовать Внизкоманда лица Вниз Скачать образец журналаданные:
$ curl -L https://zinc-public-data.s3.us-west-2.amazonaws.com/zinc-enl/sample-k8s-logs/k8slog_json.json.zip -o k8slog_json.json.zip
$ unzip k8slog_json.json.zip
Затем используйте следующую команду будет выборка данных журнала, импортированных в OpenObserve середина:
$ curl http://localhost:5080/api/default/default/_json -i -u "root@example.com:root321" -d "@k8slog_json.json"
HTTP/1.1 100 Continue
HTTP/1.1 200 OK
content-length: 71
vary: Origin, Access-Control-Request-Method, Access-Control-Request-Headers
content-type: application/json
date: Fri, 04 Aug 2023 10:46:46 GMT
{"code":200,"status":[{"name":"default","successful":3846,"failed":0}]}%
После успешного импорта квитанции можно обновить страницу. увидетьиметьданные Понятно:
OpenObserve Web
На странице существующего потока вы можете видеть, что мы импортировали изданную метаинформацию:
Транслировать
Затем вы можете переключиться на Logs
Посмотреть данные журнала можно на странице:
OpenObserve Logs
Теперь мы можем запросить журнал в соответствии с прямыми требованиями. Некоторые часто используемые синтаксисы запросов выглядят следующим образом:
error
из Полнотекстовый поиск, существование используется в редакторе запросов match_all('error')
error
из Без учета регистра из Полнотекстовый поиск, используйте match_all_ignore_case('error')
error
для поиска по столбцу используйте str_match(fieldname, 'error')
,Это лучше, чем match_all
Более эффективен, поскольку существует в одном поле поиска.code
Столбец значения 200, используйте code=200
stream
Столбец значениядля stderr
,делатьиспользоватьstream='stderr'
log
столбецпоискиделатьиспользовать查询функцияextract_ip
,делатьиспользовать extract_ip(log) | code=200
Разумеется, помимо логов OpenObserve Также поддерживает индикаторыиотслеживатьданные,Здесь больше нет демонстраций,Если вам интересно, вы можете попробовать сами.
Здесь мы просто кратко продемонстрируем OpenObserve метод использования изLog, мы можем использовать его позже Fluentbit、Vector Подобные инструменты будут Kubernetes Кластер из данных журнала отправляется на OpenObserve , так что следите за обновлениями!
Справочная документация: https://openobserve.ai/docs.