blog 1AktualnościDevelopersEnterpriseBlockchain ExplainedWydarzenia i konferencjePrasaBiuletyny

Zapisz się do naszego newslettera.

Adres e-mail

Szanujemy twoją prywatność

HomeBlogDevelopers

Jak monitorować walidator Eth2 i analizować p&L

autor: Coogan Brennan 15 stycznia 2021 r. opublikowany 15 stycznia 2021 r

Moja droga do zostania walidatorem w Ethereum 2 0 Część 3


Jeśli jesteś nowy w tej serii, jak uruchomić własny walidator Eth2, koniecznie zapoznaj się z częścią 1 i częścią 2. Wszyscy powinniście sprawdzać Bena Edgingtona Biuletyn Eth2.News flub istotne aktualizacje, poprawki błędów i wiadomości na temat nadchodzącej mapy drogowej. Nasza baza wiedzy Eth2 jest pomocna, jeśli potrzebujesz więcej informacji na temat kluczowych terminów, faz i produktów ConsenSys Eth2.

Intro 

Minęło półtora miesiąca, odkąd rozpoczęła się geneza łańcucha Ethereum 2.0 Beacon. Już 2515170 ETH zostało postawionych (około 2,9 miliarda dolarów przy obecnych stawkach rynkowych) z 61 561 unikalnymi walidatorami, a kolejne 16687 czekają w kolejce. Pomimo ogromnego zainteresowania obstawianiem, było to właściwie półtora miesiąca spokojnego: nie było większych zakłóceń, tylko kilka cięć i udział walidatora w 98. percentylu przez większość czasu. Teraz jest dobry moment, aby odetchnąć i podsumować to, co zrobiliśmy do tej pory. 

W tym poście zajmę się monitorowaniem i analizą finansową Twojego walidatora Eth2. Przedstawię przegląd informacji o tym, jak uzyskać dostęp do metryk Teku, skonfigurować powiadomienia Beaconcha.in i jak przesyłać zapytania do węzła. Dzielę się również moim obecnym P.&Podział L. W ostatniej części tej serii omówię, jak bezpiecznie i (miejmy nadzieję) pomyślnie przeprowadzić migrację węzła Teku z jednego serwera na drugi.

Monitorowanie

W tej sekcji pokażę, jak czytać metryki węzła walidatora. Uruchomienie walidatora Ethereum 2.0 uruchamia infrastrukturę dla systemu rozproszonego. Kluczową częścią utrzymania infrastruktury jest możliwość zobaczenia, co się dzieje. Na szczęście Teku jest wyposażony w świetny zestaw narzędzi do monitorowania z flagą „–metrics-enabled” w naszym poleceniu startowym, podkreśloną poniżej:

ExecStart = / home / ubuntu / teku-20.11.1 / bin / teku –network = mainnet<silny> silny> <silny>–eth1-endpoint = INFURA_ETH1_HTTP_ENDPOINT_GOES_HERE silny> <silny>–validator-keys = / home / ubuntu / validator_key_info / KEYSTORE-M_123456_789_ABCD.json: /home/ubuntu/validator_key_info/validator_keys/KEYSTORE-M_123456_789_ABCD.txt silny> –rest-api-enabled = true –rest-api-docs-enabled = true –metrics-enabled –validators-keystore-Locking-enabled = false <silny>–data-base-path = / var / lib / tekustrong>Język kodu: HTML, XML (xml)

Musimy wykonać kilka kroków, zanim będziemy mogli odczytać dane.

Dla tych, którzy nie mają klienta Teku: Po pierwsze, dlaczego? Po drugie, możesz zobaczyć minimalne metryki dostarczone przez wszystkich klientów w Specyfikacje Ethereum 2.0 tutaj.

Instalowanie Prometheusa

Najpierw musimy zainstalować Prometeusz, program monitorujący typu open source, oraz Grafana, aplikacja internetowa do analizy i interaktywnej wizualizacji typu open source. Prometheus pobiera dane, a Grafana je wyświetla.

W wierszu poleceń Ubuntu pobierz najnowszą stabilną wersję Prometheusa:

curl -JLO <a href ="https://github.com/prometheus/prometheus/releases/download/v2.23.0/prometheus-2.23.0.linux-amd64.tar.gz">https://github.com/prometheus/prometheus/releases/download/v2.23.0/prometheus-2.23.0.linux-amd64.tar.gza>Język kodu: HTML, XML (xml)

Rozpakuj plik w następujący sposób:

tar -zxvf <a href ="https://github.com/prometheus/prometheus/releases/download/v2.23.0/prometheus-2.23.0.linux-amd64.tar.gz">prometheus-2.23.0.linux-amd64.tar.gza>Język kodu: HTML, XML (xml)

Przenieś plik binarny, aby był dostępny z wiersza poleceń:

CD prometheus-2.23.0 Język kodu: CSS (css) sudo mv prometheus promtool / usr / local / bin /

Sprawdź, czy został poprawnie zainstalowany:

prometheus –version promtool –version

Utwórz plik konfiguracyjny prometeusza YML:

sudo nano prometheus.yml Język kodu: CSS (css)

Wklej te parametry do pliku konfiguracyjnego:

global: scrape_interval: 15s scrape_configs: – nazwa_zadania: "prometeusz" static_configs: – target: ["lokalny host: 9090"] – Nazwa pracy: "teku-dev" scrape_timeout: 10 s ścieżka_metryki: / schemat metryk: http static_configs: – cele: ["localhost: 8008"] Język kodu: PHP (php)

To nakazuje Prometheusowi odpytywanie twojego węzła Teku co 10 sekund na porcie 8008. Naciśnij Command-X i naciśnij Y, aby zapisać bufor

Teraz stwórzmy katalog, w którym umieścimy nasz plik konfiguracyjny Prometheusa:

sudo mkdir / etc / prometheus sudo mv prometheus.yml /etc/prometheus/prometheus.yml

Zamierzamy utworzyć jeszcze jeden katalog dla innych plików Prometheusa i przenieść moduły konsoli i biblioteki console_libraries do / etc / prometheus

sudo mkdir / var / lib / prometheus sudo mv consoles / console_libraries / / etc / prometheus / Code language: JavaScript (javascript)

Stworzymy użytkownika prometeusza do obsługi usługi systemowej, tak jak to zrobiliśmy dla Teku (Przeczytaj więcej o tym, jak dostęp użytkowników oparty na rolach jest najlepszą praktyką w zakresie bezpieczeństwa serwera) i dać mu dostęp do odpowiednich plików:

sudo useradd –no-create-home –shell / bin / false prometheus sudo chown -R prometheus: prometheus / var / lib / prometheus sudo chown -R prometheus: prometheus / etc / prometheus sudo chown -R prometheus: prometheus / usr / local / bin / Język kodu: JavaScript (javascript)

Na koniec utwórz usługę systemd, która może działać w tle i zrestartować się, jeśli zawiedzie:

sudo nano /etc/systemd/system/prometheus.service

W tym pliku (który powinien być pusty) zamierzamy umieścić serię poleceń, które systemd będzie wykonywał po uruchomieniu usługi. Skopiuj do edytora tekstu:

[Jednostka] Opis = Prometheus Wants = network-online.target After = network-online.target [Service] Type = simple User = prometheus Group = prometheus Restart = zawsze RestartSec = 5 ExecStart = / usr / local / bin / prometheus \ – -config.file = / etc / prometheus / prometheus.yml \ –storage.tsdb.path = / var / lib / prometheus \ –web.console.templates = / etc / prometheus / consoles \ –web.console. libraries = / etc / prometheus / console_libraries \ –web.listen-address = 0.0.0.0: 9090 \ [Install] WantedBy = multi-user.targetCode język: JavaScript (javascript)

Wpisz polecenie-X, a następnie „Y”, aby zapisać zmiany

Musimy zrestartować systemctl, aby go zaktualizować:

sudo systemctl daemon-reload

Uruchom usługę:

sudo systemctl start prometheus

Sprawdź, czy działa prawidłowo:

sudo systemctl status prometheus

Jeśli zauważysz jakieś błędy, uzyskaj więcej informacji, uruchamiając:

sudo journalctl -f -u prometheus.serviceJęzyk kodu: CSS (css)

Możesz zatrzymać usługę Prometheus, uruchamiając:

sudo systemctl stop prometheus

Zainstaluj Grafana

Zamierzamy użyć menedżera pakietów APT dla systemu Linux, aby zainstalować Grafana. Pozwoli nam to zaoszczędzić sporo pracy i da nam to, czego potrzebujemy. Postępujemy zgodnie z instrukcjami ze strony instalacji Grafana:

sudo apt-get install -y apt-transport-https sudo apt-get install -y właściwości-oprogramowania-common wget wget -q -O – https://packages.grafana.com/gpg.key | sudo apt-key add -Code language: JavaScript (javascript)

Dodajemy stabilne repozytorium Grafana do aktualizacji:

Echo "deb https://packages.grafana.com/oss/deb stabilny main" | sudo tee -a /etc/apt/sources.list.d/grafana.listJęzyk kodu: PHP (php)

Następnie uruchamiamy APT:

sudo apt-get update sudo apt-get install grafanaCode język: JavaScript (javascript)

Pakiet konfiguruje dla nas usługę systemd (w tym grafanę użytkownika), więc musimy tylko uruchomić:

usługa sudo grafana-server start usługi sudo stan grafana-server sudo update-rc.d grafana-server defaults Język kodu: CSS (css)

Tunelowanie SSH

Grafana tworzy bardzo zgrabny pulpit nawigacyjny, na którym możemy przeglądać nasze metryki. Ten pulpit nawigacyjny jest zwykle dostępny w przeglądarce, ale ponieważ używamy wersji serwerowej Ubuntu 20.04, wszystko to jest dostępne w wierszu poleceń. Jak więc uzyskać dostęp do Grafana?

Wejdź do tunelowania SSH. Jest to ten sam protokół, którego używamy do uzyskiwania dostępu do AWS z naszego wiersza poleceń, ale zamierzamy go skonfigurować, aby utworzyć port lustrzany na naszym komputerze lokalnym, który łączy się z określonym portem w naszej instancji AWS. W ten sposób, gdy wywołujemy port lokalnie, powiedzmy, otwierając przeglądarkę http: // localhost: 3000, w rzeczywistości patrzymy na port 3000 w naszej instancji AWS.

Aby zrobić to poprawnie, będziesz potrzebować klucza SSH dla AWS i informacji o AWS IP. Musisz też wiedzieć, z którym portem chcesz się połączyć. W tym przypadku wiemy, że nasza instancja Grafana działa na porcie 3000, więc instrukcje wiersza polecenia będą miały następującą strukturę:

ssh -N -L 3000: localhost: 3000 -i "PATH_TO_AWS_KEYPAIR.pem"[email protected]_IDENTIFIER.compute-ZONE.amazonaws.comJęzyk kodu: CSS (css)

To pozwala nam przejść do http: // localhost: 3000 na naszej lokalnej maszynie i zobacz nasz pulpit graficzny Grafana. Ale jeszcze go nie mamy, więc musimy wykonać następujące czynności:

Dodaj Prometheus jako źródło danych:

Idź do „Dodaj nowe źródło danych”

Kliknij „Prometheus” z menu rozwijanego

Kliknij „Zapisz i przetestuj”

Kliknij + w menu po lewej stronie i wybierz „Importuj panel”

Dodaj identyfikator Teku Grafana: 13457

I bada-bing! Dysponujemy dashboardem, widocznym w zaciszu własnej przeglądarki:

Beaconcha.in App

Pulpit graficzny Grafana jest doskonały, a Prometheus przechowuje dla nas informacje. Istnieją jednak inne opcje sprawdzania statusu walidatora.

Używałem Aplikacja mobilna Beaconcha.in Dashboard na Androida. To prosty interfejs, który jest w porządku, ponieważ nie jest to moja główna usługa monitorowania. Pozwala mi szybko zerknąć na telefon, aby sprawdzić stan walidatora i zapewnia powiadomienia, jeśli coś jest nie tak z walidatorem.

Wpisujesz adres walidatora, który chcesz obejrzeć i to wszystko! Ponownie, nie jest to intensywne monitorowanie (to zapewnia pasza Grafana Teku). Ale jest w porządku jako usługa dodatkowa i binarny „czy walidator działa, czy nie”:

Zapytanie do Node

Innym sposobem „monitorowania” naszego klienta walidatora Ethereum jest wysłanie do niego zapytania! Podobnie jak klient Ethereum 1.0, nasz klient walidatora Ethereum przechowuje i utrzymuje stan świata. Jest znacznie mniejszy w porównaniu do Ethereum 1.0, ale nadal są danymi w łańcuchu przechowywanymi i obsługiwanymi przez klienta walidatora. 

Są to te same dane, które są używane przez przepływ pracy Prometheus / Grafana. Po prostu zbliżamy się do metalu (praktycznie mówiąc), samodzielnie wysyłając zapytanie do węzła. Oto próbka dostępnych danych (pełna lista tutaj):

  • Informacje o łańcuchu sygnałów nawigacyjnych (blok genezy, nagłówki bloków i katalog główny itp.)
  • Informacje o walidatorze (lista walidatorów, saldo walidatora, obowiązki walidatora itp.)
  • Informacje o węźle (ogólny stan, lista partnerów itp.)

kędzior

Pierwszym sposobem jest użycie wiersza poleceń. Kiedy zaczynaliśmy Teku, dodaliśmy flagę –rest-api-enabled = true. Otwiera to punkt końcowy API na domyślnym porcie 5051 (możesz określić inny port, używając flagi –rest-api-port =). Możesz dwukrotnie sprawdzić, czy port jest otwarty, uruchamiając sudo lsof -i -P -n | grep SŁUCHAJ.

Gdy potwierdzisz, że port 5051 jest otwarty przez Teku, użyjemy kędzior wysyłać ODPOCZYNEK wywołania punktu końcowego Teku API pod adresem http: // localhost: 5051. Na przykład, oto sposób, w jaki sprawdzamy saldo najskuteczniejszego walidatora (według Beaconcha.in):

curl -X GET "http: // localhost: 5051 / eth / v1 / beacon / states / head / validator_balances id = 0x8538bbc2bdd5310bcc71b1461d48704e36dacd106fa19bb15c918e69adbcc360e5bf98ebc3f558eb4daefe6d6c26dda5"Język kodu: PHP (php)

Oto odpowiedź, którą otrzymałem w połowie stycznia 2021 r. (W języku Gwei): 

{"dane": [{"indeks":"4966","saldo":"32607646851"}]} Język kodu: JSON / JSON z komentarzami (json)

Wypróbuj dowolną z metod stronę dokumentacji Teku API używając formatu na dole tej strony:

curl -X [REST_METHOD] „API_CALL_IN_QUOTES” Język kodu: CSS (css)

Swagger UI

Istnieje podstawowy graficzny interfejs użytkownika dla wywołań API, które Teku zapewnia, gdy flaga –rest-api-docs-enabled = true jest dodawana w poleceniach startowych. Jest zbudowany na swagger-ui Domyślnie znajduje się na porcie 5051 i możemy uzyskać do niego dostęp przez tunelowanie SSH. Wykonaj te same kroki tunelowania SSH z góry, ale z portem 5051:

ssh -N -L 5051: localhost: 5051 -i "PATH_TO_AWS_KEYPAIR.pem" [email protected]_IDENTIFIER.compute-ZONE.amazonaws.comJęzyk kodu: CSS (css)

Z przeglądarki na naszym komputerze możemy przejść do http: // localhost: 5051 / swagger-ui, który wygląda tak na moim komputerze:

Stan świata i konsensus to coś, co pojawia się we wszystkich publicznych łańcuchach bloków. Oznacza to, że Ethereum 2.0 osiąga konsensus wszystkich walidatorów przechowujących i aktualizujących informacje. To trochę dziwaczne, ale przyjrzenie się lokalnemu stanowi polega na zajrzeniu do pojedynczego panelu o wiele większej struktury. Podzbiór fraktala stale się aktualizuje i wyłania się w coś nowego. Spróbuj!

Analiza finansowa

W moim pierwszym poście nakreśliłem podstawowe wymagania materiałowe:

  • Trzyletnie zobowiązanie do obstawienia 32 ETH i utrzymania węzła walidatora
  • 32 ETH (plus <1 ETH na koszty gazu)
  • 717,12 USD (trzyletnia cena wystąpienia zarezerwowanego dla instancji m5.xlarge) + 120 (roczny koszt 100 GB pamięci, zakładając ostrożnie prawie pełną pojemność) = 837,12 USD zapłacone w ciągu roku firmie AWS
  • Rozszerzenie MetaMask (Darmowa instalacja
  • Konto Infura (poziom darmowy)

Koszty AWS obejmowały trzyletni okres blokady, ale wspomniałem później, że nie byłem na to gotowy. I cieszę się, że tego nie zrobiłam! Za chwilę zobaczysz, dlaczego, ale oto moje podstawowe zestawienie kosztów za 31 grudnia 2020 r .:

Miesięczne koszty AWS

  • Transfer danych: 8,52 USD
  • Serwer: 142,85 USD
  • Przechowywanie: 72,50 USD
  • Razem: 223,87 USD

Nagrody w walidatorze Eth2 

  • Bloki: 5
  • Atesty: ~ 6,803
  • Nagrody ETH: 0,420097728 (485,83 USD)

Jak zapewne widać, zysk w wysokości 261,96 USD nie jest świetnym spreadem dla jednego walidatora. Jest kilka opcji: Jest to stosunkowo stabilny koszt, więc mógłbym postawić kolejne 32 ETH. Lepszą opcją może być zmiana używanego przeze mnie VPS, o którym wspomniałem w moim pierwszym poście, a właściwie:

Początkowo byłem przekonany, że AWS to najlepsza platforma wirtualna i właśnie z tej usługi będę korzystać w tym i następnym poście. Jednak po przejściu przez cały proces zdałem sobie sprawę, że AWS może być przesadą dla indywidualnego programisty. Prawdziwą siłą AWS wydaje się być jego zdolność do dynamicznego skalowania w górę w celu zaspokojenia popytu, co wiąże się z dodatkowymi kosztami. Ma to sens ekonomiczny w przypadku dużego projektu na poziomie przedsiębiorstwa, ale indywidualne bieżące wymagania klienta Ethereum 2.0 nie wymagają takiego rygoru.

Zamierzam kontynuować korzystanie z AWS, ale rozważam też możliwość uruchomienia instancji w Digital Ocean, co może być bardziej odpowiednie dla indywidualnego programisty. 

Myślę, że mogę uzyskać znacznie większy zysk z biegania na Digital Ocean i nadal nie odbić się na wydajności mojego walidatora. Znajomy uruchamia instancję walidatora na znacznie mniejszym VPS, który kosztuje o rząd wielkości mniej i mamy taką samą wydajność walidatora. 

Wspaniale jest eksperymentować z AWS i nie żałuję, że mam taką możliwość, gdyby coś poszło bokiem w łańcuchu beacon. Jednak myślę, że tak naprawdę wspaniale, że programiści Eth 2 wywiązują się z obietnicy udostępnienia walidacji w domowych sieciach i konfiguracjach! 

Obecne modulacje cen również utrudniają analizę finansową, ponieważ koszty serwera są ustalane w USD, ale nagrody są zmienne. W dłuższej perspektywie jestem przekonany, że moje nagrody z walidatora wzrosną. To sprawia, że ​​koszty i korzyści są trudne!

W ostatniej części tej serii omówię, jak bezpiecznie i (miejmy nadzieję) pomyślnie przeprowadzić migrację węzła Teku z jednego serwera na drugi. Oczywiście głównym problemem są cięcia. Wygląda na to, że zdecydowana większość cięć, które miały miejsce, jest z powodu tego właśnie problemu. Zobaczymy jak to będzie…

ProgramiściEthereum 2.0Ethereum ClientNewsletterZapisz się do naszego newslettera, aby otrzymywać najnowsze wiadomości o Ethereum, rozwiązania dla przedsiębiorstw, zasoby dla programistów i nie tylko.

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me