[PYTHON] Tipps für eine gute Verwendung von Elastic Search

Persönliche Notizen

install ~ setup

Mit Stoff orchestriert

fabfile.py


def install_elastic_search():
    sudo("wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.2.1.deb")
    sudo("dpkg -i elasticsearch-1.2.1.deb")
    sudo("service elasticsearch start")
    run("echo export PATH=\$PATH:/usr/share/elasticsearch/bin/ >> ~/.bashrc")

def es_init():
    //changing permission
    //see document

Zusammenarbeit mit td-agent

Empfangen Sie Protokolle von verschiedenen Servern auf dem Protokollserver, die eine elastische Suche enthalten Es ist gut, den Forest Plug von td-agent (fluentd) zum bedingten Verzweigen oder Extrahieren von Informationen aus Tags zu verwenden.

td-agent.conf



<source>
  type forward
  port 24224
</source>

<match **>
 type forest
 subtype elasticsearch
 <template>
   host localhost
   port 9200
   index_name ${tag_parts[2]}
   type_name ${tag_parts[1]}

   buffer_type memory
   flush_interval 3s
   retry_limit 17
   retry_wait 1.0
   num_threads 1
   flush_at_shutdown true
 </template>
</match>

Dies ist ein wenig flush_interval 3s ist nicht gut. Vielleicht ist es in der Produktion so häufig, dass es die Leistung beeinträchtigt.

Übrigens, wenn Sie das Intervall wie bei Akan mit td-agent auf das Timing einstellen, werden die Daten, die für die elastische Suche verwendet werden sollten, nicht leicht wiedergegeben. Wenn Sie also der Meinung sind, dass sie nur langsam wiedergegeben werden, möchten Sie möglicherweise damit spielen.

Prüfung

Existenztest

fabfile_test.py



def all():
  availability_test("td-agent")
  availability_test("elasticsearch")

def availability_test(name):
  env.warn_only = True

  if name == "td-agent":
    version_checker = name + " --version"
  elif name == "elasticsearch":
    version_checker = "export PATH=$PATH:/usr/share/elasticsearch/bin/ && " + name + " -v"

  if "command not found" in run(version_checker):
    print(name + " hasn't been installed")
  else:
    print(name + " has been installed")
  env.warn_only = False

Wenn Sie jetzt darüber nachdenken, ist es besser, das Stoff-Test-Tool envassert zu verwenden, und ich sollte es jetzt überarbeiten.

envassert ist einfach einzurichten und muss nicht so robust sein wie serverspec. Nein, es ist sehr gut, in rspec-Notation schreiben zu können, und ich denke, Mokka ist auch in JS gut, aber serverspec muss zu viel vorbereiten, und ich möchte die Umgebung für Infrastrukturtests testen. Ich kam und berührte es, aber ich bin ein bisschen schüchtern. Es ist also rubinistisch, aber fiblisch, kein Koch.

Protokollsystemintegrationstest

Schmutzig Schreiben Sie um Python herum

bash



#! /bin/bash
###############################################
# function
###############################################

initializing () {
  if ! expr $before : '[0-9]*' 1> /dev/null 2> /dev/null ; then
    before=0
  fi

  if [ -z $num ]; then
    num=0
  fi

  if [ $num -le $before ]; then
    num=$(($before+1))
  fi
}

buffering () {
  waiting=$*
  for i in `seq 1 $waiting`
  do
    left=$(($waiting - $i))
    echo $left sec
    sleep 1
  done
}

log_into_td_es () {
  fab -u <your_name> -i <your_pem> -H <your_domain> all
  buffering 1
}

diff_check () {
  diff=$(($after - $before))
  if [ $diff -eq 1 ]; then
    echo diff: $diff
  else
    echo not changed
    exit 1
  fi
}

# delete_all () {
#   curl -XDELETE 'http://$*:9200/*' 1> /dev/null 2> /dev/null 
# }




###############################################
# main
###############################################
before=`curl -XGET http://$*:9200/fluentd/_count 2> /dev/null | cut -d "," -f 1 | cut -d ":" -f 2`
echo before_count: $before
initializing
curl -XPUT http://$*:9200/fluentd/info/$num -d '{ "test" : "hoge" }' 1> /dev/null 2> /dev/null
after=`curl -XGET http://$*:9200/fluentd/_count 2> /dev/null | cut -d "," -f 1 | cut -d ":" -f 2`
echo after_count: $after
diff_check

Verwenden Sie Protokolle

Sie sollten elasticsearch-py verwenden. Ich bin Rubyist, aber Python kann in der Infrastruktur verwendet werden. Passend zum Team. Ich bin nicht besonders darüber.

curl -X GET 'http://hoge.com:9200/_index/_type/_search?pretty=true&size=1000&sort=desc'

Sie können es auch überprüfen.

Siehe den Status von ES

Auge grep

curl -X GET 'http://hoge.com:9200/_stats?pretty

Tausende Zeilen statistischer Informationen werden ausgegeben. Normalerweise schaue ich mir die Anzahl der Dokumente (und den Speicher) an. Ich habe bisher noch nicht geschert oder repliziert, also mache ich es später.

Überwachung von Leben und Tod

Diejenigen, die regelmäßig ES-Statistiken erhalten und diese visualisieren.

so ähnlich.

Recommended Posts

Tipps für eine gute Verwendung von Elastic Search
Tipps zur Verwendung von Selen und Headless Chrome in einer CUI-Umgebung
Eine einfache Möglichkeit, mehrere for-Schleifen in Python zu vermeiden
Einführung einer guten Methode zur Verwaltung von DB-Verbindungen in Python
Probleme bei der Verwendung von Elasticsearch als Datenquelle in Redash
[TouchDesigner] Tipps für die Anweisung von Python
Tipps zur Implementierung eines etwas schwierigen Modells oder Trainings mit Keras
Hinweise zur Verwendung von Colab Pro für ca. 2 Monate (gute / schlechte Punkte)
So erstellen Sie mit YOLO in 3 Stunden ein Modell für die Objekterkennung
Windows → Linux Tipps zum Einbringen von Daten
Tipps zum Umgang mit Binärdateien in Python
Eindrücke von der Verwendung von Flask für einen Monat
Ändern Sie die Liste in der for-Anweisung
Vorsichtsmaßnahmen bei Verwendung der for-Anweisung in Pandas
Erstellen eines Markierungsblatts mit Python OpenCV (Tipps zum guten Lesen)
Tipps zur Verwendung von Python + Caffe mit TSUBAME
Scraping von Websites mit JavaScript in Python
Holen Sie sich ein Zeichen für Conoha mit Python
Tipps zum Erstellen großer Anwendungen mit Flask
Zeichnen Sie mit graphviz eine Baumstruktur in Python 3
Hinweise zur Verwendung von Python (Pydev) mit Eclipse
Tipps zum Erstellen kleiner Werkzeuge mit Python
Ein nützlicher Hinweis, wenn Sie Python nach langer Zeit verwenden
Auf der Suche nach einer effizienten Möglichkeit, eine Docker-Datei mit Python mit Gedichten zu schreiben
Ein Memorandum über Methoden, die häufig beim maschinellen Lernen mit Scikit-Learn (für Anfänger) verwendet werden.
Gibt es einen guten Beispielcode für Nosetests?
Tipps zum Erreichen der ATND-API mit Python
Geben Sie einen bestimmten Wert für die Variable im Tensorflow ein
Erstellen Sie eine MIDI-Datei in Python mit pretty_midi
Ich habe einen japanischen Parser auf Japanisch mit Pyparsing geschrieben.
Lassen Sie uns mit SWIG ein Modul für Python erstellen
Zeichnen Sie YouTube-Aufrufe mit Lambda in einer Tabelle auf
Ich möchte mit swagger-codegen in Sekundenschnelle einen Mock-Server für Python-Flask einrichten.
Erstellen Sie mit Selenium einen Datenerfassungsbot in Python
Veröffentlichung eines Webdienstes zum Bewerten handgeschriebener Zeichen mit DeepLearning
Verzeichnisstruktur für die testgetriebene Entwicklung mit pytest in python
Registrieren Sie zum ersten Mal eine Aufgabe in cron
Aufbau einer Trainingsumgebung für Penetrationstests mit Naumachia
Versuchen Sie, in Python nach einem Profil mit einer Million Zeichen zu suchen
Versuchen Sie die Gesichtserkennung in Echtzeit mit einer Webkamera
Ich habe mit Github-Aktionen ein Rad für Windows erstellt
Eine Sammlung von Befehlszeilen, die virtuelle Umgebungen mit Anaconda verwenden
Wenn Sie in der for-Anweisung plt.save möchten
So führen Sie einen Befehl mit einem Unterprozess in Python aus
Es wurde eine Möglichkeit für UEFI behoben, Windows zum Booten zu zwingen
Konstruktionsnotiz für eine maschinelle Lernumgebung von Python
Tipps zum Öffnen einer Szene mit einer fehlerhaften Referenz in einem Skript
Proxy für Python-Pip festlegen (beschrieben in pip.ini)
Ich suche einen einheitlichen Weg, um auf Statusänderungen von Selenium für Python-Elemente zu warten
Lambda in VPC kann keine E-Mails mit Boto3 senden, selbst wenn der VPC-Endpunkt für SES verwendet wird