Dataway¶
はじめに¶
DataWay は Guance のデータゲートウェイです。コレクターが Guance にデータを報告する際には、必ず DataWay ゲートウェイを経由します。
Dataway のインストール¶
- Dataway を作成
Guance 管理画面の「データゲートウェイ」ページで、「Dataway を作成」をクリックします。名前とバインドアドレスを入力した後、「作成」をクリックします。
作成が成功すると、自動的に新しい Dataway が作成され、Dataway のインストールスクリプトが生成されます。
Info
バインドアドレスは Dataway ゲートウェイアドレスです。http(s)://1.2.3.4:9528 のような完全な HTTP アドレス(プロトコル、ホストアドレス、ポートを含む)を入力する必要があります。ホストアドレスには通常、Dataway をデプロイするマシンの IP アドレスを使用できますが、ドメイン名を指定することもでき、その場合は DNS 解決が行われている必要があります。
注意:コレクターがこのアドレスにアクセスできることを確認してください。そうでないとデータ収集は成功しません。
- Dataway をインストール
DW_KODO=http://kodo_ip:port \
DW_TOKEN=<tkn_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX> \
DW_UUID=<YOUR_UUID> \
bash -c "$(curl https://static.guance.com/dataway/install.sh)"
ホストインストールは推奨されなくなりました。Kubernetes statefulset を使用して Dataway をインストールしてください。
インストールが完了すると、インストールディレクトリに dataway.yaml が生成されます。その内容の例を以下に示します。手動で変更し、サービスを再起動することで有効になります。
dataway.yaml(クリックして展開)
# ============= DATAWAY CONFIG =============
# Dataway UUID, we can get it on during create a new dataway
uuid:
# It's the workspace token, most of the time, it's
# system worker space's token.
token:
# secret_token used under sinker mode, and to check if incomming datakit
# requests are valid.
secret_token:
# If __internal__ token allowed? If ok, the data/request will direct to
# the workspace with the token above
enable_internal_token: false
# is empty token allowed? If ok, the data/request will direct to
# the workspace with the token above
enable_empty_token: false
# Is dataway cascaded? For cascaded Dataway, it's remote_host is
# another Dataway and not Kodo.
cascaded: false
# kodo(next dataway) related configures
remote_host:
http_timeout: 3s
http_max_idle_conn_perhost: 0 # default to CPU cores
http_max_conn_perhost: 0 # default no limit
kodo_queue:
enabled: true
workers: 256
queue_size: 1024
queue_max_bytes: 1073741824 # 1GB
enqueue_timeout: 100ms
insecure_skip_verify: false
http_client_trace: false
sni: ""
# dataway API configures
# IPv4 と IPv6 は独立したリスナーを使用し、OS の bindv6only 動作に依存しないようにする
bind: 0.0.0.0:9528
# IPv6 はデフォルトで無効。必要な場合は明示的に "[::]:9528" を設定
bind_ipv6: ""
# 信頼できるプロキシからのリクエストのみが転送ヘッダーを使用して IP ホワイトリストを判断する
# trusted_proxies:
# - 10.0.0.0/8
# - 2001:db8:ffff::/48
# disable 404 page
disable_404page: false
# dataway TLS file path
tls_crt:
tls_key:
# pprof はデフォルトで無効。ループバックアドレスのみ許可
pprof_bind: ""
api_limit_rate : 100000 # 100K
max_http_body_bytes : 67108864 # 64MB
copy_buffer_drop_size : 262144 # 256KB, if copy buffer memory larger than this, this memory released
reserved_pool_size: 4096 # reserved pool size for better GC
within_docker: false
log_level: info
log: log
gin_log: gin.log
ip_black_list:
ttl: "1m"
clean_interval: "1h"
cache_cfg:
# cache disk path
dir: "disk_cache"
# disable cache
disabled: false
clean_interval: "1s"
# in MB, max single data package size in disk cache, such as HTTP body
max_data_size: 100
# in MB, single disk-batch(single file) size
batch_size: 128
# in MB, max disk size allowed to cache data
max_disk_size: 65535
# expire duration, default 7 days
expire_duration: "168h"
prometheus:
listen: "localhost:9090"
url: "/metrics"
enable: true
#sinker:
# cache_options:
# prealloc: true
# reserved_capacity: 10000000 # max cached items
# buckets: 64
# ttl: 10m # clear unactive matches
# etcd:
# urls:
# - http://localhost:2379 # one or multiple etcd host
# dial_timeout: 30s
# key_space: "/dw_sinker" # subscribe to the etcd key
# username: "dataway"
# password: "<PASSWORD>"
# file:
# path: /path/to/sinker.json
Dataway pod の YAML は以下のとおりです。
dataway-statefulset.yaml(クリックして展開)
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
labels:
app: sts-utils-dataway
name: dataway
namespace: utils
spec:
replicas: 2
selector:
matchLabels:
app: sts-utils-dataway
serviceName: dataway
template:
metadata:
annotations:
datakit/logs: |
[
{
"disable": false,
"source": "dataway",
"service": "dataway",
"multiline_match": "^\\d{4}|^\\[GIN\\]"
}
]
datakit/prom.instances: |
[[inputs.prom]]
url = "http://$IP:9090/metrics"
source = "dataway"
measurement_name = "dw"
interval = "10s"
disable_instance_tag = true
[inputs.prom.tags]
service = "dataway"
instance = "$PODNAME" # we can set as "xxx-$PODNAME"
labels:
app: sts-utils-dataway
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- sts-utils-dataway
topologyKey: kubernetes.io/hostname
containers:
- env:
- name: DW_REMOTE_HOST
value: http://kodo.forethought-kodo:9527
- name: DW_BIND
value: 0.0.0.0:9528
# IPv6 を有効にする場合は、以下の 2 行のコメントを解除
# - name: DW_BIND_IPV6
# value: "[::]:9528"
- name: DW_UUID
value: agnt_xxxxxxxxxxxxxxxxxxxxxxxxxxxxx # Dataway UUID
- name: DW_TOKEN
value: tkn_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # Dataway token
- name: DW_PROM_LISTEN
value: 0.0.0.0:9090
- name: DW_LOG
value: stdout
- name: DW_LOG_LEVEL
value: info
- name: DW_GIN_LOG
value: stdout
- name: DW_DISKCACHE_DIR
value: cache
- name: DW_HTTP_TIMEOUT
value: '3s'
- name: DW_ENABLE_INTERNAL_TOKEN
value: 'false'
- name: DW_MAX_HTTP_BODY_BYTES
value: '67108864'
- name: DW_HTTP_CLIENT_TRACE
value: 'on'
- name: DW_RESERVED_POOL_SIZE
value: '0'
- name: DW_COPY_BUFFER_DROP_SIZE
value: '262144'
- name: DW_DISKCACHE_CAPACITY_MB
value: 102400
image: pubrepo.guance.com/dataflux/dataway:1.18.0
imagePullPolicy: IfNotPresent
name: dataway
ports:
- containerPort: 9528
name: 9528tcp01
protocol: TCP
resources:
limits:
cpu: '4'
memory: 4Gi
requests:
cpu: 100m
memory: 512Mi
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /usr/local/cloudcare/dataflux/dataway/cache
name: dataway-cache
dnsPolicy: ClusterFirst
imagePullSecrets: []
#nodeSelector:
# nodepool: dataway
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
#tolerations:
# - effect: NoSchedule
# key: nodepool
# operator: Equal
# value: dataway
updateStrategy:
rollingUpdate:
partition: 0
type: RollingUpdate
volumeClaimTemplates:
- apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: dataway-cache
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
storageClassName: xxxxxx # High-Performance Storage StorageClass
volumeMode: Filesystem
status:
phase: Pending
---
apiVersion: v1
kind: Service
metadata:
name: dataway
namespace: utils
spec:
ipFamilyPolicy: SingleStack # デュアルスタックモードの場合は PreferDualStack に変更
# ipFamilies:
# - IPv4
# - IPv6
ports:
- name: 9528tcp02
nodePort: 30928
port: 9528
protocol: TCP
targetPort: 9528
selector:
app: sts-utils-dataway
type: NodePort
デフォルトの例では IPv4 シングルスタックを使用しています。デュアルスタックを有効にする場合は、Kubernetes クラスターと CNI が IPv4/IPv6 デュアルスタックをサポートしていることを確認し、以下の両方を変更してください。
- Dataway コンテナの環境変数で
DW_BIND_IPV6のコメントを解除し、[::]:9528に設定します。これにより Dataway は IPv4 と IPv6 の両方をリッスンします。 - Service の
ipFamilyPolicyをSingleStackからPreferDualStackに変更し、ipFamiliesのIPv4、IPv6のコメントを解除します。
この 2 つは同時に有効にする必要があります。Service のみを変更し、DW_BIND_IPV6 を設定しない場合、Dataway は IPv6 リクエストを受信しません。
dataway-statefulset.yaml では、環境変数を使用して Dataway の設定を変更できます。詳しくはこちらを参照してください。
ConfigMap を使用して dataway.yaml を外部からマウントすることもできますが、その場合は必ず /usr/local/cloudcare/dataflux/dataway/dataway.yaml にマウントする必要があります。
コンテナインストールに必要な環境変数は Kubernetes と同じです。以下の Docker コマンドで DataWay コンテナを起動できます。
docker run -d \
--name <YOUR-DW-IN-DOCKER> \
-p 19528:9528 -p 19090:9090 \
--mount type=bind,source=<host/path/for/diskcache>,target=/usr/local/cloudcare/dataflux/dataway/cache \
--memory=2g --memory-reservation=256m \
--cpus="2" \
-e DW_UUID=<YOUR-AGNT_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX> \
-e DW_TOKEN=<YOUR-TKN_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX> \
-e DW_REMOTE_HOST=http://kodo.forethought-kodo:9527 \
-e DW_BIND=0.0.0.0:9528 \
-e DW_PROM_LISTEN=0.0.0.0:9090 \
-e DW_HTTP_CLIENT_TRACE=true \
-e DW_LOG_LEVEL=info \
-e DW_LOG=stdout \
-e DW_GIN_LOG=stdout \
-e DW_DISKCACHE_CAPACITY_MB=65536 \
pubrepo.guance.com/dataflux/dataway:1.18.0
注意事項
- Dataway は Linux システムでのみ動作します(現時点では Linux arm64/amd64 バイナリのみ公開)
- ホストインストールの場合、Dataway のインストールパスは
/usr/local/cloudcare/dataflux/datawayです - Kubernetes ではデフォルトで 4000m/4Gi のリソース制限が設定されています。実際の状況に応じて調整してください。最小要件は 100m/512Mi です
- Dataway インストールの確認
インストールが完了したら、しばらく待って「データゲートウェイ」ページを更新します。追加したデータゲートウェイの「バージョン情報」列にバージョン番号が表示されれば、この Dataway が Guance センターに正常に接続されたことを意味し、フロントエンドユーザーはそれを使用してデータを取り込むことができます。
Dataway が Guance センターに正常に接続された後、Guance コンソールにログインし、「インテグレーション」/「DataKit」ページで、すべての Dataway アドレスを確認できます。必要な Dataway ゲートウェイアドレスを選択し、DataKit インストールコマンドを取得してサーバー上で実行すると、データ収集を開始できます。
DataWay の管理¶
DataWay の削除¶
Guance 管理画面の「データゲートウェイ」ページで、削除する DataWay を選択し、「設定」をクリックします。表示された DataWay 編集ダイアログで、左下の「削除」ボタンをクリックします。
Warning
DataWay を削除した後、DataWay ゲートウェイをデプロイしたサーバーにログインして DataWay の実行を停止し、インストールディレクトリを削除して初めて DataWay が完全に削除されます。
DataWay のアップグレード¶
Guance 管理画面の「データゲートウェイ」ページで、DataWay にアップグレード可能なバージョンがある場合、バージョン情報にアップグレードのプロンプトが表示されます。
Dataway サービスの管理¶
ホストに Dataway をインストールする場合、以下のコマンドで Dataway サービスを管理できます。
Kubernetes の場合は、対応する Pod を再起動します。
環境変数¶
イメージ環境変数¶
Dataway を Kubernetes 環境で実行する場合、以下の環境変数がサポートされます。
既存の dataway.yaml との互換性
一部の古い Dataway は、ConfigMap を使用して設定を注入しています(コンテナ内のファイル名は通常 dataway.yaml です)。
Dataway イメージの起動時に、インストールディレクトリに ConfigMap からマウントされたファイルが存在する場合、以下の DW_* 環境変数は有効になりません。
既存の ConfigMap マウントを削除すると、これらの環境変数が有効になります。
環境変数が有効な場合、Dataway のインストールディレクトリに隠しファイル(ls -a で確認)の .dataway.yaml が作成されます。cat でこのファイルを確認すると、環境変数の有効状態を確認できます。
HTTP Server 設定¶
| Env | 説明 |
|---|---|
| DW_REMOTE_HOST type: string required: Y |
Kodo アドレス、または次の Dataway アドレス。形式は http://host:port |
| DW_WHITE_LIST type: string required: N |
Dataway クライアント IP ホワイトリスト。カンマ区切り |
| DW_TRUSTED_PROXIES type: string required: N |
信頼できるプロキシ IP/CIDR。カンマ区切り。信頼できるプロキシからのリクエストのみが X-Forwarded-For または X-Real-IP を使用してホワイトリストを判断します |
| DW_HTTP_TIMEOUT type: string required: N |
Dataway が Kodo または次の Dataway にリクエストを送信する際のタイムアウト。デフォルトは 3s |
| DW_HTTP_MAX_IDLE_CONN_PERHOST type: int required: N |
Dataway が Kodo にリクエストを送信する際の最大 idle 接続数 Version-1.6.2 デフォルト値は 1000 Version-1.11.2 |
| DW_HTTP_MAX_CONN_PERHOST type: int required: N |
Dataway が Kodo にリクエストを送信する際の最大接続数。デフォルトは無制限 Version-1.6.2 |
| DW_KODO_QUEUE_ENABLED type: boolean required: N |
書き込み/アップロード/OTLP HTTP リクエストを Kodo または次の Dataway に送信する前に、有界のディスパッチキューを使用するかどうか。デフォルトは true |
| DW_KODO_QUEUE_WORKERS type: int required: N |
Kodo ディスパッチキューのワーカー数。デフォルトは 256 |
| DW_KODO_QUEUE_SIZE type: int required: N |
Kodo ディスパッチキューで待機できる最大リクエスト数。デフォルトは 1024 |
| DW_KODO_QUEUE_MAX_BYTES type: int/string required: N |
Kodo キュー内でキューイング中、送信中、およびキューへの登録を待機しているリクエストのボディの合計バイト数の上限。1073741824、1GB、1024MB などの表記が可能。デフォルトは 1GB |
| DW_KODO_QUEUE_ENQUEUE_TIMEOUT type: string required: N |
リクエストが Kodo キューの空きを待機する最大時間。タイムアウト後、キャッシュ可能なリクエストは Dataway キャッシュに書き込まれます。キャッシュが利用できない場合は 503 を返します。デフォルトは 100ms |
| DW_TOKEN_NEGATIVE_CACHE_ENABLED type: boolean required: N |
無効なトークンのネガティブキャッシュを有効にするかどうか。キャッシュはトークン、書き込み API パス、main/headless モードで分離されます。デフォルトは true |
| DW_TOKEN_NEGATIVE_CACHE_TTL type: string required: N |
無効なトークンのネガティブキャッシュの有効期限。デフォルトは 5m |
| DW_TOKEN_NEGATIVE_CACHE_MAX_KEYS type: int required: N |
無効なトークンのネガティブキャッシュに保存されるスコープキーの最大数。デフォルトは 1000 |
| DW_BIND type: string required: N |
Dataway HTTP API IPv4 のバインドアドレス。デフォルトは 0.0.0.0:9528 |
| DW_BIND_IPV6 type: string required: N |
Dataway HTTP API IPv6 のバインドアドレス。デフォルトではリッスンしません。[::]:9528 に設定すると明示的に IPv6 リッスンを有効にします |
| DW_API_LIMIT type: int required: N |
Dataway API のレート制限。例えば 1000 に設定すると、各 API は 1 秒間に 1000 回までしかリクエストできません。デフォルトは 100K |
| DW_HEARTBEAT type: string required: N |
Dataway とセンターのハートビート間隔。デフォルトは 60s |
| DW_MAX_HTTP_BODY_BYTES type: int required: N |
Dataway API で許可される最大 HTTP Body(バイト単位)。デフォルトは 64MB |
| DW_TLS_INSECURE_SKIP_VERIFY type: boolean required: N |
HTTPS/TLS 証明書のエラーを無視 |
| DW_HTTP_CLIENT_TRACE type: boolean required: N |
Dataway 自身が HTTP クライアントとして、関連するメトリクス収集を有効にするかどうか。これらのメトリクスは最終的に Prometheus メトリクスとして出力されます |
| DW_ENABLE_TLS type: boolean required: N |
HTTPS を有効にする Version-1.4.1 |
| DW_TLS_CRT type: file-path required: N |
HTTPS/TLS crt ファイルのパス Version-1.4.0 |
| DW_TLS_KEY type: file-path required: N |
HTTPS/TLS key ファイルのパス Version-1.4.0 |
| DW_SNI type: string required: N |
現在の Dataway の SNI 情報を指定 Version-1.6.0 |
| DW_DISABLE_404PAGE type: boolean required: N |
404 ページを無効にする Version-1.6.1 |
| DW_HTTP_IP_BLACKLIST_TTL type: string required: N |
IP ブラックリストの有効期間を設定。デフォルトは 1m Version-1.11.0 |
| DW_HTTP_IP_BLACKLIST_CLEAN_INTERVAL type: string required: N |
IP ブラックリストのクリーンアップ間隔を設定。デフォルトは 1h Version-1.11.0 |
HTTP TLS 設定¶
有効期間が 1 年の TLS 証明書を生成するには、以下の OpenSSL コマンドを使用できます。
# 有効期間 1 年の TLS 証明書を生成
$ openssl req -new -newkey rsa:4096 -x509 -sha256 -days 365 -nodes -out tls.crt -keyout tls.key
...
このコマンドを実行すると、国、地域、都市、組織名、部署名、電子メールアドレスなど、いくつかの必要な情報の入力を求められます。これらの情報は証明書に含まれます。
情報の入力が完了すると、tls.crt(証明書ファイル)と tls.key(秘密鍵ファイル)の 2 つのファイルが生成されます。秘密鍵ファイルは適切に保管し、その安全性を確保してください。
アプリケーションがこれらの TLS 証明書を使用できるようにするには、これら 2 つのファイルの絶対パスをアプリケーションの環境変数に設定する必要があります。環境変数の設定例を以下に示します。
最初に
DW_ENABLE_TLSを有効にする必要があります。他の 2 つの ENV(DW_TLS_CRT/DW_TLS_KEY)はその後に有効になります。 Version-1.4.1
env:
- name: DW_ENABLE_TLS
value: "true"
- name: DW_TLS_CRT
value: "/path/to/your/tls.crt"
- name: DW_TLS_KEY
value: "/path/to/your/tls.key"
/path/to/your/tls.crt と /path/to/your/tls.key を、実際の tls.crt および tls.key ファイルのパスに置き換えてください。
設定後、以下のコマンドで TLS が有効かどうかをテストできます。
成功すると、It's working! という ASCII Art メッセージが表示されます。証明書が存在しない場合、Dataway のログに以下のようなエラーが表示されます。
この場合、Dataway は起動できず、上記の curl コマンドもエラーになります。
$ curl -vvv -k http://localhost:9528
curl: (7) Failed to connect to localhost port 9528 after 6 ms: Couldn't connect to server
ログ設定¶
| Env | 説明 |
|---|---|
| DW_LOG type: string required: N |
ログのパス。デフォルトは log。ログを標準出力に出力して収集しやすくするには、stdout を設定します |
| DW_LOG_LEVEL type: string required: N |
デフォルトは info。debug も選択可能 |
| DW_GIN_LOG type: string required: N |
デフォルトは gin.log。ここでも stdout を設定して収集しやすくできます |
| DW_LOG_PKG_ID type: bool required: N |
Version-1.12.0 ログにパッケージ ID を記録するかどうか。デフォルトは true |
Token/UUID 設定¶
| Env | 説明 |
|---|---|
| DW_UUID type: string required: Y |
Dataway UUID。新しい Dataway 作成時にシステムワークスペースで生成されます |
| DW_TOKEN type: string required: Y |
通常はシステムワークスペースのデータアップロードトークン |
| DW_SECRET_TOKEN type: string required: N |
Sinker 機能を有効にする場合に設定できます |
| DW_ENABLE_INTERNAL_TOKEN type: boolean required: N |
クライアントトークンとして __internal__ を許可する。この場合、デフォルトでシステムワークスペースのトークンが使用されます |
| DW_ENABLE_EMPTY_TOKEN type: boolean required: N |
トークンなしでのデータアップロードを許可する。この場合、デフォルトでシステムワークスペースのトークンが使用されます |
Sinker 設定¶
| Env | 説明 |
|---|---|
| DW_SECRET_TOKEN type: string required: N |
Sinker 機能を有効にする場合に設定できます |
| DW_CASCADED type: string required: N |
Dataway がカスケードかどうか |
| DW_SINKER_ETCD_URLS type: string required: N |
etcd アドレスリスト。カンマ区切り。例: http://1.2.3.4:2379,http://1.2.3.4:2380 |
| DW_SINKER_ETCD_DIAL_TIMEOUT type: string required: N |
etcd 接続タイムアウト。デフォルトは 30s |
| DW_SINKER_ETCD_KEY_SPACE type: string required: N |
Sinker 設定が保存されている etcd キー名(デフォルトは /dw_sinker) |
| DW_SINKER_ETCD_USERNAME type: string required: N |
etcd ユーザー名 |
| DW_SINKER_ETCD_PASSWORD type: string required: N |
etcd パスワード |
| DW_SINKER_FILE_PATH type: file-path required: N |
ローカルファイルで sinker ルール設定を指定 |
| DW_SINKER_CACHE_BUCKETS type: int required: N |
Version-1.12.0 Sinker キャッシュのバケット数を指定。デフォルトは 64 |
| DW_SINKER_CACHE_RESERVED_CAPACITY type: int required: N |
Version-1.12.0 Sinker キャッシュの最大要素数を指定。デフォルトは 100w(1<<20) |
| DW_SINKER_CACHE_TTL type: int required: N |
Version-1.12.0 Sinker キャッシュ要素の有効期限を指定。デフォルトは 10m(10 分) |
| DW_SINKER_CACHE_PREALLOC type: bool required: N |
Version-1.12.0 キャッシュメモリを事前割り当てするかどうか。デフォルトは false |
Warning
ローカルファイルと etcd の両方を指定した場合、ローカルファイルの Sinker ルールが優先されます。どちらも指定しない場合、sinker 機能は無効になります。
Prometheus メトリクス公開¶
| Env | 説明 |
|---|---|
| DW_PROM_URL type: string required: N |
Prometheus メトリクスの URL パス(デフォルトは /metrics) |
| DW_PROM_LISTEN type: string required: N |
Prometheus メトリクス公開アドレス(デフォルトは localhost:9090) |
| DW_PROM_DISABLED type: boolean required: N |
Prometheus メトリクス公開を無効にする |
| DW_PPROF_BIND type: string required: N |
pprof リスニングアドレス。デフォルトでは無効で、ループバックアドレスのみ受け入れます。例: localhost:6060 |
ディスクキャッシュ設定¶
| Env | 説明 |
|---|---|
| DW_DISKCACHE_DIR type: file-path required: N |
キャッシュディレクトリを設定。このディレクトリは通常、外部ストレージをマウントします |
| DW_DISKCACHE_DISABLE type: boolean required: N |
ディスクキャッシュを無効にする。キャッシュを無効にしない場合は、この環境変数を削除してください |
| DW_DISKCACHE_CLEAN_INTERVAL type: string required: N |
キャッシュクリーンアップ間隔。デフォルトは 1s |
| DW_DISKCACHE_EXPIRE_DURATION type: string required: N |
キャッシュの有効期限。デフォルトは 168h(7 日) |
| DW_DISKCACHE_CAPACITY_MB type: int required: N |
Version-1.6.0 使用可能なディスク容量を MB 単位で設定。デフォルトは 20GB |
| DW_DISKCACHE_BATCH_SIZE_MB type: int required: N |
Version-1.6.0 単一のディスクキャッシュファイルの最大サイズを MB 単位で設定。デフォルトは 64MB |
| DW_DISKCACHE_MAX_DATA_SIZE_MB type: int required: N |
Version-1.6.0 単一のキャッシュ内容(例: 単一の HTTP body)の最大サイズを MB 単位で設定。デフォルトは 64MB。このサイズを超えるデータパケットは破棄されます |
Tips
DW_DISKCACHE_DISABLE を設定すると、ディスクキャッシュが無効になります。
パフォーマンス関連設定¶
| Env | 説明 |
|---|---|
| DW_COPY_BUFFER_DROP_SIZE type: int required: N |
指定されたサイズ(バイト単位)を超える HTTP body バッファは即座にクリアされ、メモリ消費を抑えます。デフォルト値は 256KB |
Dataway API 一覧¶
診断およびローカル処理インターフェースを除き、転送系インターフェースは各々のトークン検証ルールに従ってリクエストを Kodo または次の Dataway に転送します。Langfuse 互換インターフェースの認証動作については後述します。
GET /v1/ping¶
- API 説明:Dataway の現在のバージョン番号とリリース日を取得します。また、クライアントリクエストの出口 IP も返します。
DataWay が 404 ページを無効にしている場合(
disable_404page)、このインターフェースは利用できません。
GET /v1/ntp¶
- API 説明:Dataway の現在の Unix タイムスタンプ(秒単位)を取得します。
POST /v1/write/:category¶
- API 説明:Datakit がアップロードする各種収集データを受信します。
POST /v1/aggregate¶
- API 説明:メトリクス集約データを受信します。集約機能の初期化が成功した場合にのみ登録されます。
- 詳細な動作モード、設定、リクエスト要件については、Dataway メトリクス集約 を参照してください。
POST /v1/tail_sampling、POST /v1/tail_sampling_v2 および POST /v1/tail_sampling_config¶
- API 説明:それぞれテールサンプリングデータパケットとテールサンプリング設定を受信します。テールサンプリング機能の初期化が成功した場合にのみ登録されます。
- 詳細な動作モード、設定、リクエスト要件については、Dataway テールサンプリング を参照してください。
POST /otel/v1/{traces,metrics,logs}¶
- API 説明:OpenTelemetry OTLP HTTP/protobuf データを受信し、そのまま Kodo の対応するパスに転送します。
- サポートされるパス:
POST /otel/v1/tracesPOST /otel/v1/metricsPOST /otel/v1/logs
-
リクエスト要件:
Content-Typeはapplication/x-protobufである必要があります。メディアタイプパラメータ(例:application/x-protobuf; charset=utf-8)の指定は許可されます。- ワークスペーストークンは、
tokenクエリパラメータ、X-Tokenヘッダー、またはAuthorization: Bearer <token>で渡すことができます。Bearer トークンは転送前にX-Tokenに変換されます。 - OpenTelemetry SDK/Agent の環境変数を使用する場合は、OTLP HTTP/protobuf を明示的に設定し、ベースの endpoint を Dataway の
/otelプレフィックスに設定することをお勧めします。OpenTelemetry はシグナルに応じて自動的に/v1/traces、/v1/metrics、/v1/logsを追加します。
export OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf export OTEL_EXPORTER_OTLP_LOGS_ENDPOINT=https://dataway.example.com/otel/v1/logs export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=https://dataway.example.com/otel/v1/traces export OTEL_EXPORTER_OTLP_METRICS_ENDPOINT=https://dataway.example.com/otel/v1/metrics export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer%20{token}"- 起動パラメータと環境変数の意味は同じです。Java Agent を例にとると、
-Dotel.exporter.otlp.protocol=http/protobuf、-Dotel.exporter.otlp.endpoint=https://dataway.example.com/otel、-Dotel.exporter.otlp.headers=Authorization=Bearer%20{token}を設定できます。Authorizationヘッダー内のスペースのエンコード互換性に問題がある場合は、代わりにOTEL_EXPORTER_OTLP_HEADERS="X-Token={token}"または対応する起動パラメータを使用することもできます。 - Dataway は OTLP body を解析したり書き換えたりしません。
/otel/v1/metricsは/v1/write/metricline protocol に変換されません。Kodo は DataKit のデフォルトの OTLP metrics ルールに従って解析します。measurement はotel_serviceで、メトリクスフィールド名は OTLP の元のメトリクス名(例:runtime.jvm.memoryはruntime_jvm_memoryに書き換えられません)を保持します。 - Kodo から返された元の OTLP レスポンスステータス、レスポンス body、および必要なレスポンスヘッダーは透過的に渡されます。転送に失敗し、ディスクキャッシュポリシーを満たす場合、リクエストは Dataway のディスクキャッシュリプレイチェーンに入ります。
GET /v1/datakit/pull¶
- API 説明:Datakit がセンター設定(ブラックリスト/Pipeline)をプルするリクエストを処理します。
POST /v1/datakit/usage_trace¶
- API 説明:Datakit 使用状況のトレースデータを受信します。
POST /v1/write/rum/replay¶
- API 説明:Datakit がアップロードする Session Replay データを受信します。
POST /v1/write/rum/replay_assets¶
- API 説明:Session Replay に関連するリソースのアップロードリクエストを受信します。
POST /v1/check/rum/replay_assets¶
- API 説明:Session Replay に関連するリソースが既に存在するかどうかを確認します。
POST /v1/upload/profiling¶
- API 説明:Datakit がアップロードする Profiling データを受信します。
POST /v1/input/firehose¶
- API 説明:Firehose 入力データを受信します。
POST /v1/election¶
- API 説明:Datakit の選挙リクエストを処理します。
POST /v1/election/heartbeat¶
- API 説明:Datakit の選挙ハートビートリクエストを処理します。
POST /v1/query/raw¶
DQL クエリリクエストを処理します。簡単な例を以下に示します。
POST /v1/query/raw?token=<workspace-token> HTTP/1.1
Content-Type: application/json
{
"token": "workspace-token",
"queries": [
{
"query": "M::cpu LIMIT 1"
}
],
"echo_explain": <true/false>
}
レスポンス例:
{
"content": [
{
"series": [
{
"name": "cpu",
"columns": [
"time",
"usage_iowait",
"usage_total",
"usage_user",
"usage_guest",
"usage_system",
"usage_steal",
"usage_guest_nice",
"usage_irq",
"load5s",
"usage_idle",
"usage_nice",
"usage_softirq",
"global_tag1",
"global_tag2",
"host",
"cpu"
],
"values": [
[
1709782208662,
0,
7.421875,
3.359375,
0,
4.0625,
0,
0,
0,
1,
92.578125,
0,
0,
null,
null,
"WIN-JCHUL92N9IP",
"cpu-total"
]
]
}
],
"points": null,
"cost": "24.558375ms",
"is_running": false,
"async_id": "",
"query_parse": {
"namespace": "metric",
"sources": {
"cpu": "exact"
},
"fields": {},
"funcs": {}
},
"index_name": "",
"index_store_type": "",
"query_type": "guancedb",
"complete": false,
"index_names": "",
"scan_completed": false,
"scan_index": "",
"next_cursor_time": -1,
"sample": 1,
"interval": 0,
"window": 0
}
]
}
レスポンス結果の説明:
- 実際のデータは内部の
seriesフィールドにあります。 nameはメジャーメント名を示します(ここでは CPU メトリクスをクエリしています。ログデータの場合はこのフィールドはありません)。columnsは返される結果の列名を示します。valuesはcolumnsに対応する列の結果です。
Info
- URL リクエストパラメータの token は、JSON body 内の token と異なっていても構いません。前者はクエリリクエストの正当性を検証するために使用され、後者は対象データが存在するワークスペースを特定するために使用されます。
queriesフィールドには複数のクエリを含めることができ、各クエリには追加のフィールドを指定できます。具体的なフィールドリストについては、こちら を参照してください。
POST /v1/workspace¶
- API 説明:Datakit 側から発行されるワークスペースクエリリクエストを処理します。
GET /v1/env_variable¶
- API 説明:ワークスペースの環境変数を取得します。
POST /v1/dataway/heartbeat¶
- API 説明:Dataway ハートビートの報告リクエストを受信します。
POST /v1/object/labels¶
- API 説明:オブジェクトラベルの変更リクエストを処理します。
DELETE /v1/object/labels¶
- API 説明:オブジェクトラベルの削除リクエストを処理します。
GET /v1/check/token/:token¶
- API 説明:トークンが有効かどうかを確認します。
Langfuse 互換インターフェース¶
以下のインターフェースは Langfuse クライアントとの互換性のために使用されます。リクエストは直接上流に転送され、Dataway はトークン検証を行いません。
POST /api/public/otel/v1/traces:Langfuse OTLP Trace データを受信します。GET /api/public/projects:Langfuse プロジェクト情報を取得します。POST /api/public/ingestion:Langfuse ingestion データを受信します。
Dataway メトリクス収集¶
HTTP クライアントメトリクス収集
Dataway が HTTP リクエストを Kodo(または次の Dataway)に送信する際のメトリクスを収集するには、手動で http_client_trace 設定を有効にするか、環境変数 DW_HTTP_CLIENT_TRACE=true を指定する必要があります。
Dataway 自身は Prometheus メトリクスを公開しています。Datakit に組み込まれている prom コレクターを使用してそのメトリクスを収集できます。コレクターの設定例は以下のとおりです。
クラスター内に Datakit がデプロイされている場合(Datakit 1.14.2 以降が必要)、Dataway で Prometheus メトリクス公開を有効にできます(Dataway のデフォルト POD YAML には既に含まれています)。
annotations: # 以下の annotation はデフォルトで追加されています
datakit/prom.instances: |
[[inputs.prom]]
url = "http://$IP:9090/metrics" # ここでのポート(デフォルト 9090)は状況に応じて変更してください
source = "dataway"
measurement_name = "dw" # このメジャーメントに固定
interval = "10s"
disable_instance_tag = true
[inputs.prom.tags]
service = "dataway"
instance = "$PODNAME"
...
env:
- name: DW_PROM_LISTEN
value: "0.0.0.0:9090" # ここでのポートは上記の url 内のポートと一致させてください
収集に成功すると、Guance の「シナリオ」/「組み込みビュー」で dataway を検索すると、対応するモニタリングビューが表示されます。
キャッシュと Kodo キューのトラブルシューティング¶
Kodo が 5xx を返す、Dataway が Kodo へのリクエストに失敗する、または Kodo ディスパッチキューが満杯になると、Dataway はキャッシュ可能なリクエストをディスクキャッシュに書き込もうとします。Kodo の 4xx はキャッシュされません。
トラブルシューティング時には、まず以下のメトリクスを確認することをお勧めします。
dataway_http_api_cached_bytes{reason=...}:リクエストがキャッシュに書き込まれました。一般的なreasonには、Kodo 5xx ステータステキスト、httpCliDoFailed、kodoQueueFullなどがあります。dataway_http_api_dropped_cache{reason=...}:リクエストはキャッシュを試みましたが、書き込まれませんでした。一般的なreasonには、feat-disabled、expected-api-drop、body-md5-not-matched、body-length-not-matched、expired、put-failed、sendopt-nilなどがあります。dataway_kodo_queue_full_total{action=...}:Kodo キューが満杯になった後の処理結果。action="cache"はキャッシュに移行されたことを示し、action="reject"はキャッシュが利用できないか、書き込みに失敗した後に503を返したことを示します。
Dataway メトリクス一覧¶
以下は Dataway が公開するメトリクスです。http://localhost:9090/metrics にリクエストを送信することで取得できます。以下のコマンドを使用して、特定のメトリクスをリアルタイム(3 秒間隔)で確認できます。
特定のメトリクスが見つからない場合、関連するビジネスモジュールがまだ実行されていない可能性があります。新しいメトリクスは最新バージョンにのみ存在する場合があります。各メトリクスのバージョン情報はここでは明示しません。
/metricsインターフェースが返すメトリクスリストを参照してください。
| TYPE | NAME | LABELS | HELP |
|---|---|---|---|
| SUMMARY | dataway_kodo_queue_wait_seconds |
api,method |
Kodo queue wait duration before worker dispatch |
| SUMMARY | dataway_http_api_elapsed_seconds |
api,method,sinked,status |
API request latency |
| SUMMARY | dataway_http_api_body_buffer_utilization |
api |
API body buffer utillization(Len/Cap) |
| SUMMARY | dataway_http_api_body_copy |
api |
API body copy |
| SUMMARY | dataway_http_api_body_copy_seconds |
api |
API body copy latency |
| SUMMARY | dataway_http_api_body_copy_enlarge |
api |
API body copy enlarged pooled buffer |
| SUMMARY | dataway_http_api_resp_size_bytes |
api,method,status |
API response size |
| SUMMARY | dataway_http_api_req_size_bytes |
api,method,status |
API request size |
| COUNTER | dataway_http_api_body_too_large_dropped_total |
api,method |
API request too large dropped |
| COUNTER | dataway_http_api_with_inner_token |
api,method |
API request with inner token |
| COUNTER | dataway_http_api_dropped_total |
api,method |
API request dropped when sinker rule match failed |
| COUNTER | dataway_ip_blacklist_blocked_total |
api,method |
IP blacklist blocked requests total |
| COUNTER | dataway_ip_blacklist_missed_total |
api,method |
IP blacklist missed total |
| COUNTER | dataway_ip_blacklist_added_total |
api,method,reason |
IP blacklist added total |
| COUNTER | dataway_syncpool_stats |
name,type |
sync.Pool usage stats |
| COUNTER | dataway_http_api_copy_body_failed_total |
api |
API copy body failed count |
| COUNTER | dataway_http_api_signed_total |
api,method |
API signature count |
| SUMMARY | dataway_http_api_cached_bytes |
api,cache_type,method,reason |
API cached body bytes |
| SUMMARY | dataway_http_api_reusable_body_read_bytes |
api,method |
API re-read body on forking request |
| SUMMARY | dataway_http_api_recv_points |
api |
API /v1/write/:category recevied points |
| SUMMARY | dataway_http_api_send_points |
api |
API /v1/write/:category send points |
| SUMMARY | dataway_http_api_cache_points |
api,cache_type |
Disk cached /v1/write/:category points |
| SUMMARY | dataway_http_api_cache_cleaned_points |
api,cache_type,status |
Disk cache cleaned /v1/write/:category points |
| COUNTER | dataway_http_api_forked_total |
api,method,token |
API request forked total |
| GAUGE | dataway_http_cli_info |
max_conn_per_host,max_idle_conn,max_idle_conn_per_host,timeout |
Dataway as client settings |
| GAUGE | dataway_http_info |
cascaded,docker,http_client_trace,listen,max_body,release_date,remote,version |
Dataway API basic info |
| GAUGE | dataway_kodo_queue_depth |
N/A |
Current Kodo dispatch queue depth including in-flight tasks |
| GAUGE | dataway_kodo_queue_bytes |
N/A |
Current Kodo dispatch queue body bytes including in-flight tasks |
| COUNTER | dataway_kodo_queue_enqueued_total |
api,method |
Kodo queue enqueued tasks |
| COUNTER | dataway_kodo_queue_full_total |
api,method,action |
Kodo queue full events |
| COUNTER | dataway_kodo_queue_dispatch_total |
api,method,status |
Kodo queue dispatch results |
| COUNTER | dataway_token_negative_cache_added_total |
api,method,error_code |
Token negative cache added total |
| COUNTER | dataway_token_negative_cache_blocked_total |
api,method,error_code |
Token negative cache blocked requests total |
| GAUGE | dataway_last_heartbeat_time |
N/A |
Dataway last heartbeat with Kodo timestamp |
| SUMMARY | dataway_http_api_copy_buffer_drop_total |
max |
API copy buffer dropped(too large cached buffer) count |
| GAUGE | dataway_cpu_usage |
N/A |
Dataway CPU usage(%) |
| GAUGE | dataway_mem_stat |
type |
Dataway memory usage stats |
| GAUGE | dataway_open_files |
N/A |
Dataway open files |
| GAUGE | dataway_open_files_by_type |
type |
Dataway open files grouped by fd type |
| GAUGE | dataway_tcp_connections |
direction,port,state |
Dataway TCP connections grouped by direction, port and state(Linux only) |
| GAUGE | dataway_cpu_cores |
N/A |
Dataway CPU cores |
| GAUGE | dataway_uptime |
N/A |
Dataway uptime |
| COUNTER | dataway_process_ctx_switch_total |
type |
Dataway process context switch count(Linux only) |
| COUNTER | dataway_process_io_count_total |
type |
Dataway process IO count |
| COUNTER | dataway_process_io_bytes_total |
type |
Dataway process IO bytes count |
| SUMMARY | dataway_http_api_dropped_cache |
api,method,reason |
Dropped cache data dur to various reasons |
| COUNTER | dataway_http_api_body_size_bytes_total |
api,token |
Accumulated API body bytes for aggregate or tailSampling |
| COUNTER | dataway_http_aggr_point_total |
api,token |
point count of aggregate or tailSampling |
| COUNTER | dataway_http_tail_sampling_trace_total |
token |
tailSampling trace count |
| COUNTER | dataway_http_tail_sampling_span_total |
token |
tailSampling span count |
| COUNTER | dataway_http_tail_sampling_packet_send_total |
token,data_type,result |
tailSampling packet send result count |
| GAUGE | dataway_httpcli_dns_resolved_address |
api,coalesced,host,server |
HTTP DNS resolved address |
| SUMMARY | dataway_httpcli_dns_cost_seconds |
api,coalesced,host,server |
HTTP DNS cost |
| SUMMARY | dataway_httpcli_tls_handshake_seconds |
api,server |
HTTP TLS handshake cost |
| SUMMARY | dataway_httpcli_http_connect_cost_seconds |
api,server |
HTTP connect cost |
| SUMMARY | dataway_httpcli_got_first_resp_byte_cost_seconds |
api,server |
Got first response byte cost |
| SUMMARY | http_latency |
api,server |
HTTP latency |
| COUNTER | dataway_httpcli_tcp_conn_total |
api,server,remote,type |
HTTP TCP connection count |
| COUNTER | dataway_httpcli_conn_reused_from_idle_total |
api,server |
HTTP connection reused from idle count |
| SUMMARY | dataway_httpcli_conn_idle_time_seconds |
api,server |
HTTP connection idle time |
| GAUGE | dataway_sinker_rule_cache_size |
name |
Sinker rule cache size |
| GAUGE | dataway_sinker_rule_error |
error |
Rule errors |
| GAUGE | dataway_sinker_default_rule_hit |
info |
Default sinker rule hit count |
| GAUGE | dataway_sinker_rule_last_applied_time |
source,version |
Rule last applied time(Unix timestamp) |
| SUMMARY | dataway_sinker_rule_cost_seconds |
type |
Rule cost time seconds |
| SUMMARY | dataway_sinker_lru_cache_cleaned |
name |
Sinker LRU cache cleanup removed entries |
| COUNTER | dataway_sinker_lru_cache_dropped_total |
bucket,name,reason |
Sinker LRU キャッシュから削除されたエントリの総数 |
| HISTOGRAM | dataway_sinker_lru_cache_expired_delay_seconds |
bucket,name |
Sinker LRU キャッシュの期限切れエントリのクリーンアップ遅延 |
| HISTOGRAM | dataway_sinker_lru_cache_evicted_remaining_ttl_seconds |
bucket,name |
Sinker LRU キャッシュ容量超過により削除されたエントリの残存 TTL |
| COUNTER | dataway_sinker_pull_total |
event,source |
Sinker pulled or pushed total |
| GAUGE | dataway_sinker_rule_count |
type,with_default |
Sinker rule count |
| GAUGE | dataway_sinker_rule_cache_get_total |
name,type |
Sinker rule cache get hit/miss count |
| COUNTER | diskcache_rotate_total |
path |
Cache rotate count, mean file rotate from data to data.0000xxx |
| COUNTER | diskcache_remove_total |
path |
Removed file count, if some file read EOF, remove it from un-read list |
| COUNTER | diskcache_wakeup_total |
path |
Wakeup count on sleeping write file |
| COUNTER | diskcache_pos_updated_total |
op,path |
.pos file updated count |
| COUNTER | diskcache_seek_back_total |
path |
Seek back when Get() got any error |
| GAUGE | diskcache_capacity |
path |
Current capacity(in bytes) |
| GAUGE | diskcache_max_data |
path |
Max data to Put(in bytes), default 0 |
| GAUGE | diskcache_batch_size |
path |
Data file size(in bytes) |
| GAUGE | diskcache_size |
path |
Current cache size that waiting to be consumed(get). The size include header bytes |
| GAUGE | diskcache_open_time |
no_fallback_on_error,no_lock,no_pos,no_sync,path |
Current cache Open time in unix timestamp(second) |
| GAUGE | diskcache_last_close_time |
path |
Current cache last Close time in unix timestamp(second) |
| GAUGE | diskcache_datafiles |
path |
Current un-read data files |
| HISTOGRAM | diskcache_lock_wait_seconds |
lock_type,path |
Time spent waiting for locks by lock type |
| COUNTER | diskcache_lock_contention_total |
lock_type,path |
Number of lock contention events |
| SUMMARY | diskcache_get_latency |
path |
Get() cost seconds |
| SUMMARY | diskcache_put_latency |
path |
Put() cost seconds |
| SUMMARY | diskcache_put_bytes |
path |
Cache Put() bytes |
| SUMMARY | diskcache_get_bytes |
path |
Cache Get() bytes |
| SUMMARY | diskcache_dropped_data |
path,reason |
Dropped data during Put() when capacity reached. |
Docker モードでのメトリクス収集¶
ホストインストールには、ホストマシンに直接インストールする方法と Docker を使用する方法の 2 つがあります。ここでは Docker を使用する場合のメトリクス収集の違いについて説明します。
Docker でインストールする場合、メトリクス公開用の HTTP ポートは(デフォルトでは)ホストの 19090 ポートにマッピングされます。この場合のメトリクス収集アドレスは http://localhost:19090/metrics です。
異なるポートを指定した場合、Docker インストールではそのポートに 10000 を加算した値が使用されます。そのため、指定するポートは 45535 を超えないようにしてください。
pprof はデフォルトで無効になっており、Docker インストールでも profile ポートはホストに公開されません。一時的なトラブルシューティングの場合は、pprof_bind または DW_PPROF_BIND を明示的に localhost:6060 に設定し、docker exec、kubectl exec、または制御されたポートフォワーディングを介して収集してください。ループバックアドレス以外の設定は拒否されます。
Dataway 自身のログ収集と処理¶
Dataway 自身のログは 2 種類に分けられます。1 つは gin ログ、もう 1 つはプログラム自身のログです。以下の Pipeline でそれらを分離できます。
# Dataway ログ用パイプライン
# テスト用サンプルログ
'''
2023-12-14T11:27:06.744+0800 DEBUG apis apis/api_upload_profile.go:272 save profile file to disk [ok] /v1/upload/profiling?token=****************a4e3db8481c345a94fe5a
[GIN] 2021/10/25 - 06:48:07 | 200 | 30.890624ms | 114.215.200.73 | POST "/v1/write/logging?token=tkn_5c862a11111111111111111111111111"
'''
add_pattern("TOKEN", "tkn_\\w+")
add_pattern("GINTIME", "%{YEAR}/%{MONTHNUM}/%{MONTHDAY}%{SPACE}-%{SPACE}%{HOUR}:%{MINUTE}:%{SECOND}")
grok(_,"\\[GIN\\]%{SPACE}%{GINTIME:timestamp}%{SPACE}\\|%{SPACE}%{NUMBER:dataway_code}%{SPACE}\\|%{SPACE}%{NOTSPACE:cost_time}%{SPACE}\\|%{SPACE}%{NOTSPACE:client_ip}%{SPACE}\\|%{SPACE}%{NOTSPACE:method}%{SPACE}%{GREEDYDATA:http_url}")
# gin ログ
if cost_time != nil {
if http_url != nil {
grok(http_url, "%{TOKEN:token}")
cover(token, [5, 15])
replace(message, "tkn_\\w{0,5}\\w{6}", "****************$4")
replace(http_url, "tkn_\\w{0,5}\\w{6}", "****************$4")
}
group_between(dataway_code, [200,299], "info", status)
group_between(dataway_code, [300,399], "notice", status)
group_between(dataway_code, [400,499], "warning", status)
group_between(dataway_code, [500,599], "error", status)
if sample(0.1) { # drop 90% debug log
drop()
exit()
} else {
set_tag(sample_rate, "0.1")
}
parse_duration(cost_time)
duration_precision(cost_time, "ns", "ms")
set_measurement('gin', true)
set_tag(service,"dataway")
exit()
}
# アプリケーションログ
if cost_time == nil {
grok(_,"%{TIMESTAMP_ISO8601:timestamp}%{SPACE}%{NOTSPACE:status}%{SPACE}%{NOTSPACE:module}%{SPACE}%{NOTSPACE:code}%{SPACE}%{GREEDYDATA:msg}")
if level == nil {
grok(message,"Error%{SPACE}%{DATA:errormsg}")
if errormsg != nil {
add_key(status,"error")
drop_key(errormsg)
}
}
lowercase(level)
# if debug level enabled, drop most of them
if status == 'debug' {
if sample(0.1) { # drop 90% debug log
drop()
exit()
} else {
set_tag(sample_rate, "0.1")
}
}
group_in(status, ["error", "panic", "dpanic", "fatal","err","fat"], "error", status) # mark them as 'error'
if msg != nil {
grok(msg, "%{TOKEN:token}")
cover(token, [5, 15])
replace(message, "tkn_\\w{0,5}\\w{6}", "****************$4")
replace(msg, "tkn_\\w{0,5}\\w{6}", "****************$4")
}
set_measurement("dataway-log", true)
set_tag(service,"dataway")
}
Dataway バグレポート¶
Dataway はメトリクスを公開し、必要に応じて一時的にプロファイリング収集エントリを有効にして、問題のトラブルシューティングを支援できます。pprof はデフォルトで無効になっています。収集する前に、pprof_bind を明示的にループバックアドレスに設定し、収集が完了したら再度無効にしてください。
以下の情報収集は、実際に設定されたポートとアドレスに基づいて行われます。
br_dir="dw-br-$(date +%s)"
mkdir -p $br_dir
echo "save bug report to ${br_dir}"
# 実際の状況に応じて、ここでの設定を変更してください
dw_ip="localhost" # dataway メトリクス/profile 公開の IP アドレス
metric_port=9090 # メトリクス公開ポート
profile_port=6060 # 事前に localhost:6060 pprof リスニングを明示的に有効にする必要があります
dw_yaml_conf="/usr/local/cloudcare/dataflux/dataway/dataway.yaml"
dw_dot_yaml_conf="/usr/local/cloudcare/dataflux/dataway/.dataway.yaml" # コンテナインストール時にはこのファイルがあります
# 実行時メトリクスを収集
curl -v "http://${dw_ip}:${metric_port}/metrics" -o $br_dir/metrics
# プロファイリング情報を収集
curl -v "http://${dw_ip}:${profile_port}/debug/pprof/allocs" -o $br_dir/allocs
curl -v "http://${dw_ip}:${profile_port}/debug/pprof/heap" -o $br_dir/heap
curl -v "http://${dw_ip}:${profile_port}/debug/pprof/profile" -o $br_dir/profile # このコマンドは約 30 秒間実行されます
cp $dw_yaml_conf $br_dir/dataway.yaml.copy
cp $dw_dot_yaml_conf $br_dir/.dataway.yaml.copy
tar czvf ${br_dir}.tar.gz ${br_dir}
rm -rf ${br_dir}
スクリプトを実行します。
実行が完了すると、dw-br-1721188604.tar.gz のようなファイルが生成されます。このファイルを取り出してください。
FAQ¶
リクエストボディが大きすぎる問題¶
Dataway にはリクエストボディのデフォルトサイズ制限(デフォルト 64MB)があります。リクエストボディが大きすぎると、クライアントは HTTP 413 エラー(Request Entity Too Large)を受信します。リクエストボディが妥当な範囲内であれば、この値を適宜大きくすることができます(単位はバイト)。
- 環境変数
DW_MAX_HTTP_BODY_BYTESを設定 - dataway.yaml で
max_http_body_bytesを設定
実行中に大きすぎるリクエストパケットが発生した場合、メトリクスとログの両方にその兆候が現れます。
- メトリクス
dataway_http_too_large_dropped_totalは、破棄された大きなリクエストの数を示します。 - Dataway ログ
cat log | grep 'drop too large request'を検索すると、HTTP リクエストのヘッダー詳細が出力され、クライアントの状況をさらに把握できます。
Warning
ディスクキャッシュモジュールにも、最大データブロック書き込み制限(デフォルト 64MB)があります。最大リクエストボディ設定を増やす場合は、この設定(ENV_DISKCACHE_MAX_DATA_SIZE)も併せて調整し、大きなリクエストがディスクキャッシュに正しく書き込まれるようにしてください。
-
この制限は、Dataway コンテナ/Pod の実行時にシステム制限により約 20000 接続しか使用できないのを防ぐためのものです。制限を増やすと、Dataway のデータアップロード効率に影響します。Dataway のトラフィックが多い場合は、単一の Dataway の CPU 数を増やすか、Dataway インスタンスを水平スケーリングすることを検討してください。 ↩