[Docker + ELK] Docker ELK๋ฅผ ์‚ฌ์šฉํ•ด์„œ PostgreSQL DB ๋ชจ๋‹ˆํ„ฐ๋ง ํ•˜๊ธฐ

2023. 12. 21. 11:01ยท๐Ÿณ Docker & Kubernetes
๋ชฉ์ฐจ
  1. Docker ELK ๋นŒ๋“œํ•˜๊ธฐ
  2. 1. Setup Container
  3. 2. Elasticsearch Container
  4. 3. Kibana Container
  5. 4. Logstash Container
  6. Docker ELK์™€ PostgreSQL ์—ฐ๋™ํ•˜๊ธฐ
  7. 1. PostgreSQL JDBC Driver mount
  8. 2. logstash pipeline configuration ํŒŒ์ผ ์ˆ˜์ •
  9. 3. Upload
  10. Common Issue
  11. No Available connections
  12. jdbc driver - class not found
  13. jdbc last run permission denied
728x90

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์ด์ „์— elasticsearch, kibana, logstash๋ฅผ ๋ณ„๋„๋กœ ์‹คํ–‰ํ•˜์—ฌ PostgreSQL DB๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ–ˆ๋˜ ๊ฒƒ์„ Docker์„ ํ†ตํ•ด์„œ ๊ตฌํ˜„ํ•ด๋ณธ๋‹ค.
๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ elk๋ฅผ ๊ตฌ์„ฑํ–ˆ๋˜ ํฌ์ŠคํŠธ๋Š” ์•„๋ž˜ ๋งํฌ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

'๐Ÿฅ Web/โ” Back-end | etc.' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก

ํ˜ธ๋ฝํ˜ธ๋ฝํ•˜์ง€ ์•Š์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์–ด๋ณด์ž

dnai-deny.tistory.com

Docker์„ ์‚ฌ์šฉํ•ด์„œ ๋ฐฐํฌํ•˜๋ฉด ๋ช…๋ น์–ด ํ•˜๋‚˜๋กœ ์‰ฝ๊ฒŒ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ๊ฐœ๋ฐœํ™˜๊ฒฝ, ๋ฒ„์ „, ์„ค์ •์„ ๋ณต์‚ฌํ•ด์„œ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๋‹ค์†Œ ์ค€๋น„๋‹จ๊ณ„๊ฐ€ ๋ณต์žกํ•œ ELK stack์„ ๋ณด๋‹ค ๊ฐ„ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๊ณต๋ถ€ํ•ด์„œ ๊ตฌํ˜„ํ•ด๋ณด๊ธฐ๋กœ ๊ฒฐ์ •ํ•˜์˜€๋‹ค. ์‚ฌ์ „ ์ž‘์—…์ด ๊ผผ๊ผผํ•˜๊ฒŒ ๋“ค์–ด๊ฐ€์•ผํ•˜์ง€๋งŒ ์ œ๋Œ€๋กœ ์•Œ์•„๋‘๋ฉด ๋‹ค์Œ์—๋„ ํ•  ์ˆ˜ ์žˆ์„ํ…Œ๋‹ˆ๊นŒ...๐Ÿ‘€

์ฝ”๋“œ ์ „๋ฌธ์€ ์—ฌ๊ธฐ์— ์˜ฌ๋ ค๋’€๋‹ค.

 

GitHub - melli0505/Docker-ELK-PostgreSQL: PostgreSQL Database monitoring & indexing system with Docker ELK

PostgreSQL Database monitoring & indexing system with Docker ELK - GitHub - melli0505/Docker-ELK-PostgreSQL: PostgreSQL Database monitoring & indexing system with Docker ELK

github.com

Docker ELK ๋นŒ๋“œํ•˜๊ธฐ

์•„๋ž˜ ์˜คํ”ˆ์†Œ์Šค ๊ตฌํ˜„์—์„œ ์‹œ์ž‘ํ•œ๋‹ค.

 

GitHub - deviantony/docker-elk: The Elastic stack (ELK) powered by Docker and Compose.

The Elastic stack (ELK) powered by Docker and Compose. - GitHub - deviantony/docker-elk: The Elastic stack (ELK) powered by Docker and Compose.

github.com

  • setup - elastic search - kibana - logstash ์ˆœ์œผ๋กœ ์‹คํ–‰
  • ๊ฐ™์€ network ์•„๋ž˜์— ๋ฌถ์ž„(elk - driver=bridge)1. Setup Container

1. Setup Container

  • setup docker file ์‹คํ–‰
  • entrypoint
    • user password
    • role
    • rolesfile
  setup:
    profiles:
      - setup
    build:
      context: setup/
      args:
        ELASTIC_VERSION: 8.8.1
    init: true
    volumes:
      - ./setup/entrypoint.sh:/entrypoint.sh:ro,Z
      - ./setup/lib.sh:/lib.sh:ro,Z
      - ./setup/roles:/roles:ro,Z
    environment:
      ELASTIC_PASSWORD: ${ELASTIC_PASSWORD:-}
      LOGSTASH_INTERNAL_PASSWORD: ${LOGSTASH_INTERNAL_PASSWORD:-}
      KIBANA_SYSTEM_PASSWORD: ${KIBANA_SYSTEM_PASSWORD:-}
      MONITORING_INTERNAL_PASSWORD: ${MONITORING_INTERNAL_PASSWORD:-}
    networks:
      - elk
    depends_on:
      - elasticsearch

Roles & User ์„ค์ •

entrypoint.sh ํŒŒ์ผ์„ ๋ณด๋ฉด,

declare -A users_roles
users_roles=(
    [logstash_internal]='logstash_writer'
    [monitoring_internal]='remote_monitoring_collector'
)

# --------------------------------------------------------
# Roles declarations

declare -A roles_files
roles_files=(
    [logstash_writer]='logstash_writer.json'
)

for role in "${!roles_files[@]}"; do
    log "Role '$role'"

    declare body_file
    body_file="${BASH_SOURCE[0]%/*}/roles/${roles_files[$role]:-}"
    if [[ ! -f "${body_file:-}" ]]; then
        sublog "No role body found at '${body_file}', skipping"
        continue
    fi

    sublog 'Creating/updating'
    ensure_role "$role" "$(<"${body_file}")"
done
  • ./roles/ ํ•˜์œ„์— ์žˆ๋Š” role ํŒŒ์ผ์„ ๊ธฐ๋ฐ˜์œผ๋กœ role์„ ์ƒ์„ฑํ•œ๋‹ค(ensure_role command). ์ด ๊ฒฝ์šฐ์— ์šฐ๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ role์€ logstash-writer์ด๋‹ค.
// roles/logstash_writer.json 
{
  "cluster": ["manage_index_templates", "monitor", "manage_ilm"],
  "indices": [
    {
      "names": ["logs-generic-default", "logstash-*", "ecs-logstash-*"],
      "privileges": ["write", "create", "create_index", "manage", "manage_ilm"]
    },
    {
      "names": ["logstash", "ecs-logstash"],
      "privileges": ["write", "manage"]
    }
  ]
}
  • ๊ทธ๋ฆฌ๊ณ  ๋‚˜๋ฉด user๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
declare -A users_passwords
users_passwords=(
    [logstash_internal]="${LOGSTASH_INTERNAL_PASSWORD:-}"
    [kibana_system]="${KIBANA_SYSTEM_PASSWORD:-}"
    [monitoring_internal]="${MONITORING_INTERNAL_PASSWORD:-}"
)

for user in "${!users_passwords[@]}"; do
    log "User '$user'"
    if [[ -z "${users_passwords[$user]:-}" ]]; then
        sublog 'No password defined, skipping'
        continue
    fi

    declare -i user_exists=0
    user_exists="$(check_user_exists "$user")"

    if ((user_exists)); then
        sublog 'User exists, setting password'
        set_user_password "$user" "${users_passwords[$user]}"
    else
        if [[ -z "${users_roles[$user]:-}" ]]; then
            suberr '  No role defined, skipping creation'
            continue
        fi

        sublog 'User does not exist, creating'
        create_user "$user" "${users_passwords[$user]}" "${users_roles[$user]}"
    fi
done
  • create_user command๋ฅผ ํ†ตํ•ด ์‚ฌ์ „ ์ •์˜๋œ user๋“ค์„ ์ƒ์„ฑํ•œ๋‹ค. password ๋“ฑ์€ .env ํŒŒ์ผ ์•ˆ์— ์žˆ๋‹ค.

2. Elasticsearch Container

  • ํ•œ ๋ฒˆ ์‹คํ–‰ํ•˜๊ณ  ๋‚˜๋ฉด config/certs ํด๋” ์•„๋ž˜์— ์ธ์ฆ์„œ ์ƒ์„ฑ๋จ. ์ด ์ธ์ฆ์„œ๋ฅผ logstash/config/certs ์•„๋ž˜ ๋˜‘๊ฐ™์ด ๋ถ™์—ฌ๋„ฃ์–ด์ค˜์•ผ permission ์ƒ๊น€
  elasticsearch:
    build:
      context: elasticsearch/
      args:
        ELASTIC_VERSION: ${ELASTIC_VERSION}
    volumes:
      - ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro,Z
      - elasticsearch:/usr/share/elasticsearch/data:Z
    ports:
      - 9200:9200
      - 9300:9300
    environment:
      node.name: elasticsearch
      ES_JAVA_OPTS: Xms512m -Xmx512m
      # Bootstrap password.
      # Used to initialize the keystore during the initial startup of
      # Elasticsearch. Ignored on subsequent runs.
      ELASTIC_PASSWORD: ${ELASTIC_PASSWORD:-}
      # Use single node discovery in order to disable production mode and avoid bootstrap checks.
      # see: https://www.elastic.co/guide/en/elasticsearch/reference/current/bootstrap-checks.html
      discovery.type: single-node
    networks:
      - elk
    restart: unless-stopped

3. Kibana Container

  • ๋”ฐ๋กœ ๊ฑด๋“œ๋ฆด ๊ฒƒ ์—†์Œ
  kibana:
    build:
      context: kibana/
      args:
        ELASTIC_VERSION: ${ELASTIC_VERSION}
    volumes:
      - ./kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml:ro,Z
      - ./kibana/ca_1688430453313.crt:/usr/share/kibana/certs/ca_1688430453313.crt
    ports:
      - 5601:5601
    environment:
      KIBANA_SYSTEM_PASSWORD: ${KIBANA_SYSTEM_PASSWORD:-}
    networks:
      - elk
    depends_on:
      - elasticsearch
    restart: unless-stopped

4. Logstash Container

  logstash:
    build:
      context: logstash/
      args:
        ELASTIC_VERSION: ${ELASTIC_VERSION}
    volumes:
      - ./logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml:ro,Z
      - ./logstash/config:/usr/share/logstash/config:ro,Z
      - ./logstash/pipeline:/usr/share/logstash/pipeline:ro,Z
    ports:
      - 5044:5044
      - 50000:50000/tcp
      - 50000:50000/udp
      - 9600:9600
    environment:
      LS_JAVA_OPTS: -Xms256m -Xmx256m
      LOGSTASH_INTERNAL_PASSWORD: ${LOGSTASH_INTERNAL_PASSWORD:-}
    networks:
      - elk
    depends_on:
      - elasticsearch
    restart: unless-stopped
  • ์ด ์„ค์ •์ด ๊ธฐ๋ณธ
  • logstash๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋А๋ƒ์— ๋”ฐ๋ผ์„œ ์ถ”๊ฐ€์ ์ธ ์„ธํŒ…์ด ํ•„์š”ํ•จ

https://github.com/elastic/logstash

 

GitHub - elastic/logstash: Logstash - transport and process your logs, events, or other data

Logstash - transport and process your logs, events, or other data - GitHub - elastic/logstash: Logstash - transport and process your logs, events, or other data

github.com

  • config ๋‚ด๋ถ€์— ํ•„์š”ํ•œ ํŒŒ์ผ
    • logstash.yml
    • jvm.options (์œ„ ๊นƒํ—™์— ํฌํ•จ๋จ)
    • log4j2.properties (์œ„ ๊นƒํ—™์— ํฌํ•จ๋จ)
    • certs

Docker ELK์™€ PostgreSQL ์—ฐ๋™ํ•˜๊ธฐ

1. PostgreSQL JDBC Driver mount

  • docker-compose.yml ์˜ logstash container volumn์— jdbc driver ํŒŒ์ผ์„ ๋งˆ์šดํŠธํ•œ๋‹ค
  • read only๋กœ ๋งˆ์šดํŠธํ•˜๋ฉด ์•ˆ๋จ!
./logstash/config/postgresql-42.6.0.jar:/usr/share/logstash/logstash-core/lib/jars/postgresql-42.6.0.jar
  • ๊ฒฝ๋กœ ๋’ค์— :ro๋ฅผ ๋ถ™์ด๋ฉด read only, :z๋ฅผ ๋ถ™์ด๋ฉด ์ปจํ…Œ์ด๋„ˆ๊ฐ„ ๊ณต์œ ๋œ๋‹ค.

2. logstash pipeline configuration ํŒŒ์ผ ์ˆ˜์ •

๊ธฐ์กด ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ elk๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์ž‘์„ฑํ–ˆ๋˜ ๋‚ด์šฉ์ด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

input {
  jdbc {
    jdbc_driver_library => "./logstash/logstash-core/lib/jars/postgresql-42.6.0.jar"
    jdbc_driver_class => "org.postgresql.Driver"
    jdbc_connection_string => "jdbc:postgresql://localhost:5432/searching"
    jdbc_user => "{USERNAME}"
    jdbc_password => "{PASSWORD}"
    jdbc_fetch_size => 2
    schedule => "* * * * *"
    statement => "select * from contents WHERE id > :sql_last_value ORDER BY id ASC"
    last_run_metadata_path => "./logstash/data/plugins/inputs/jdbc/logstash_jdbc_last_run"
    use_column_value => true
    tracking_column_type => "numeric"
    tracking_column => "id"
    type => "data"
  }
}

output {
    elasticsearch {
      hosts => ["https://localhost:9200"]
      cacert => './logstash/config/certs/http_ca.crt'
      ssl => true
      user => "logstash_internal"
      password => "x-pack-test-password"
      index => "contents"
    }
}

์ˆ˜์ •ํ•ด์•ผํ•  ๋ถ€๋ถ„์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • ๋„์ปค ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ๊ฒฝ๋กœ๋กœ ์ˆ˜์ •
  • postgresql๊ณผ elasticsearch ์ฃผ์†Œ ๋ณ€๊ฒฝ
  • index template ์‚ฝ์ž…

Docker Container ๊ฒฝ๋กœ๋กœ ์ˆ˜์ •

input {
  jdbc {
    jdbc_driver_library => "/usr/share/logstash/logstash-core/lib/jars/postgresql-42.6.0.jar" # here
    jdbc_driver_class => "org.postgresql.Driver"
    jdbc_connection_string => "jdbc:postgresql://localhost:5432/searching"
    jdbc_user => "{USERNAME}"
    jdbc_password => "{PASSWORD}"
    jdbc_fetch_size => 2
    schedule => "* * * * *"
    statement => "select * from contents WHERE id > :sql_last_value ORDER BY id ASC"
    last_run_metadata_path => "/usr/share/logstash/jdbc_last_run/logstash_jdbc_last_run_keyword" # here
    use_column_value => true
    tracking_column_type => "numeric"
    tracking_column => "id"
    type => "data"
  }
}

output {
    elasticsearch {
      hosts => ["https://localhost:9200"]
      cacert => '/usr/share/logstash/config/certs/http_ca.crt' # here
      ssl => true
      user => "logstash_internal"
      password => "x-pack-test-password"
      index => "contents"
    }
}
  • logstash container๋Š” /usr/share/ ํ•˜์œ„์— logstash ํด๋”๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์•„๋ž˜์— ํŒŒ์ผ์‹œ์Šคํ…œ์ด ๊ตฌ์„ฑ๋œ๋‹ค.
  • docker-compose.yml ํŒŒ์ผ์—์„œ ๋งˆ์šดํŠธ ํ–ˆ๋˜ ๊ฒฝ๋กœ์™€ ๊ฐ™์ด ์จ์ฃผ๋ฉด ๋œ๋‹ค. jdbc_last_run ํด๋”๋„ ์ƒˆ๋กœ ๋ถ™์—ฌ์ค€๋‹ค.
# docker-compose.yml
volumes:

  - ./logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml:ro,Z

  - ./logstash/pipeline:/usr/share/logstash/pipeline:ro,Z

  - ./logstash/config:/usr/share/logstash/config:ro,Z

  # new

  - ./logstash/config/postgresql-42.6.0.jar:/usr/share/logstash/logstash-core/lib/jars/postgresql-42.6.0.jar

  - ./logstash/jdbc_last_run:/usr/share/logstash/jdbc_last_run

postgresql๊ณผ elasticsearch ์ฃผ์†Œ ๋ณ€๊ฒฝ

  • docker compose๊ฐ€ DB์™€ ๊ฐ™์€ ์ปดํ“จํ„ฐ์— ์žˆ์ง€ ์•Š๋‹ค๋Š” ๊ฐ€์ • ํ•˜์— postgreSQL ์ ‘์† ์ฃผ์†Œ๋ฅผ IP๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค.
# pipeline.conf
...
    jdbc_connection_string => "jdbc:postgresql://{IP ADDRESS}:5432/{SERVER NAME}"
  • elasticsearch๋„ localhost ๋Œ€์‹  ๋„์ปค ๋‚ด๋ถ€์— ์„ค์ •ํ•œ elk ๋„คํŠธ์›Œํฌ ์„ ์„ ํ†ตํ•ด์„œ ์ปจํ…Œ์ด๋„ˆ ๋‹จ์œ„๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค(์ด๊ฑฐ ํ‹€๋ ธ์„ ์ˆ˜๋„ ์žˆ์Œ)

 

### index template ์‚ฝ์ž…
- elasticsearch - kibana - logstash๋ฅผ ๋”ฐ๋กœ ์‹คํ–‰์‹œํ‚ค๋˜ ๋•Œ์—๋Š” kibana์—์„œ index template์„ ๋จผ์ € ์„ค์ •ํ•œ ๋’ค์— logstash๋ฅผ ๋™์ž‘ํ•˜๋ฉด ๋์ง€๋งŒ, ์ง€๊ธˆ์€ ํ•œ ๋ฒˆ์— ๋‹ค๋‹ค๋‹ฅ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฏธ๋ฆฌ json ํ˜•ํƒœ๋กœ ์ž‘์„ฑํ•ด์„œ ์„ค์ •ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
- *elasitcsearch 7.8.x ๋ฒ„์ „ ์ด์ƒ์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ composable index๋กœ index template ๊ตฌ์„ฑ์ด ๋ณ€๊ฒฝ๋˜์—ˆ์Œ. ํ˜•์‹์ด ๋‹ค๋ฅด๋ฏ€๋กœ ์ฃผ์˜ํ•˜๊ธฐ*
- ์•„๋ž˜๋Š” ์˜ˆ์‹œ๋กœ ์ž‘์„ฑ๋œ index template

```json
// templates/content_template.json
{
  "index_patterns": ["contents*"],
  "template": {
    "settings": {
      "analysis": {
        "filter": {
          "custom_shingle_filter": {
            "max_shingle_size": "3",
            "min_shingle_size": "2",
            "type": "shingle"
          }
        },
        "char_filter": {
          "default_character_filter": {
            "type": "html_strip"
          }
        },
        "analyzer": {
          "whitespace_analyzer": {
            "filter": ["lowercase", "word_delimiter", "custom_shingle_filter"],
            "char_filter": ["html_strip"],
            "type": "custom",
            "tokenizer": "whitespace"
          },
          "nori_analyzer": {
            "filter": ["lowercase"],
            "char_filter": ["html_strip"],
            "type": "custom",
            "tokenizer": "korean_nori_tokenizer"
          }
        },
        "tokenizer": {
          "korean_nori_tokenizer": {
            "type": "nori_tokenizer",
            "decompound_mode": "mixed"
          },
          "custom-edge-ngram": {
            "token_chars": ["letter", "digit"],
            "min_gram": "1",
            "type": "edge_ngram",
            "max_gram": "10"
          }
        }
      },
      "number_of_shards": "48",
      "number_of_replicas": "0"
    },
    "mappings": {
      "properties": {
        "content": {
          "type": "text",
          "fields": {
            "search": {
              "type": "search_as_you_type",
              "doc_values": false,
              "max_shingle_size": 3,
              "analyzer": "whitespace_analyzer",
              "search_analyzer": "whitespace_analyzer",
              "search_quote_analyzer": "standard"
            }
          },
          "analyzer": "nori_analyzer",
          "search_analyzer": "nori_analyzer",
          "search_quote_analyzer": "standard"
        },
        "id": {
          "type": "long",
          "ignore_malformed": false,
          "coerce": true
        },
        "title": {
          "type": "text",
          "fields": {
            "search": {
              "type": "search_as_you_type",
              "doc_values": false,
              "max_shingle_size": 3,
              "analyzer": "whitespace_analyzer",
              "search_analyzer": "whitespace_analyzer",
              "search_quote_analyzer": "standard"
            }
          },
          "analyzer": "nori_analyzer",
          "search_analyzer": "nori_analyzer",
          "search_quote_analyzer": "standard"
        },
      }
    },
    "aliases": {}
  }
}
  • ๊ทธ๋ฆฌ๊ณ  ์ž‘์„ฑํ•œ ํ…œํ”Œ๋ฆฟ์„ docker compose์—์„œ volumn์— ๋งˆ์šดํŒ…ํ•˜๊ธฐ
      ...
        - ./logstash/templates:/usr/share/logstash/templates
    
- `pipeline.conf` ํŒŒ์ผ์— ์ธ๋ฑ์Šค ํ…œํ”Œ๋ฆฟ ์ถ”๊ฐ€ํ•˜๊ธฐ
```conf
output{
    ...
    index => "contents"
    manage_template => true
    template => "/usr/share/logstash/templates/content_template.json"
    template_name => "contents"
    template_overwrite => true
}

3. Upload

$ docker-compose up

๋กœ๊ทธ ์ •์ƒ
kibana์—์„œ ํ™•์ธํ–ˆ์„ ๋•Œ ๋ฐ์ดํ„ฐ ์ž˜ ์˜ฌ๋ผ์˜ค๋Š” ์ค‘
์ธ๋ฑ์Šค์™€ ์ธ๋ฑ์Šค ํ…œํ”Œ๋ฆฟ๋„ ์ž˜ ์ƒ์„ฑ๋จ

Common Issue

No Available connections

docker-elk-logstash-1       | [2023-12-19T07:33:09,096][ERROR][logstash.licensechecker.licensereader] Unable to retrieve license information from license server {:message=>"No Available connections"}
docker-elk-logstash-1       | [2023-12-19T07:33:09,103][ERROR][logstash.monitoring.internalpipelinesource] Failed to fetch X-Pack information from Elasticsearch. This is likely due to failure to reach a live Elasticsearch cluster.

=> ์ธ์ฆ์„œ ๋ฌธ์ œ - elasticsearch/config/certs ๋ฅผ ๋ณต์‚ฌํ•ด์„œ logstash/config/certs๋กœ ๋„ฃ๊ณ  volumn ๋งˆ์šดํŒ…ํ•ด์„œ ํ•ด๊ฒฐํ•˜๊ธฐ
+) logstash ssl ์ด true๋กœ ์„ค์ •๋˜์ง€ ์•Š์•˜๋‚˜ ํ™•์ธ. false๋กœ ๋˜์–ด์•ผ ์ œ๋Œ€๋กœ ๋™์ž‘ํ•จ

jdbc driver - class not found

docker-elk-logstash-1       | [2023-12-19T08:15:49,228][ERROR][logstash.javapipeline    ][postgresql] Pipeline error {
:pipeline_id=>"postgresql", 
:exception=>
#<LogStash::PluginLoadingError: 
#<Java::JavaLang::ClassNotFoundException: org.postgresql.Driver>. Are you sure you've included the correct jdbc driver in :jdbc_driver_library?>, 
  • jdbc driver๊ฐ€ ์•ˆ ๋งž๋Š”๋‹ค ์–ด์ฉŒ๊ตฌ~
  • docker compose์—์„œ volume ๋งˆ์šดํŒ… ๋‹ค์‹œํ•˜๊ธฐ. read only๋กœ ์„ค์ •ํ•˜๋ฉด ์˜ค๋ฅ˜ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ์ฃผ์˜
    # docker-compose.yml
    logstash:
      ...
      volumes:
          ...
        - ./logstash/config/postgresql-42.6.0.jar:/usr/share/logstash/logstash-core/lib/jars/postgresql-42.6.0.jar

jdbc last run permission denied

  • ์•„๋ฌด๋ž˜๋„ read only๋กœ ์„ค์ •๋œ ํด๋” ํ•˜์œ„์— ์žˆ์–ด์„œ ๊ทธ๋Ÿฐ ๊ฒƒ ๊ฐ™์Œ
  • ๋”ฐ๋กœ ํด๋” ๋นผ์„œ ๋งˆ์šดํŠธ ํ•ดํ•ด์ฃผ๊ณ  ํ•ด๊ฒฐ๋จ
        - ./logstash/jdbc_last_run:/usr/share/logstash/jdbc_last_run
    Failed to install template - 400
  • elasticsearch version 7.8 ์ด์ƒ์—์„œ๋ถ€ํ„ฐ index template์„ composable index์— ๋”ฐ๋ผ์„œ ์ง€์ •ํ•˜๋„๋ก ํ•ด์„œ ์•ˆ ๋จน์—ˆ๋‹ค.
  • ์ธ๋ฑ์Šค ํ…œํ”Œ๋ฆฟ ํ˜•์‹ ๋‹ค์‹œ ์งœ์คฌ๋”๋‹ˆ ๋จ
    Failed to install template {:message=>"Got response code '400' contacting Elasticsearch at URL 'http://elasticsearch:9200/_index_template/content-template'", 

 

728x90
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€

'๐Ÿณ Docker & Kubernetes' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Docker] Docker ์ž…๋ฌธ - Docker Image, Container, ๋ฒ„์ „ ๊ด€๋ฆฌ์™€ moniwiki ๋ฐฐํฌ ์˜ˆ์ œ๊นŒ์ง€  (1) 2023.04.27
[Docker] Anaconda/Jupyter notebook์„ dockerfile๋กœ ์„ค์น˜ + ์ปค์Šคํ…€ ์ด๋ฏธ์ง€ ๋งŒ๋“ค๊ธฐ  (0) 2022.08.19
  1. Docker ELK ๋นŒ๋“œํ•˜๊ธฐ
  2. 1. Setup Container
  3. 2. Elasticsearch Container
  4. 3. Kibana Container
  5. 4. Logstash Container
  6. Docker ELK์™€ PostgreSQL ์—ฐ๋™ํ•˜๊ธฐ
  7. 1. PostgreSQL JDBC Driver mount
  8. 2. logstash pipeline configuration ํŒŒ์ผ ์ˆ˜์ •
  9. 3. Upload
  10. Common Issue
  11. No Available connections
  12. jdbc driver - class not found
  13. jdbc last run permission denied
'๐Ÿณ Docker & Kubernetes' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Docker] Docker ์ž…๋ฌธ - Docker Image, Container, ๋ฒ„์ „ ๊ด€๋ฆฌ์™€ moniwiki ๋ฐฐํฌ ์˜ˆ์ œ๊นŒ์ง€
  • [Docker] Anaconda/Jupyter notebook์„ dockerfile๋กœ ์„ค์น˜ + ์ปค์Šคํ…€ ์ด๋ฏธ์ง€ ๋งŒ๋“ค๊ธฐ
darly213
darly213
ํ˜ธ๋ฝํ˜ธ๋ฝํ•˜์ง€ ์•Š์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์–ด๋ณด์ž
ERROR DENYํ˜ธ๋ฝํ˜ธ๋ฝํ•˜์ง€ ์•Š์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์–ด๋ณด์ž
  • darly213
    ERROR DENY
    darly213
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (97)
      • ๐Ÿฌ ML & Data (50)
        • ๐ŸŒŠ Computer Vision (2)
        • ๐Ÿ“ฎ Reinforcement Learning (12)
        • ๐Ÿ“˜ ๋…ผ๋ฌธ & ๋ชจ๋ธ ๋ฆฌ๋ทฐ (8)
        • ๐Ÿฆ„ ๋ผ์ดํŠธ ๋”ฅ๋Ÿฌ๋‹ (3)
        • โ” Q & etc. (5)
        • ๐ŸŽซ ๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹ (20)
      • ๐Ÿฅ Web (21)
        • โšก Back-end | FastAPI (2)
        • โ›… Back-end | Spring (5)
        • โ” Back-end | etc. (9)
        • ๐ŸŽจ Front-end (4)
      • ๐ŸŽผ Project (8)
        • ๐ŸงŠ Monitoring System (8)
      • ๐Ÿˆ Algorithm (0)
      • ๐Ÿ”ฎ CS (2)
      • ๐Ÿณ Docker & Kubernetes (3)
      • ๐ŸŒˆ DEEEEEBUG (2)
      • ๐ŸŒ  etc. (8)
      • ๐Ÿ˜ผ ์‚ฌ๋‹ด (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ๋ฐฉ๋ช…๋ก
    • GitHub
    • Notion
    • LinkedIn
  • ๋งํฌ

    • Github
    • Notion
  • ๊ณต์ง€์‚ฌํ•ญ

    • Contact ME!
  • 250x250
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
darly213
[Docker + ELK] Docker ELK๋ฅผ ์‚ฌ์šฉํ•ด์„œ PostgreSQL DB ๋ชจ๋‹ˆํ„ฐ๋ง ํ•˜๊ธฐ

๊ฐœ์ธ์ •๋ณด

  • ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ
  • ํฌ๋Ÿผ
  • ๋กœ๊ทธ์ธ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.