...
데이터가 InfluxDB에 Write 될 때, HTTP, HTTPS 또는 UDP Line protocol(https://docs.influxdata.com/influxdb/v1.8/write_protocols/line_protocol_tutorial)을 통해 Subscriber endpoint에 복제됩니다.
InfluxDB subscriber service는 여러 개의 “writers" goroutines(https://golangbot.com/goroutines)를 생성하여 Subscription endpoints에 Write 데이터를 전송합니다.
...
InfluxDB에 Writes가 발생할 때, 각각의 Subscription writer는 지정된 Subscription endpoints로 Write 된 데이터를 전송합니다. write-concurrency
(multiple writers)와 전송하려는 데이터량의 데이터양의 상대적 차이로 인해 Writer processes와 Transport layer의 Nanosecond의 시차가 발생할 수 있으며, 이에 따라 데이터가 차례로 전송되지 않을 수 있습니다.
Important information about high write loads
write-concurrency
을 를 1보다 크게 설정하게 되면 Writer processes가 증가하게 되지만 전송하려는 데이터에 부하가 발생하여 비 순차 쓰기가 발생할 수 있습니다.
반대로write-concurrency
을 를 1로 설정하면 Subscription endpoints에 차례대로 전송되지만, Writer processes에 병목 현상이 발생할 수 있습니다.write-concurrency
는 작업량에 따라 달라지며 Subscription endpoint에 순서대로 전송되게 설정해야 합니다.
...
아래의 InfluxQL 문을 사용하여 Subscriptions를 관리하십시오관리합니다.
CREATE SUBSCRIPTION
SHOW SUBSCRIPTIONS
DROP SUBSCRIPTION
...
InfluxQL문 CREATE SUBSCRIPTION
을 사용하여 Subscriptions를 생성합니다. CREATE SUBSCRIPTION
은 Subscription name, Database name, Retention policy, InfluxDB에 Write 된 데이터를 복사해야 하는 Host의 URL이 필요하며 구문은 아래 예시를 참고하십시오참고합니다.
Code Block | ||
---|---|---|
| ||
-- Pattern: CREATE SUBSCRIPTION "<subscription_name>" ON "<db_name>"."<retention_policy>" DESTINATIONS <ALL|ANY> "<subscription_endpoint_host>" -- Examples: -- Create a SUBSCRIPTION on database 'telegraf' and retention policy 'autogen' that sends data to 'example.com:9090' via HTTP. CREATE SUBSCRIPTION "cloudhub_sub" ON "telegraf"."autogen" DESTINATIONS ALL 'http://example.com:9090' -- Create a SUBSCRIPTION on database 'telegraf' and retention policy 'autogen' that round-robins the data to 'h1.example.com:9090' and 'h2.example.com:9090' via UDP. CREATE SUBSCRIPTION "cloudhub_sub" ON "telegraf"."autogen" DESTINATIONS ANY 'udp://h1.example.com:9090', 'udp://h2.example.com:9090' |
...
CREATE SUBSCRIPTION
문을 사용하여 여러 Hosts의 Endpoints를 DESTINATIONS
절에 쉼표로 구분하여 지정할 수 있습니다.
또한 DESTINATIONS
절 뒤에 ALL
또는 ANY
으로 로 구분하여 Endpoint에 쓰는 방법을 결정합니다.
ALL
: 지정된 모든 Host에 기록합니다.
ANY
: Round robin방식으로 robin 방식으로 지정된 Host에 기록합니다.
여러 Hosts의 Subscriptions 방법
...
Subscriptions은 HTTP, HTTPS, or UDP 전송 프로토콜을 사용할 수 있습니다. Subscription endpoint는 수신될 Host의 프로토콜로 사용합니다.
Kapacitor subscription으로 생성한다면 kapacitor.conf
의 [[influxdb]]
section의 프로토콜을 사용합니다.
...
InfluxDB와 Kapacitor 간의 HTTPS 연결 및 보안에 대한 자세한 내용은 Kapacitor security(https://docs.influxdata.com/kapacitor/v1.5/administration/security를 참조하십시오/#secure-influxdb-and-kapacitor)를 참조합니다.
Show subscriptions
InfluxQL의 SHOW SUBSCRIPTIONS
문은 등록 된 등록된 모든 Subscriptions 목록을 조회합니다.
...
InfluxQL의 DROP SUBSCRIPTIONS
문은 등록 된 Subscriptions을 Subscriptions를 삭제합니다.
Code Block | ||
---|---|---|
| ||
-- Pattern: DROP SUBSCRIPTION "<subscription_name>" ON "<db_name>"."<retention_policy>" -- Example: DROP SUBSCRIPTION "cloudhub_sub" ON "telegraf"."autogen" |
모든 Subscriptions 삭제
모든 Subscriptions을 Subscriptions를 제거해야 할 경우에는 아래 스크립트를 참고하여 실행하십시오실행합니다.
Code Block | ||
---|---|---|
| ||
# Environment variable exports: # Uncomment these if INFLUXUSER and INFLUXPASS are not already globally set. # export INFLUXUSER=influxdb-username # export INFLUXPASS=influxdb-password IFS=$'\n'; for i in $(influx -format csv -username $INFLUXUSER -password $INFLUXPASS -database _internal -execute 'show subscriptions' | tail -n +2 | grep -v name); do influx -format csv -username $INFLUXUSER -password $INFLUXPASS -database _internal -execute "drop subscription \"$(echo "$i" | cut -f 3 -d ',')\" ON \"$(echo "$i" | cut -f 1 -d ',')\".\"$(echo "$i" | cut -f 2 -d ',')\""; done |
...
InfluxDB subscription 설정은 influxdb.conf
의 [subscriber]
section에서 할 수 있습니다.
Subcriptions를 사용하려면 [subscriber
] section의 enabled
항목을 true
로 설정해야합니다설정해야 합니다.
아래는 Subscriber 설정의 influxdb.conf
의 예제 입니다.
...
[subscriber
]의 구성 옵션에 대한 설명은 Configuring InfluxDB를 참조하십시오(https://docs.influxdata.com/influxdb/v1.8/administration/config#subscription-settings)를 참조합니다.
Troubleshooting
Subscription endpoints에 Access할 Access 할 수 없거나 해제됐을 경우
Endpoint host에 Access 할 수 없거나 연결이 해제됐을 경우, InfluxDB Subscription이 삭제되지 않고 계속해서 데이터를 전송한다고 하면 아래와 같은 오류가 표시됩니다.
...
InfluxDB는 Endpoint의 상태를 알 수 없기 때문에, Endpoint에 Access 할 수없는 수 없는 경우 Subscription이 자동으로 삭제되지 않습니다. 따라서 Subscription endpoint가 제거되면 InfluxDB에서 Subscription을 수동으로 삭제해야합니다삭제해야 합니다.