Как получить все предыдущие данные в соответствии с отметкой времени в кибане, используя скрипт Py? (он переопределяет каждый раз) - PullRequest
0 голосов
/ 03 марта 2020

Ниже приведен код для удаленного подключения сценария python и получения выходных данных.

* сервер, выполняющий запрос, хранится в поисковом индексе elasti c: e2

сервер, который не может выполнить запрос, хранится в elasti c поисковый индекс: e1 *

Теперь, когда я запускаю этот скрипт, я получаю

'SERVERNAME': SERVERNAME, ' отметка времени ': ####,' ONLINE ': "ONLINE"

и только 1 совпадение, недавнее .... не все совпадения (имя сервера) на вкладке обнаружения кибаны

ниже изображение

image showing kibana discovery mode for index having multiple servername but showing only latest one(overriding every time and update)

Ниже python код:

ES_HOST = {"host":  "localhost", "port": ####}

es = Elasticsearch(hosts=[ES_HOST])

filepath=r'c:\remote server\ServerList.csv'
#with open (filepath, 'r') as servers:
with open(filepath, 'r', encoding="ISO-8859-1") as servers:
   for line in servers:
       l = line.split()
       #print(l)
       SERVERNAME = line.rstrip()
       #print(SERVERNAME)

       cnxn = pyodbc.connect(Trusted_Connection='no',
       Driver='{SQL Server}',
       Server=SERVERNAME,
       PORT='####',
       Database='####',
       UID='####',
       PWD='####')
       cursor = cnxn.cursor()
       #print("hureeee")
       #print(SERVERNAME)
       s=cursor.execute("select servername AS gandhiji from ######")
       row = cursor.fetchone()
       if row == None:
            print("There are no results for this query", SERVERNAME)
            e1 = {
                'SERVERNAME': SERVERNAME,
                'timestamp': datetime.utcnow(),
                'OFFLINE': "OFFLINE"
            }
            res1=es.index(index='rep100', id=1, body=e1)
            res1=es.get(index="rep100", id=1)
            print(res1['_source'])

            es.indices.refresh(index="rep100")
            res1=es.search(index="rep100", body={"query": {"match_all": {}}})
       else:
           print(SERVERNAME)
           e2 = {
               'SERVERNAME': SERVERNAME,
               'timestamp': datetime.utcnow(),
               'ONLINE': "ONLINE"
           }
           res2=es.index(index='re100', id=1, body=e2)
           res2=es.get(index="re100", id=1)
           print(res2['_source'])

           es.indices.refresh(index="re100")
           res2=es.search(index="re100", body={"query": {"match_all": {}}})

1 Ответ

0 голосов
/ 04 марта 2020

Я нашел ответ:

1) необходимо изменить

res1=es.index(index='UR_INDEXNAME', id=1, body=e1)

на

res1=es.index(index='UR_INDEXNAME', body=e1)

, если мы укажем id=1 в es.index в для l oop, который запустится снова и заменит существующие данные для предыдущего идентификатора.

2)

Кроме того, для поиска ошибки в соединении используйте try и, кроме как в Python:

QUERY ---->"ВЫБРАТЬ СЕРВЕРНОЕ ИМЯ ИЗ ****" *

A) ПОПРОБОВАТЬ БЛОК ::: даст SERVERNAME С ДЕЙСТВИТЕЛЬНОЕ ПОДКЛЮЧЕНИЕ И ДЕЙСТВИТЕЛЬНЫЙ ВЫХОД ЗАПРОСА (НЕ ВЫПУСКАЕТСЯ НУЛЕМ)

Кроме того, если вы хотите задать имя сервера с нулевыми значениями для успешно подключенных серверов, используйте этот код:

if row == None:
            print("There are no results for this query", SERVERNAME)
            e1 = {
                'SERVERNAME': SERVERNAME,
                'timestamp': datetime.utcnow(),
                'status': "ONLINE SERVER WITH NULL VALUES"
            }
            res1=es.index(index='rep100', id=1, body=e1)

       else:
           print(SERVERNAME)
           e2 = {
               'SERVERNAME': SERVERNAME,
               'timestamp': datetime.utcnow(),
               'STATUS': "ONLINE"
           }
           res2=es.index(index='re100', id=1, body=e2)

B) КРОМЕ pyodb c .Error ::: выдаст СЕРВЕРНОЕ ИМЯ, НЕ УКАЗАННОЕ ДЛЯ ПОДКЛЮЧЕНИЯ

Пожалуйста, обратитесь к этим ссылкам для получения дополнительной информации:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...