diff --git a/pillar/paas/docker/docker-002/sentry.sls b/pillar/paas/docker/docker-002/sentry.sls index ebec57c..ced85c1 100644 --- a/pillar/paas/docker/docker-002/sentry.sls +++ b/pillar/paas/docker/docker-002/sentry.sls @@ -1,98 +1,109 @@ # ------------------------------------------------------------- # Salt — Provision Docker engine # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Project: Nasqueron # License: Trivial work, not eligible to copyright # Service: Sentry # ------------------------------------------------------------- docker_networks: sentry: subnet: 172.18.3.0/24 docker_images: - library/postgres - library/redis:3.2-alpine - library/sentry - tianon/exim4 + - yandex/clickhouse-server:20.3.9.70 docker_containers: # # Core services used by Sentry # exim: sentry_smtp: mailname: mx.sentry.nasqueron.org network: sentry memcached: sentry_memcached: version: 1.6.9-alpine network: sentry redis: sentry_redis: network: sentry postgresql: sentry_db: credential: nasqueron.sentry.postgresql # # Kafka instance # zookeeper: sentry_zookeeper: version: 5.5.0 network: sentry kafka: sentry_kafka: version: 5.5.0 zookeeper: sentry_zookeeper network: sentry topics: - ingest-attachments - ingest-transactions - ingest-events - ingest-replay-recordings + # + # ClickHouse + # + clickhouse: + sentry_clickhouse: + version: 20.3.9.70 + network: sentry + config: sentry.xml + max_memory_ratio: 0.2 + # # Services maintained by Sentry # sentry: sentry_web_1: app_port: 26080 host: sentry.nasqueron.org # As an instance is divided between a web, a cron and a worker # containers, we need an identified to share a data volume. realm: nasqueron network: sentry sentry_worker: sentry_worker_1: realm: nasqueron network: sentry sentry_cron: sentry_cron: realm: nasqueron network: sentry # ------------------------------------------------------------- # Services configuration # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - kakfa_loggers: kafka.cluster: WARN kafka.controller: WARN kafka.coordinator: WARN kafka.log: WARN kafka.server: WARN kafka.zookeeper: WARN state.change.logger: WARN diff --git a/roles/paas-docker/containers/clickhouse.sls b/roles/paas-docker/containers/clickhouse.sls new file mode 100644 index 0000000..01d53fa --- /dev/null +++ b/roles/paas-docker/containers/clickhouse.sls @@ -0,0 +1,74 @@ +# ------------------------------------------------------------- +# Salt — Provision Docker engine +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Project: Nasqueron +# License: Trivial work, not eligible to copyright +# ------------------------------------------------------------- + +{% set has_selinux = salt['grains.get']('selinux:enabled', False) %} + +{% for instance, container in pillar['docker_containers']['clickhouse'].items() %} +{% set image = salt['paas_docker.get_image']("yandex/clickhouse-server", container) %} + +# ------------------------------------------------------------- +# Data directory +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +/srv/clickhouse/{{ instance }}: + file.directory: + - makedirs: True + +{% for subdir in ['lib', 'log'] %} +/srv/clickhouse/{{ instance }}/{{ subdir }}: + file.directory: + - user: 101 + - group: 101 +{% endfor %} + +/srv/clickhouse/{{ instance }}/{{ container['config'] }}: + file.managed: + - source: salt://roles/paas-docker/containers/files/clickhouse/{{ instance }}/{{ container['config'] }} + - user: 101 + - group: 101 + +{% if has_selinux %} +selinux_context_{{ instance }}_clickhouse_data: + selinux.fcontext_policy_present: + - name: /srv/clickhouse/{{ instance }} + - sel_type: container_file_t + +selinux_context_{{ instance }}_clickhouse_data_applied: + selinux.fcontext_policy_applied: + - name: /srv/clickhouse/{{ instance }} +{% endif %} + +# ------------------------------------------------------------- +# Container +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +{{ instance }}: + docker_container.running: + - detach: True + - interactive: True + - image: {{ image }} + - binds: + - /srv/clickhouse/{{ instance }}/lib:/var/lib/clickhouse + - /srv/clickhouse/{{ instance }}/log:/var/log/clickhouse-server + - /srv/clickhouse/{{ instance }}/{{ container['config'] }}:/etc/clickhouse-server/config.d/{{ container['config'] }} + - environment: + # Should be increased if search returns incomplete results + MAX_MEMORY_USAGE_RATIO: {{ container['max_memory_ratio'] | default(0.3) }} + - ulimits: + - nofile=262144:262144 + - healthcheck: + Test: http_proxy='' wget -nv -t1 --spider 'http://localhost:8123/' || exit 1 + Interval: 30000000000 +{% if 'network' in container %} + - networks: + - {{ container['network'] }} +{% endif %} + - cap_add: + - SYS_NICE + - NET_ADMIN + - IPC_LOCK +{% endfor %} diff --git a/roles/paas-docker/containers/files/clickhouse/sentry_clickhouse/sentry.xml b/roles/paas-docker/containers/files/clickhouse/sentry_clickhouse/sentry.xml new file mode 100644 index 0000000..8741278 --- /dev/null +++ b/roles/paas-docker/containers/files/clickhouse/sentry_clickhouse/sentry.xml @@ -0,0 +1,32 @@ +<!-- +# +# ClickHouse configuration - Sentry +# +# Project: Nasqueron +# License: Trivial work, not eligible to copyright +# Forked from: getsentry/self-hosted/master/clickhouse/config.xml +# Source file: roles/paas-docker/containers/files/clickhouse/sentry_clickhouse/sentry.xml +# _____________________________________________________________ +# +# <auto-generated> +# This file is managed by our rOPS SaltStack repository. +# +# Changes to this file may cause incorrect behavior +# and will be lost if the state is redeployed. +# </auto-generated> +--> + +<yandex> + <max_server_memory_usage_to_ram_ratio> + <include from_env="MAX_MEMORY_USAGE_RATIO"/> + </max_server_memory_usage_to_ram_ratio> + + <logger> + <level>information</level> + <console>1</console> + </logger> + + <merge_tree> + <enable_mixed_granularity_parts>1</enable_mixed_granularity_parts> + </merge_tree> +</yandex>