Сохранить всю базу данных в elasticsearch с помощью logstash

Я новичок в ELK, сейчас я делаю следующее:

  1. Использование файла configuration.conf для установки jdbc в logstash (ввод> фильтр> вывод)
  2. Для каждого запроса MySQL, имеющего отдельный input{} в файле конфигурации logstash
  3. Или используйте pipilines.yml для отдельного файла конфигурации для запуска в отдельном потоке (т.е. каждый запрос MySQL имеет (хранится в) другой файл конфигурации)
  4. запуск команды logstash -f config.conf (Windows) или просто logstash для конвейера

Как я могу получить все таблицы базы данных с помощью logstash и проиндексировать их в ElatsticSeachза один присест, где индекс для каждой таблицы имеет то же имя, что и имя таблицы в базе данных MySQL (Windows). Могу ли я запустить запрос как показать таблицы, получить список и использовать цикл for, определить .conf для каждой таблицы и сохранить их как файлы .conf? но как мне тогда изменить файл .yml? как файлы .conf и .yml, а не .py?

Образ файла конфигурации Logstash

Logstash не может запускать «показывать таблицы», вам нужно сделать это самостоятельно и соответствующим образом изменить конфигурацию. Вы можете автоматически сгенерировать свою конфигурацию, используя сценарий оболочки, который подключается к вашей БД, запускает show tables и распечатывает ввод jdbc для каждой таблицы.

Val 05.07.2018 09:36

Я не думаю, что это возможно с помощью logstash. Вероятно, вам придется написать свою собственную логику, используя, например, Java API для Elasticsearch, и перебрать все таблицы в базе данных.

Michael Dz 05.07.2018 10:17
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
764
1

Ответы 1

Официальная документация гласит: «Каждый запрос должен иметь отдельный jdbc»: Настройка нескольких операторов SQL

Вот сценарий:

getTableNames.py

import MySQLdb
# custom made class, Generate
from package_name.generate_conf_yml_logstash import Generate
connection = MySQLdb.connect(host = "localhost:3306",
                              user = "root/sa", password = "password", db = "database_name")
cursor = connection.cursor()
cursor.execute("show tables")
tables = cursor.fetchall()
application_name_tables = []
for table in tables:
    application_name_tables.append(table[0])
cursor.close()
connection.close()
Generate.save_files(application_name_tables)

generate_conf_yml_logstash.py

import sys
import os.path


class Generate:
    @staticmethod
    def save_files(tables):

        # save config files
        save_path = "D:\folder_name"
        for table in tables:
            init_f = save_path + "\initial_logstash.conf"
            conf_f_name = table + ".conf"
            save_file = os.path.join(save_path, conf_f_name)
            with open(init_f, "r") as original:  # read only
                data = original.read()
                data = data.replace("table_name", table)
            with open(save_file, "w+") as conf:  # overwrite if exist
                conf.write(data)

        # save yml file
        yml_f_name = "init_logstash_pipelines.yml"
        save_file = os.path.join(save_path, yml_f_name)
        with open(save_file, "r") as original:
            data = original.read()
        with open(save_file, "a+") as yml:  # append
            for table in tables:
                data = data.replace("table", table)
                yml.write(data)
        sys.exit()

Примеры файлов конфигурации и YML:

init_logstash_pipelines.yml

- pipeline.id: table
    path.config: "../config/table.conf"
    pipeline.workers: 1

initial_logstash.conf

input {
  jdbc {
    jdbc_driver_library => "../logstash-6.3.0/logstash-core/lib/jars/mysql-connector-java-5.1.46-bin.jar"
    jdbc_driver_class => "com.mysql.jdbc.Driver"
    jdbc_connection_string => "jdbc:mysql://Mysql:3306/database_name"
    jdbc_user => "root"
    jdbc_password => "password"
    statement => "SELECT * from table_name"
    # schedule => "* * * * *"
  }
}
output {
    stdout { codec => json_lines }
    elasticsearch {
    hosts => ["localhost:9200"]
    index => "table_name"
    # as every table has diff. primary key, change this please
    document_id => "%{pk}"
    }
}

Не стесняйтесь изменять исходную конфигурацию, файлы yml и код в соответствии с. к вашим потребностям

Другие вопросы по теме