Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
768fd8b
Add OpenTelemetry Support for Observability
outerlook Oct 2, 2023
6bef3aa
Add OpenTelemetry support and infrastucture for it
outerlook Oct 2, 2023
7d51ede
Enable declaration file generation in tsconfig
outerlook Oct 3, 2023
2b73171
Add telemetry metrics to broker service
outerlook Oct 3, 2023
2865a52
Enhance telemetry by observing Cassandra and tracking node actions
outerlook Oct 3, 2023
1024ea2
Add telemetry context and active span in logStore
outerlook Oct 3, 2023
e961209
Add OpenTelemetry for tracing broker request metrics
outerlook Oct 3, 2023
cc95f05
Added support for middlewares in BroadbandSubscriber and BroadbandPub…
outerlook Oct 3, 2023
d8e1ca8
Modify ReportPoller's config parameter and access modifier for KyvePool
outerlook Oct 3, 2023
946b3d0
Add OpenTelemetry support to test suite
outerlook Oct 3, 2023
a786309
Refactor client package.json to ensure correct defaults first
outerlook Oct 3, 2023
30cbc0e
Add new exports to resolve conflict
outerlook Oct 3, 2023
26ed6d8
Update prettier config and upgrade Typescript version
outerlook Oct 3, 2023
1546145
Create Observer package and configuration settings
outerlook Oct 3, 2023
66c2f66
Add Observer and associated handlers, configuration, metrics, plugins
outerlook Oct 3, 2023
24e8d86
Add observer package to Dockerfile and configure it
outerlook Oct 3, 2023
636c715
Add @opentelemetry/api to peerDependencies in protocol package.json
outerlook Oct 3, 2023
c58f308
Add observer config for dev-network and update .gitignore
outerlook Oct 3, 2023
bb6c40e
Change logLevel from 'trace' to 'debug' in observer.json
outerlook Oct 3, 2023
4650c94
Add Grafana, OpenTelemetry Collector to ports, new observer
outerlook Oct 3, 2023
d04d4be
Update config loading mechanism and development keys
outerlook Oct 3, 2023
9425aa1
Add README.md for Observer package
outerlook Oct 3, 2023
feb1302
revert accidental command change on dev-network connect.sh
outerlook Oct 3, 2023
183bd43
Merge branch 'develop' into feature/enhance-observability
outerlook Oct 3, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ yarn-error.log*
!.env.example
*.env
.env*
!dev-network/assets/**/.env.*

# Typescript
tsconfig.tsbuildinfo
Expand Down
6 changes: 5 additions & 1 deletion .prettierrc
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,11 @@
"options": {
"plugins": ["@trivago/prettier-plugin-sort-imports"],
"parser": "typescript",
"importOrder": ["<THIRD_PARTY_MODULES>", "^[./]"],
"importOrder": [
".*startOpenTelemetry*",
"<THIRD_PARTY_MODULES>",
"^[./]"
],
"importOrderParserPlugins": ["typescript", "decorators-legacy"],
"importOrderSeparation": true,
"trailingComma": "es5",
Expand Down
1 change: 1 addition & 0 deletions dev-network/Dockerfile.base
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ COPY --chown=node:node ./packages/broker/package.json ./packages/broker/
COPY --chown=node:node ./packages/validator/package.json ./packages/validator/
COPY --chown=node:node ./packages/heartbeat/package.json ./packages/heartbeat/
COPY --chown=node:node ./packages/benchmarks/package.json ./packages/benchmarks/
COPY --chown=node:node ./packages/observer/package.json ./packages/observer/

RUN pnpm install

Expand Down
8 changes: 8 additions & 0 deletions dev-network/Dockerfile.observer
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
FROM logstore-base

USER root

USER node
WORKDIR /home/node/logstore

CMD [ "start-in-docker" ]
2 changes: 2 additions & 0 deletions dev-network/assets/broker/.env.broker-1
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,7 @@ LOG_LEVEL=debug
# node-fetch tweak to call arweave.net with self-signed certificate
# https://stackoverflow.com/a/52479399
NODE_TLS_REJECT_UNAUTHORIZED=0
METRICS_URL=http://opentelemetry-collector:4317
TRACING_URL=http://opentelemetry-collector:4317

BROKER_METADATA='{ "http": "http://logstore-broker-1:7771" }'
2 changes: 2 additions & 0 deletions dev-network/assets/broker/.env.broker-2
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,7 @@ LOG_LEVEL=debug
# node-fetch tweak to call arweave.net with self-signed certificate
# https://stackoverflow.com/a/52479399
NODE_TLS_REJECT_UNAUTHORIZED=0
METRICS_URL=http://opentelemetry-collector:4317
TRACING_URL=http://opentelemetry-collector:4317

BROKER_METADATA='{ "http": "http://logstore-broker-2:7772" }'
2 changes: 2 additions & 0 deletions dev-network/assets/broker/.env.broker-3
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,7 @@ LOG_LEVEL=debug
# node-fetch tweak to call arweave.net with self-signed certificate
# https://stackoverflow.com/a/52479399
NODE_TLS_REJECT_UNAUTHORIZED=0
METRICS_URL=http://opentelemetry-collector:4317
TRACING_URL=http://opentelemetry-collector:4317

BROKER_METADATA='{ "http": "http://logstore-broker-3:7773" }'
7 changes: 7 additions & 0 deletions dev-network/assets/observer/.env.observer
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
LOG_LEVEL=debug

# node-fetch tweak to call arweave.net with self-signed certificate
# https://stackoverflow.com/a/52479399
NODE_TLS_REJECT_UNAUTHORIZED=0
METRICS_URL=http://opentelemetry-collector:4317
TRACING_URL=http://opentelemetry-collector:4317
56 changes: 56 additions & 0 deletions dev-network/assets/observer/observer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
{
"$schema": "https://schema.streamr.network/config-v2.schema.json",
"client": {
"logLevel": "debug",
"auth": {
"privateKey": "0x2222222222222222222222222222222222222222222222222222222222222222"
},
"network": {
"id": "0x1563915e194d8cfba1943570603f7606a3115508",
"trackers": {
"contractAddress": "0xBFCF120a8fD17670536f1B27D9737B775b2FD4CF"
},
"location": {
"latitude": 60.19,
"longitude": 24.95,
"country": "Finland",
"city": "Helsinki"
},
"webrtcDisallowPrivateAddresses": false
},
"contracts": {
"streamRegistryChainAddress": "0x6cCdd5d866ea766f6DF5965aA98DeCCD629ff222",
"streamStorageRegistryChainAddress": "0xd04af489677001444280366Dd0885B03dAaDe71D",
"storageNodeRegistryChainAddress": "0x231b810D98702782963472e1D60a25496999E75D",
"logStoreNodeManagerChainAddress": "0x85ac4C8E780eae81Dd538053D596E382495f7Db9",
"logStoreStoreManagerChainAddress": "0x8560200b8E7477FB09281A0566B50fa6E7a66a34",
"streamRegistryChainRPCs": {
"chainId": 8997,
"rpcs": [
{
"url": "http://10.200.10.1:8546"
}
]
},
"mainChainRPCs": {
"chainId": 8995,
"rpcs": [
{
"url": "http://10.200.10.1:8545"
}
]
},
"theGraphUrl": "http://10.200.10.1:8000/subgraphs/name/streamr-dev/network-contracts",
"logStoreTheGraphUrl": "http://10.200.10.1:8000/subgraphs/name/logstore-dev/network-contracts"
},
"metrics": false
},
"pool": {
"id": "0",
"url": "http://logstore-kyve:1317",
"pollInterval": 60000
},
"plugins": {
"observer": {}
}
}
3 changes: 3 additions & 0 deletions dev-network/assets/observer/start-in-docker.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/bin/bash

pnpm --filter @logsn/observer start:prod
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
receivers:
otlp:
protocols:
grpc:
endpoint: ":4317"

processors:
batch:

exporters:
prometheus:
endpoint: "0.0.0.0:8889"
otlphttp:
endpoint: http://tempo:4318

service:
pipelines:
metrics:
receivers: [ otlp ]
exporters: [ prometheus ]
traces:
receivers: [ otlp ]
exporters: [ otlphttp ]
5 changes: 5 additions & 0 deletions dev-network/assets/prometheus/prometheus.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
scrape_configs:
- job_name: 'otel-collector'
scrape_interval: 15s
static_configs:
- targets: ['opentelemetry-collector:8889']
34 changes: 34 additions & 0 deletions dev-network/assets/tempo/tempo.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
auth_enabled: false # Authentication. TODO

server:
http_listen_port: 3200 # Port for HTTP API

ingester:
lifecycler:
ring:
kvstore:
store: inmemory # In-memory ring store. For production, consider using etcd or Consul.
replication_factor: 1 # Number of the replicas for the ingested data.
final_sleep: 0s # Time to sleep between shutdown and exiting the ingester.

distributor:
receivers: # Supported protocols for tracing ingestion.
jaeger:
protocols:
grpc:
thrift_binary:
thrift_compact:
zipkin:
otlp:
protocols:
grpc:
http:

storage:
trace:
backend: local # local storage backend. For production, we might want to use cloud
wal:
path: /tmp/tempo/wal # Write-ahead log (WAL) directory path. Make sure to mount this directory in Docker.
local:
path: /tmp/tempo/traces # Traces storage directory path. Make sure to mount this directory in Docker.

2 changes: 2 additions & 0 deletions dev-network/bin/scripts/connect.sh
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,9 @@ $SSH \
-L 443:localhost:443 \
-L 1317:localhost:1317 \
-L 3000:localhost:3000 \
-L 3300:localhost:3300 \
-L 4001:localhost:4001 \
-L 4317:localhost:4317 \
-L 5432:localhost:5432 \
-L 7771:localhost:7771 \
-L 7772:localhost:7772 \
Expand Down
102 changes: 102 additions & 0 deletions dev-network/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -339,6 +339,105 @@ services:
logstore-deploy-contracts:
condition: service_completed_successfully

logstore-observer:
container_name: logstore-observer
hostname: logstore-observer
image: logstore-observer
build:
context: ../
dockerfile: ./dev-network/Dockerfile.observer
restart: always
networks:
- streamr-network
env_file:
- ./assets/observer/.env.observer
volumes:
- type: bind
source: ./assets/observer/start-in-docker.sh
target: /usr/local/bin/start-in-docker
- type: bind
source: ./assets/observer/observer.json
target: /home/node/.logstore/config/observer.json
depends_on:
logstore-base:
condition: service_completed_successfully
logstore-deploy-subgraph:
condition: service_completed_successfully
logstore-deploy-contracts:
condition: service_completed_successfully

logstore-grafana:
image: grafana/grafana:latest
container_name: logstore-grafana
hostname: logstore-grafana
restart: always
networks:
- streamr-network
ports:
- '3300:3000'
volumes:
- grafana-storage:/var/lib/grafana
depends_on:
- logstore-prometheus

opentelemetry-collector:
image: otel/opentelemetry-collector:0.85.0
container_name: opentelemetry-collector
hostname: opentelemetry-collector
restart: always
ports:
- '4317:4317'
networks:
- streamr-network
volumes:
- ./assets/opentelemetry-collector/otel-collector-config.yaml:/etc/otel-collector-config.yaml:ro
command: ['--config=/etc/otel-collector-config.yaml']

logstore-prometheus:
image: prom/prometheus:v2.47.0
container_name: logstore-prometheus
hostname: logstore-prometheus
restart: always
networks:
- streamr-network
command:
[
'--config.file=/etc/prometheus/prometheus.yml',
'--storage.tsdb.path=/prometheus',
'--web.enable-admin-api',
]
ports:
- '9090:9090'
volumes:
- ./assets/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
- type: volume
source: data-logstore-prometheus
target: /prometheus
volume:
nocopy: false
depends_on:
- opentelemetry-collector

tempo:
image: grafana/tempo:main-6c7e07d # Use the latest version
container_name: tempo
hostname: tempo
restart: always
networks:
- streamr-network
ports:
- '3200:3200' # Tempo's default port
command: ['-config.file=/etc/tempo/tempo.yaml']
volumes:
- ./assets/tempo/tempo.yaml:/etc/tempo/tempo.yaml:ro
- type: volume
source: data-tempo
target: /tmp/tempo
volume:
nocopy: false
depends_on:
- opentelemetry-collector

logstore-vector:
container_name: logstore-vector
hostname: logstore-vector
Expand All @@ -365,3 +464,6 @@ volumes:
data-heartbeat:
data-logstore-deploy-contracts:
data-logstore-deploy-subgraph:
data-logstore-prometheus:
grafana-storage:
data-tempo:
6 changes: 6 additions & 0 deletions dev-network/docs/observer.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# LogStore DevNetwork - Observer

| Properby | Value |
| ----------- | ------------------------------------------------------------------ |
| Address | `0x1563915e194d8cfba1943570603f7606a3115508` |
| Private Key | `2222222222222222222222222222222222222222222222222222222222222222` |
2 changes: 2 additions & 0 deletions dev-network/docs/ports.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,12 @@
| 443 | Streamr APP | streamr-dev-nginx | Streamr |
| 1317 | KYVE REST API | logstore-nginx | LogStore |
| 1984 | Arweave | logstore-arweave | LogStore |
| 3300 | Grafana | logstore-grafana | Logstore |
| 3306 | MySql | streamr-dev-mysql | Streamr |
| 3333 | | streamr-dev-platform | Streamr |
| 3334 | | streamr-dev-network-explorer | Streamr |
| 4001 | | streamr-dev-stream-metrics-index | Streamr |
| 4317 | OpenTelemetry Collector | opentelemetry-collector | LogStore |
| 5001 | | streamr-dev-ipfs | Streamr |
| 5432 | | streamr-dev-postgres | Streamr |
| 6379 | Redis | streamr-dev-redis | Streamr |
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,6 @@
"prettier-2": "npm:prettier@^2",
"prettier-plugin-solidity": "^1.1.3",
"turbo": "^1.8.3",
"typescript": "^4.9.5"
"typescript": "^5.2.2"
}
}
11 changes: 8 additions & 3 deletions packages/broker/jest.config.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
/** @type {import('ts-jest').JestConfigWithTsJest} */
// we must use require here because the OTelEnvironment needs some env vars
const { config } = require('dotenv');
config();

/** @type {import("ts-jest").JestConfigWithTsJest} */
module.exports = {
preset: 'ts-jest/presets/js-with-ts',
testEnvironment: 'node',
testEnvironment: './test/OTelEnvironment.ts',
clearMocks: true,
// can't use prettier 3 with jest
prettierPath: require.resolve('prettier-2'),
Expand All @@ -10,5 +14,6 @@ module.exports = {
tsconfig: 'tsconfig.jest.json',
},
},
setupFilesAfterEnv: ['jest-extended/all', 'dotenv/config'],
setupFiles: ['dotenv/config'],
setupFilesAfterEnv: ['jest-extended/all'],
};
11 changes: 11 additions & 0 deletions packages/broker/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,16 @@
"@streamr/network-tracker": "8.1",
"@streamr/protocol": "^8.1.0",
"@streamr/utils": "^8.1.0",
"@opentelemetry/api": "^1.6.0",
"@opentelemetry/context-async-hooks": "^1.17.0",
"@opentelemetry/auto-instrumentations-node": "^0.39.2",
"@opentelemetry/sdk-node": "^0.43.0",
"@opentelemetry/exporter-metrics-otlp-grpc": "^0.43.0",
"@opentelemetry/sdk-metrics": "^1.17.0",
"@opentelemetry/exporter-trace-otlp-grpc": "^0.43.0",
"@opentelemetry/instrumentation-http": "^0.43.0",
"@opentelemetry/semantic-conventions": "^1.17.0",
"@opentelemetry/resources": "^1.17.0",
"ajv": "8.8.2",
"ajv-formats": "^2.1.1",
"axios": "^1.4.0",
Expand Down Expand Up @@ -76,6 +86,7 @@
"@types/heap": "^0.2.31",
"@types/inquirer": "^8.1.3",
"@types/jest": "^29.5.0",
"jest-environment-node": "^29.6.2",
"@types/lodash": "^4.14.191",
"@types/merge2": "^1.4.0",
"@types/node-fetch": "^2.6.2",
Expand Down
Loading