Figyelemfelhívás
Ez a cikk a CentOS-ra, egy olyan Linux-disztribúcióra hivatkozik, amely közel áll az élettartam (EOL) állapotához. Fontolja meg a használatát, és ennek megfelelően tervezze meg. További információ: CentOS End Of Life útmutató.
Ez a példaforgatókönyv bemutatja, hogyan futtathatja az Apache NiFi-t az Azure-ban. A NiFi az adatok feldolgozására és terjesztésére szolgáló rendszert biztosít.
Az Apache®, az Apache NiFi® és a NiFi® az Apache Software Foundation bejegyzett védjegye vagy védjegye a Egyesült Államok és/vagy más országokban. Az Apache Software Foundation nem támogatja ezeket a jeleket.
Architektúra
Töltse le az architektúra Visio-fájlját.
Munkafolyamat
A NiFi-alkalmazás NiFi-fürtcsomópontokban lévő virtuális gépeken fut. A virtuális gépek egy virtuálisgép-méretezési csoportban találhatók, amelyet a konfiguráció a rendelkezésre állási zónák között helyez üzembe.
Az Apache ZooKeeper egy külön fürtben lévő virtuális gépeken fut. A NiFi a ZooKeeper-fürtöt használja a következő célokra:
- Fürtkoordinátor-csomópont kiválasztása
- Az adatáramlás koordinálása
Azure-alkalmazás Gateway 7. rétegbeli terheléselosztást biztosít a NiFi-csomópontokon futó felhasználói felület számára.
A Monitor és a Log Analytics szolgáltatása a NiFi rendszer telemetriai adatainak gyűjtésére, elemzésére és kezelésére szolgál. A telemetriai adatok közé tartoznak a NiFi rendszernaplók, a rendszerállapot-metrikák és a teljesítménymetrikák.
Az Azure Key Vault biztonságosan tárolja a NiFi-fürt tanúsítványait és kulcsait.
A Microsoft Entra ID egyszeri bejelentkezést (SSO) és többtényezős hitelesítést biztosít.
Összetevők
- A NiFi az adatok feldolgozására és terjesztésére szolgáló rendszert biztosít.
- A ZooKeeper egy nyílt forráskódú kiszolgáló, amely elosztott rendszereket kezel.
- A Virtuális gépek szolgáltatásként (IaaS) nyújtott infrastruktúra-ajánlat. A virtuális gépek használatával igény szerinti, méretezhető számítási erőforrásokat helyezhet üzembe. A virtuális gépek biztosítják a virtualizálás rugalmasságát, de kiküszöbölik a fizikai hardverek karbantartási igényeit.
- Az Azure-beli virtuálisgép-méretezési csoportok lehetővé teszik a terheléselosztásos virtuális gépek egy csoportjának kezelését. A készletben lévő virtuálisgép-példányok száma automatikusan növekedhet vagy csökkenhet az igényeknek vagy egy meghatározott ütemezésnek megfelelően.
- A rendelkezésre állási zónák egyedi fizikai helyek egy Azure-régión belül. Ezek a magas rendelkezésre állású ajánlatok védik az alkalmazásokat és az adatokat az adatközpont hibáitól.
- Az Application Gateway egy terheléselosztó, amely kezeli a webalkalmazások felé irányuló forgalmat.
- A Monitor adatokat gyűjt és elemez a környezetekről és az Azure-erőforrásokról. Ezek az adatok alkalmazástelemetria, például teljesítménymetrikák és tevékenységnaplók. További információkért tekintse meg a jelen cikk későbbi, figyelési szempontjait .
- A Log Analytics egy Azure Portal-eszköz, amely lekérdezéseket futtat a Naplóadatok monitorozása szolgáltatásban. A Log Analytics emellett a lekérdezési eredmények diagramkészítéséhez és statisztikai elemzéséhez is kínál funkciókat.
- Az Azure DevOps Services szolgáltatásokat, eszközöket és környezeteket biztosít a kódolási projektek és üzembe helyezések kezeléséhez.
- A Key Vault biztonságosan tárolja és szabályozza a rendszer titkos kulcsainak elérését, például API-kulcsokat, jelszavakat, tanúsítványokat és titkosítási kulcsokat.
- A Microsoft Entra ID egy felhőalapú identitásszolgáltatás, amely szabályozza az Azure-hoz és más felhőalkalmazásokhoz való hozzáférést.
Alternatívák
- Az Azure Data Factory alternatívát kínál erre a megoldásra.
- A Key Vault helyett egy hasonló szolgáltatással tárolhatja a rendszer titkos kulcsait.
- Apache Airflow. Nézze meg , miben különbözik az Airflow és a NiFi.
- Egy támogatott vállalati NiFi alternatívát is használhat, például a Cloudera Apache NiFi-t. A Cloudera-ajánlat az Azure Marketplace-en keresztül érhető el.
Forgatókönyv részletei
Ebben a forgatókönyvben a NiFi fürtözött konfigurációban fut az Azure-beli virtuális gépeken egy méretezési csoportban. A cikk ajánlásainak többsége azonban azokra a forgatókönyvekre is vonatkozik, amelyek egyetlen virtuális gépen (virtuális gépen) futtatják a NiFi-t egypéldányos módban. A cikkben ismertetett ajánlott eljárások skálázható, magas rendelkezésre állású és biztonságos üzembe helyezést mutatnak be.
Lehetséges használati esetek
A NiFi jól működik az adatok áthelyezéséhez és az adatáramlás kezeléséhez:
- Csatlakozás leválasztott rendszerek a felhőben
- Adatok áthelyezése az Azure Storage-ban és más adattárakban
- Peremhálózati és hibridfelhős alkalmazások integrálása az Azure IoT, az Azure Stack és az Azure Kubernetes Service (AKS) használatával
Ennek eredményeképpen ez a megoldás számos területre vonatkozik:
A modern adattárházak (MDW-k) nagy méretekben egyesítik a strukturált és strukturálatlan adatokat. Különböző forrásokból, fogadókból és formátumokból származó adatokat gyűjtenek és tárolnak. A NiFi az alábbi okokból kiválóan alkalmas az adatok Azure-alapú MDW-kbe való betöltésére:
- Több mint 200 processzor áll rendelkezésre az adatok olvasásához, írásához és kezeléséhez.
- A rendszer olyan tárolási szolgáltatásokat támogat, mint az Azure Blob Storage, az Azure Data Lake Storage, az Azure Event Hubs, az Azure Queue Storage, az Azure Cosmos DB és az Azure Synapse Analytics.
- A robusztus adatelőtűnési képességek lehetővé teszik a megfelelő megoldások implementálását. Az Azure Monitor Log Analytics szolgáltatásában az adatok eredetének rögzítéséről a jelen cikk későbbi, jelentéskészítési szempontjait ismertető cikkben olvashat.
A NiFi önállóan futtatható kis méretű eszközökön. Ilyen esetekben a NiFi lehetővé teszi a peremhálózati adatok feldolgozását és az adatok nagyobb NiFi-példányokra vagy -fürtökre való áthelyezését a felhőben. A NiFi segít a peremhálózati adatok mozgásban történő szűrésében, átalakításában és rangsorolásában, biztosítva a megbízható és hatékony adatfolyamokat.
Az ipari IoT-megoldások (IIoT) kezelik az adatok áramlását a peremhálózatról az adatközpontba. Ez a folyamat az ipari vezérlőrendszerek és berendezések adatgyűjtésével kezdődik. Az adatok ezután az adatkezelési megoldásokra és az MDW-kre kerülnek. A NiFi olyan képességeket kínál, amelyek kiválóan alkalmasak az adatbeszerzésre és az adatáthelyezésre:
- Edge-adatfeldolgozási funkciók
- Az IoT-átjárók és -eszközök által használt protokollok támogatása
- Integráció az Event Hubs- és Storage-szolgáltatásokkal
Az IoT-alkalmazások a prediktív karbantartás és az ellátási lánc kezelése területén kihasználhatják ezt a funkciót.
Ajánlások
A megoldás használatakor tartsa szem előtt az alábbi szempontokat:
A NiFi ajánlott verziói
Ha ezt a megoldást az Azure-ban futtatja, javasoljuk, hogy a NiFi 1.13.2+-os verzióját használja. Futtathat más verziókat is, de előfordulhat, hogy az útmutatóban szereplő konfigurációktól eltérő konfigurációt igényelnek.
A NiFi Azure-beli virtuális gépekre való telepítéséhez a legjobb, ha letölti a NiFi letöltési oldaláról a kényelmes bináris fájlokat. A bináris fájlokat a forráskódból is létrehozhatja.
A ZooKeeper ajánlott verziói
Ebben a példában a ZooKeeper 3.5.5-ös és újabb vagy 3.6.x-ös verzióit javasoljuk.
A ZooKeepert az Azure-beli virtuális gépekre hivatalos bináris fájlok vagy forráskód használatával telepítheti. Mindkettő elérhető az Apache ZooKeeper kiadási oldalán.
Megfontolások
Ezek a szempontok implementálják az Azure Well-Architected Framework alappilléreit, amely a számítási feladatok minőségének javítására használható vezérelvek halmaza. További információ: Microsoft Azure Well-Architected Framework.
A NiFi konfigurálásáról további információt az Apache NiFi System Rendszergazda istrator útmutatójában talál. A megoldás megvalósításakor vegye figyelembe ezeket a szempontokat is.
Költségoptimalizálás
A költségoptimalizálás a szükségtelen kiadások csökkentésének és a működési hatékonyság javításának módjairól szól. További információ: A költségoptimalizálási pillér áttekintése.
- Az Azure Díjkalkulátor használatával megbecsüli az architektúra erőforrásainak költségeit.
- Az egyéni riasztási megoldás kivételével az architektúra összes szolgáltatását magában foglaló becsléshez tekintse meg ezt a minta költségprofilt.
A virtuális gépekkel kapcsolatos szempontok
A következő szakaszok részletesen ismertetik a NiFi virtuális gépek konfigurálásának módját:
Virtuális gép mérete
Ez a táblázat az ajánlott virtuálisgép-méreteket sorolja fel. A legtöbb általános célú adatfolyam esetében a Standard_D16s_v3 a legjobb. A NiFi minden adatfolyamának azonban különböző követelményei vannak. Tesztelje a folyamatot, és szükség szerint méretezze át a folyamatot a folyamat tényleges követelményei alapján.
Fontolja meg a gyorsított hálózatkezelés engedélyezését a virtuális gépeken a hálózati teljesítmény növelése érdekében. További információ: Hálózatkezelés azure-beli virtuálisgép-méretezési csoportokhoz.
Virtuális gép mérete | vCPU | Memória GB-ban | A nem gyorsítótárazott adatlemez átviteli sebességének maximális száma másodpercenkénti I/O-műveletekben (IOPS) MBps-enként* | Hálózati adapterek maximális száma (hálózati adapterek) / Várható hálózati sávszélesség (Mbps) |
---|---|---|---|---|
Standard_D8s_v3 | 8 | 32 | 12,800/192 | 4/4,000 |
Standard_D16s_v3** | 16 | 64 | 25,600/384 | 8/8,000 |
Standard_D32s_v3 | 32 | 128 | 51,200/768 | 8/16,000 |
Standard_M16m | 16 | 437.5 | 10,000/250 | 8/4,000 |
* Tiltsa le az adatlemez írási gyorsítótárazását a NiFi-csomópontokon használt összes adatlemez esetében.
** Ezt a termékváltozatot a legtöbb általános célú adatfolyam esetében javasoljuk. A hasonló vCPU-val és memóriakonfigurációkkal rendelkező Azure-beli virtuálisgép-termékváltozatoknak is megfelelőnek kell lenniük.
Virtuálisgép-operációs rendszer (OS)
Javasoljuk, hogy futtassa a NiFi-t az Azure-ban a következő vendég operációs rendszerek egyikén:
- Ubuntu 18.04 LTS vagy újabb
- CentOS 7.9
Az adatfolyam adott követelményeinek való megfelelés érdekében fontos, hogy több operációsrendszer-szintű beállítást módosítsa, többek között az alábbiakat:
- Elágazásos folyamatok maximális száma.
- Maximális fájlleírók.
- A hozzáférési idő,
atime
.
Miután az operációs rendszert a várt használati esetnek megfelelően módosította, az Azure VM Image Builder használatával kodifikálnia kell a hangolt rendszerképek generációját. A NiFi-re vonatkozó útmutatásért tekintse meg az Apache NiFi System Rendszergazda istrator útmutatójának konfigurációs ajánlott eljárásait.
Tárolás
A különböző NiFi-adattárakat az adatlemezeken tárolja, és nem az operációsrendszer-lemezen három fő okból:
- A folyamatok gyakran magas lemezteljesítmény-követelményekkel rendelkeznek, amelyeket egyetlen lemez nem tud teljesíteni.
- A legjobb, ha elkülöníti a NiFi lemezműveleteket az operációsrendszer-lemezműveletektől.
- Az adattáraknak nem szabad ideiglenes tárolóban lenniük.
Az alábbi szakaszok az adatlemezek konfigurálásának irányelveit ismertetik. Ezek az irányelvek az Azure-ra vonatkoznak. Az adattárak konfigurálásáról további információt az Apache NiFi System Rendszergazda istrator útmutatójában található Állapotkezelés című témakörben talál.
Adatlemez típusa és mérete
Vegye figyelembe ezeket a tényezőket, amikor konfigurálja a NiFi adatlemezeit:
- Lemeztípus
- Lemezméret
- Lemezek teljes száma
Feljegyzés
A lemeztípusokra, a méretezésre és a díjszabásra vonatkozó naprakész információkért lásd : Bevezetés az Azure által felügyelt lemezek használatába.
Az alábbi táblázat az Azure-ban jelenleg elérhető felügyelt lemezek típusait mutatja be. A NiFi bármely ilyen lemeztípussal használható. A nagy átviteli sebességű adatfolyamok esetében azonban a Prémium SSD-t javasoljuk.
Ultralemez (NVM Express (NVMe)) | Prémium SSD | Standard SSD | Standard HDD | |
---|---|---|---|---|
Lemez típusa | SSD | SSD | SSD | HDD |
Maximális lemezméret | 65 536 GB | 32 767 GB | 32 767 GB | 32 767 GB |
Maximális átviteli sebesség | 2000 MiB/s | 900 MiB/s | 750 MiB/s | 500 MiB/s |
Maximális IOPS | 160 000 | 20000 | 6000 | 2000 |
Az adatfolyam átviteli sebességének növeléséhez használjon legalább három adatlemezt. A lemezeken lévő adattárak konfigurálásával kapcsolatos ajánlott eljárásokért lásd a jelen cikk későbbi, adattár-konfigurációját ismertető cikket.
Az alábbi táblázat felsorolja az egyes lemezméretek és -típusok megfelelő méretét és átviteli sebességét.
Standard HDD S15 | Standard HDD S20 | Standard HDD S30 | Standard SSD S15 | Standard SSD S20 | Standard SSD S30 | Prémium SSD P15 | Prémium SSD P20 | Prémium SSD P30 | |
---|---|---|---|---|---|---|---|---|---|
Lemezméret GB-ban | 256 | 512 | 1,024 | 256 | 512 | 1,024 | 256 | 512 | 1,024 |
IOPS lemezenként | Legfeljebb 500 | Legfeljebb 500 | Legfeljebb 500 | Legfeljebb 500 | Legfeljebb 500 | Legfeljebb 500 | 1100 | 2300 | 5000 |
Átviteli sebesség lemezenként | Legfeljebb 60 MBps | Legfeljebb 60 MBps | Legfeljebb 60 MBps | Legfeljebb 60 MBps | Legfeljebb 60 MBps | Legfeljebb 60 MBps | 125 MBps | 150 MBps | 200 MBps |
Ha a rendszer eléri a virtuális gépek korlátait, előfordulhat, hogy több lemez hozzáadása nem növeli az átviteli sebességet:
- Az IOPS és az átviteli sebesség korlátozása a lemez méretétől függ.
- A kiválasztott virtuálisgép-méret az összes adatlemezen IOPS-t és átviteli sebességkorlátokat helyez el a virtuális gép számára.
A virtuálisgép-szintű lemez átviteli sebességére vonatkozó korlátozásokért lásd az Azure-beli Linux rendszerű virtuális gépek méreteit.
Virtuálisgép-lemez gyorsítótárazása
Azure-beli virtuális gépeken a Gazdagép gyorsítótárazása funkció kezeli a lemez írási gyorsítótárazását. Az adattárakhoz használt adatlemezek átviteli sebességének növeléséhez kapcsolja ki a lemez írási gyorsítótárazását a gazdagép gyorsítótárazásának None
beállításával.
Adattár konfigurációja
A NiFi ajánlott eljárásának irányelvei az, hogy mindegyik adattárhoz külön lemezt vagy lemezt kell használni:
- Tartalom
- FlowFile
- Eredete
Ehhez a megközelítéshez legalább három lemezre van szükség.
A NiFi az alkalmazásszintű csíkozást is támogatja. Ez a funkció növeli az adattárházak méretét vagy teljesítményét.
Az alábbi részlet a nifi.properties
konfigurációs fájlból származik. Ez a konfiguráció particionálja és leválasztja az adattárakat a virtuális gépekhez csatlakoztatott felügyelt lemezek között:
nifi.provenance.repository.directory.stripe1=/mnt/disk1/ provenance_repository
nifi.provenance.repository.directory.stripe2=/mnt/disk2/ provenance_repository
nifi.provenance.repository.directory.stripe3=/mnt/disk3/ provenance_repository
nifi.content.repository.directory.stripe1=/mnt/disk4/ content_repository
nifi.content.repository.directory.stripe2=/mnt/disk5/ content_repository
nifi.content.repository.directory.stripe3=/mnt/disk6/ content_repository
nifi.flowfile.repository.directory=/mnt/disk7/ flowfile_repository
A nagy teljesítményű tárolók tervezésével kapcsolatos további információkért lásd : Azure Premium Storage: design for high performance.
Jelentéskészítés
A NiFi tartalmaz egy eredetjelentési feladatot a Log Analytics szolgáltatáshoz.
Ezzel a jelentéskészítési feladatsal kioszthatja a származási eseményeket a költséghatékony, tartós hosszú távú tároláshoz. A Log Analytics szolgáltatás lekérdezési felületet biztosít az egyes események megtekintéséhez és grafikonozásához. Ezekről a lekérdezésekkel kapcsolatos további információkért tekintse meg a cikk későbbi részében található Log Analytics-lekérdezéseket .
Ezt a feladatot a memórián belüli, változó forrástárral is használhatja. Ezt követően számos esetben növelheti az átviteli sebességet. Ez a megközelítés azonban kockázatos, ha meg kell őriznie az eseményadatokat. Győződjön meg arról, hogy az illékony tárolás megfelel a származási események tartóssági követelményeinek. További információ: Provenance Repository in the Apache NiFi System Rendszergazda istrator's Guide.
A folyamat használata előtt hozzon létre egy log analytics-munkaterületet az Azure-előfizetésében. A legjobb, ha a munkaterületet ugyanabban a régióban állítja be, mint a számítási feladat.
Az eredetjelentési feladat konfigurálása:
- Nyissa meg a vezérlő beállításait a NiFi-ben.
- Válassza a jelentéskészítési feladatok menüt.
- Válassza az Új jelentéskészítési feladat létrehozása lehetőséget.
- Válassza az Azure Log Analytics jelentéskészítési feladatát.
Az alábbi képernyőkép a jelentéskészítési feladat tulajdonságok menüjét mutatja be:
Két tulajdonság szükséges:
- A Log Analytics-munkaterület azonosítója
- A Log Analytics-munkaterület kulcsa
Ezeket az értékeket az Azure Portalon találja a Log Analytics-munkaterületre való navigálással.
A rendszer által küldött eredetesemények testreszabására és szűrésére más lehetőségek is rendelkezésre állnak.
Biztonság
A biztonság biztosítékokat nyújt a szándékos támadások és az értékes adatokkal és rendszerekkel való visszaélés ellen. További információ: A biztonsági pillér áttekintése.
A NiFi-t hitelesítési és engedélyezési szempontból is biztonságossá teheti. A NiFi-t az összes hálózati kommunikációhoz is biztonságossá teheti, beleértve a következőket:
- A fürtben.
- A fürt és a ZooKeeper között.
A következő beállítások bekapcsolásával kapcsolatos útmutatásért tekintse meg az Apache NiFi Rendszergazda istrators útmutatót:
- Kerberos
- Lightweight Directory Access Protocol (LDAP)
- Tanúsítványalapú hitelesítés és engedélyezés
- Kétirányú biztonságos szoftvercsatornák rétege (SSL) fürtkommunikációhoz
Ha bekapcsolja a ZooKeeper biztonságos ügyfélhozzáférést, konfigurálja a NiFi-t a konfigurációs fájlhoz kapcsolódó tulajdonságok bootstrap.conf
hozzáadásával. A következő konfigurációs bejegyzések egy példát mutatnak be:
java.arg.18=-Dzookeeper.clientCnxnSocket=org.apache.zookeeper.ClientCnxnSocketNetty
java.arg.19=-Dzookeeper.client.secure=true
java.arg.20=-Dzookeeper.ssl.keyStore.location=/path/to/keystore.jks
java.arg.21=-Dzookeeper.ssl.keyStore.password=[KEYSTORE PASSWORD]
java.arg.22=-Dzookeeper.ssl.trustStore.location=/path/to/truststore.jks
java.arg.23=-Dzookeeper.ssl.trustStore.password=[TRUSTSTORE PASSWORD]
Általános javaslatokért tekintse meg a Linux biztonsági alapkonfigurációit.
Hálózati biztonság
A megoldás megvalósításakor tartsa szem előtt a hálózati biztonsággal kapcsolatos alábbi szempontokat:
Hálózati biztonsági csoportok
Az Azure-ban hálózati biztonsági csoportokkal korlátozhatja a hálózati forgalmat.
Javasoljuk, hogy rendszergazdai feladatokhoz használjon jumpboxot a NiFi-fürthöz való csatlakozáshoz. Használja ezt a biztonság által megerősített virtuális gépet igény szerinti (JIT) hozzáféréssel vagy az Azure Bastion használatával. Állítsa be a hálózati biztonsági csoportokat a jumpboxhoz vagy az Azure Bastionhoz való hozzáférés engedélyezésének szabályozásához. A hálózatelkülönítést és -vezérlést az architektúra különböző alhálózataihoz tartozó hálózati biztonsági csoportok használatával érheti el.
Az alábbi képernyőkép egy tipikus virtuális hálózat összetevőit mutatja be. A jumpbox, a virtuálisgép-méretezési csoport és a ZooKeeper virtuális gépek közös alhálózatát tartalmazza. Ez az egyszerűsített hálózati topológia egy alhálózatba csoportosítja az összetevőket. Kövesse a szervezet feladatainak elkülönítésére és a hálózat kialakítására vonatkozó irányelveit.
Kimenő internet-hozzáférési szempontok
Az Azure-beli NiFi-nek nem kell hozzáférnie a nyilvános internethez a futtatáshoz. Ha az adatfolyamnak nincs szüksége internet-hozzáférésre az adatok lekéréséhez, javítsa a fürt biztonságát az alábbi lépések végrehajtásával a kimenő internet-hozzáférés letiltásához:
Hozzon létre egy további hálózati biztonsági csoportszabályt a virtuális hálózaton.
Használja ezeket a beállításokat:
- Forrás:
Any
- Cél:
Internet
- Akció:
Deny
- Forrás:
Ezzel a szabálysal továbbra is hozzáférhet néhány Azure-szolgáltatáshoz az adatfolyamból, ha privát végpontot konfigurál a virtuális hálózaton. Ehhez használja az Azure Private Linket . Ez a szolgáltatás lehetővé teszi, hogy a forgalom a Microsoft gerinchálózatán haladjon, miközben semmilyen más külső hálózati hozzáférést nem igényel. A NiFi jelenleg a Private Linket támogatja a Blob Storage és a Data Lake Storage processzorokhoz. Ha a hálózati idő protokoll (NTP) kiszolgáló nem érhető el a magánhálózaton, engedélyezze az NTP-hez való kimenő hozzáférést. Részletes információkért lásd az Azure-beli Linux rendszerű virtuális gépek időszinkronizálását.
Adatvédelem
A NiFi nem biztonságos, vezetékes titkosítás, identitás- és hozzáférés-kezelés (IAM) vagy adattitkosítás nélkül is működtethető. A legjobb azonban az éles és nyilvános felhőbeli üzemelő példányok védelme az alábbi módokon:
- Kommunikáció titkosítása a Transport Layer Security (TLS) használatával
- Támogatott hitelesítési és engedélyezési mechanizmus használata
- Az inaktív adatok titkosítása
Az Azure Storage kiszolgálóoldali transzparens adattitkosítást biztosít. Az 1.13.2-es kiadástól kezdve azonban a NiFi alapértelmezés szerint nem konfigurálja a vezetékes titkosítást vagy az IAM-t. Ez a viselkedés a jövőbeli kiadásokban változhat.
Az alábbi szakaszok bemutatják, hogyan lehet biztonságossá tenni az üzemelő példányokat az alábbi módokon:
- Vezetéktitkosítás engedélyezése TLS használatával
- Tanúsítványokon vagy Microsoft Entra-azonosítón alapuló hitelesítés konfigurálása
- Titkosított tárolás kezelése az Azure-ban
Disk encryption (Lemeztitkosítás)
A biztonság javítása érdekében használja az Azure-lemeztitkosítást. Részletes eljárásért lásd : Operációs rendszer és csatolt adatlemezek titkosítása egy virtuálisgép-méretezési csoportban az Azure CLI-vel. Ez a dokumentum a saját titkosítási kulcs megadására vonatkozó utasításokat is tartalmaz. Az alábbi lépések egy alapvető példát mutatnak be a legtöbb üzembe helyezéshez használható NiFi-hez:
Ha egy meglévő Key Vault-példány lemeztitkosítását szeretné bekapcsolni, használja a következő Azure CLI-parancsot:
az keyvault create --resource-group myResourceGroup --name myKeyVaultName --enabled-for-disk-encryption
Kapcsolja be a virtuálisgép-méretezési csoport adatlemezeinek titkosítását az alábbi paranccsal:
az vmss encryption enable --resource-group myResourceGroup --name myScaleSet --disk-encryption-keyvault myKeyVaultID --volume-type DATA
Szükség esetén használhat kulcstitkosítási kulcsot (KEK). A következő Azure CLI-paranccsal titkosíthat egy KEK-t:
az vmss encryption enable --resource-group myResourceGroup --name myScaleSet \ --disk-encryption-keyvault myKeyVaultID \ --key-encryption-keyvault myKeyVaultID \ --key-encryption-key https://<mykeyvaultname>.vault.azure.net/keys/myKey/<version> \ --volume-type DATA
Feljegyzés
Ha a virtuálisgép-méretezési csoportot manuális frissítési módra konfigurálta, futtassa a update-instances
parancsot. Adja meg a Key Vaultban tárolt titkosítási kulcs verzióját.
Titkosítás az átvitel során
A NiFi támogatja a TLS 1.2-t az átvitel közbeni titkosításhoz. Ez a protokoll védelmet nyújt a felhasználói felülethez való hozzáféréshez. Fürtök esetén a protokoll védi a NiFi-csomópontok közötti kommunikációt. A ZooKeeperrel való kommunikációt is képes védeni. A TLS engedélyezésekor a NiFi kölcsönös TLS-t (mTLS) használ a kölcsönös hitelesítéshez a következő esetekben:
- Tanúsítványalapú ügyfélhitelesítés, ha ezt a hitelesítési típust konfigurálta.
- Minden intracluster kommunikáció.
A TLS engedélyezéséhez hajtsa végre a következő lépéseket:
Hozzon létre egy kulcstárat és egy megbízhatósági tárolót az ügyfél–kiszolgáló, valamint az intracluster kommunikációhoz és hitelesítéshez.
Konfigurálás
$NIFI_HOME/conf/nifi.properties
. Adja meg az alábbi értékeket:- Gazdagépnevek
- Portok
- Keystore-tulajdonságok
- Truststore-tulajdonságok
- A fürt és a ZooKeeper biztonsági tulajdonságai, ha vannak
A hitelesítés
$NIFI_HOME/conf/authorizers.xml
konfigurálása általában olyan kezdeti felhasználóval, aki tanúsítványalapú hitelesítéssel vagy más lehetőséggel rendelkezik.Igény szerint konfigurálhatja az mTLS-t és a proxy olvasási szabályzatát a NiFi és bármely proxy, terheléselosztó vagy külső végpont között.
A teljes útmutatót az Apache projektdokumentációjában, a NiFi és a TLS biztonságossá tételében találja.
Feljegyzés
Az 1.13.2-es verziótól:
- A NiFi alapértelmezés szerint nem engedélyezi a TLS-t.
- A TLS-kompatibilis NiFi-példányok névtelen és egyfelhasználós hozzáféréséhez nincs beépített támogatás.
Ha engedélyezni szeretné a TLS-t az átvitel közbeni titkosításhoz, konfiguráljon egy felhasználói csoportot és házirend-szolgáltatót a hitelesítéshez és az engedélyezéshez a következő helyen $NIFI_HOME/conf/authorizers.xml
: . További információ: Identitás és hozzáférés-vezérlés a cikk későbbi részében.
Tanúsítványok, kulcsok és kulcstárak
A TLS támogatásához hozzon létre tanúsítványokat, tárolja őket a Java KeyStore-ban és az TrustStore-ban, és ossza el őket egy NiFi-fürtön. A tanúsítványoknak két általános lehetősége van:
- Önaláírt tanúsítványok
- Tanúsítványok, amelyeket a hitelesített hatóságok (CA-k) aláírnak
Hitelesítésszolgáltató által aláírt tanúsítványok esetén a legjobb, ha köztes hitelesítésszolgáltatót használ a fürt csomópontjaihoz tartozó tanúsítványok létrehozásához.
A KeyStore és a TrustStore a Java-platform kulcs- és tanúsítványtárolói. A KeyStore egy csomópont titkos kulcsát és tanúsítványát tárolja a fürtben. Az TrustStore a következő tanúsítványok egyikét tárolja:
- A KeyStore önaláírt tanúsítványainak összes megbízható tanúsítványa
- Hitelesítésszolgáltatótól származó tanúsítvány, hitelesítésszolgáltató által aláírt tanúsítványokhoz a KeyStore-ban
A tároló kiválasztásakor tartsa szem előtt a NiFi-fürt méretezhetőségét. Előfordulhat például, hogy a jövőben növelni vagy csökkenteni szeretné egy fürt csomópontjainak számát. Válassza ki a KeyStore-ban a hitelesítésszolgáltató által aláírt tanúsítványokat, és ebben az esetben egy vagy több tanúsítványt egy megbízható hitelesítésszolgáltatótól az TrustStore-ban. Ezzel a beállítással nem szükséges frissíteni a fürt meglévő csomópontjaiban található meglévő TrustStore-t. Egy meglévő TrustStore megbízik az ilyen típusú csomópontokon, és elfogadja a tanúsítványokat:
- A fürthöz hozzáadott csomópontok
- A fürt más csomópontjait lecserélő csomópontok
NiFi-konfiguráció
A TLS NiFi-hez való engedélyezéséhez konfigurálja $NIFI_HOME/conf/nifi.properties
a táblázatban szereplő tulajdonságokat. Győződjön meg arról, hogy a következő tulajdonságok tartalmazzák a NiFi eléréséhez használt állomásnevet:
nifi.web.https.host
vagynifi.web.proxy.host
- A gazdatanúsítvány kijelölt neve vagy tulajdonos alternatív neve
Ellenkező esetben a gazdagépnév-ellenőrzési hiba vagy a HTTP GAZDAGÉP fejlécének ellenőrzése meghiúsulhat, ami megtagadja a hozzáférést.
Tulajdonság neve | Leírás | Példaértékek |
---|---|---|
nifi.web.https.host |
A felhasználói felülethez és a REST API-hoz használandó állomásnév vagy IP-cím. Ennek az értéknek belsőleg feloldhatónak kell lennie. Javasoljuk, hogy ne használjon nyilvánosan elérhető nevet. | nifi.internal.cloudapp.net |
nifi.web.https.port |
A felhasználói felülethez és a REST API-hoz használandó HTTPS-port. | 9443 (alapértelmezett) |
nifi.web.proxy.host |
Az ügyfelek által a felhasználói felülethez és a REST API-hoz való hozzáféréshez használt alternatív gazdagépnevek vesszővel tagolt listája. Ez a lista általában tartalmazza a kiszolgálótanúsítvány tulajdonos alternatív neveként (SAN) megadott gazdagépneveket. A lista tartalmazhat minden olyan gazdagépnevet és portot is, amelyet a terheléselosztó, a proxy vagy a Kubernetes bejövőforgalom-vezérlő használ. | 40.67.218.235, 40.67.218.235:443, nifi.westus2.cloudapp.com, nifi.westus2.cloudapp.com:443 |
nifi.security.keystore |
A tanúsítvány titkos kulcsát tartalmazó JKS- vagy PKCS12-kulcstár elérési útja. | ./conf/keystore.jks |
nifi.security.keystoreType |
A kulcstár típusa. | JKS vagy PKCS12 |
nifi.security.keystorePasswd |
A keystore jelszava. | O8SitLBYpCz7g/RpsqH+zM |
nifi.security.keyPasswd |
(Nem kötelező) A titkos kulcs jelszava. | |
nifi.security.truststore |
A megbízható felhasználókat és fürtcsomópontokat hitelesíteni kívánó tanúsítványokat vagy ca-tanúsítványokat tartalmazó JKS- vagy PKCS12-megbízhatósági tár elérési útja. | ./conf/truststore.jks |
nifi.security.truststoreType |
A megbízhatóságiadattár típusa. | JKS vagy PKCS12 |
nifi.security.truststorePasswd |
A megbízhatóságiadattár jelszava. | RJlpGe6/TuN5fG+VnaEPi8 |
nifi.cluster.protocol.is.secure |
A TLS állapota az intracluster kommunikációhoz. Ha nifi.cluster.is.node igen true , állítsa be ezt az értéket a fürt TLS-jének true engedélyezéséhez. |
true |
nifi.remote.input.secure |
A helyek közötti kommunikáció TLS-állapota. | true |
Az alábbi példa bemutatja, hogyan jelennek meg ezek a tulajdonságok a fájlban $NIFI_HOME/conf/nifi.properties
. Vegye figyelembe, hogy az értékek és nifi.web.http.port
az nifi.web.http.host
értékek üresek.
nifi.remote.input.secure=true
nifi.web.http.host=
nifi.web.http.port=
nifi.web.https.host=nifi.internal.cloudapp.net
nifi.web.https.port=9443
nifi.web.proxy.host=40.67.218.235, 40.67.218.235:443, nifi.westus2.cloudapp.com, nifi.westus2.cloudapp.com:443
nifi.security.keystore=./conf/keystore.jks
nifi.security.keystoreType=JKS
nifi.security.keystorePasswd=O8SitLBYpCz7g/RpsqH+zM
nifi.security.keyPasswd=
nifi.security.truststore=./conf/truststore.jks
nifi.security.truststoreType=JKS
nifi.security.truststorePasswd=RJlpGe6/TuN5fG+VnaEPi8
nifi.cluster.protocol.is.secure=true
ZooKeeper-konfiguráció
A TLS Apache ZooKeeperben a kvórumkommunikáció és az ügyfélhozzáférés engedélyezésével kapcsolatos utasításokért tekintse meg a ZooKeeper Rendszergazda istrator útmutatóját. Ezt a funkciót csak a 3.5.5-ös vagy újabb verziók támogatják.
A NiFi a ZooKeepert használja a nullavezető fürtözéshez és a fürtkoordinációhoz. Az 1.13.0-s verziótól kezdve a NiFi támogatja a ZooKeeper TLS-kompatibilis példányaihoz való biztonságos ügyfélhozzáférést. A ZooKeeper egyszerű szövegben tárolja a fürttagságot és a fürt hatókörű processzorállapotát. Ezért fontos, hogy biztonságos ügyfélhozzáférést használjon a ZooKeeperhez a ZooKeeper ügyfélkéréseinek hitelesítéséhez. A bizalmas értékeket is titkosítja az átvitel során.
Ha engedélyezni szeretné a TLS-t NiFi-ügyfél számára a ZooKeeperhez való hozzáféréshez, állítsa be a következő tulajdonságokat a következőben $NIFI_HOME/conf/nifi.properties
: . Ha tulajdonságok konfigurálása nélkül állítja be a beállításokat nifi.zookeeper.client.secure
true
nifi.zookeeper.security
, a NiFi vissza fog esni a megadott kulcstárra és megbízhatósági adattárra.nifi.securityproperties
Tulajdonság neve | Leírás | Példaértékek |
---|---|---|
nifi.zookeeper.client.secure |
Az ügyfél TLS-jének állapota a ZooKeeperhez való csatlakozáskor. | true |
nifi.zookeeper.security.keystore |
Egy JKS, PKCS12 vagy PEM kulcstár elérési útja, amely tartalmazza a ZooKeepernek a hitelesítéshez bemutatott tanúsítvány titkos kulcsát. | ./conf/zookeeper.keystore.jks |
nifi.zookeeper.security.keystoreType |
A kulcstár típusa. | JKS , PKCS12 , PEM , vagy automatikus észlelés bővítmény szerint |
nifi.zookeeper.security.keystorePasswd |
A keystore jelszava. | caB6ECKi03R/co+N+64lrz |
nifi.zookeeper.security.keyPasswd |
(Nem kötelező) A titkos kulcs jelszava. | |
nifi.zookeeper.security.truststore |
A ZooKeeper hitelesítéséhez használt tanúsítványokat vagy ca-tanúsítványokat tartalmazó JKS, PKCS12 vagy PEM megbízhatósági tár elérési útja. | ./conf/zookeeper.truststore.jks |
nifi.zookeeper.security.truststoreType |
A megbízhatóságiadattár típusa. | JKS , PKCS12 , PEM , vagy automatikus észlelés bővítmény szerint |
nifi.zookeeper.security.truststorePasswd |
A megbízhatóságiadattár jelszava. | qBdnLhsp+mKvV7wab/L4sv |
nifi.zookeeper.connect.string |
A ZooKeeper-gazdagép vagy kvórum kapcsolati sztring. Ez a sztring az értékek vesszővel tagolt listája host:port . Az érték általában secureClientPort nem ugyanaz, mint az clientPort érték. A megfelelő értékért tekintse meg a ZooKeeper-konfigurációt. |
zookeeper1.internal.cloudapp.net:2281, zookeeper2.internal.cloudapp.net:2281, zookeeper3.internal.cloudapp.net:2281 |
Az alábbi példa bemutatja, hogyan jelennek meg ezek a tulajdonságok a következőben $NIFI_HOME/conf/nifi.properties
:
nifi.zookeeper.client.secure=true
nifi.zookeeper.security.keystore=./conf/keystore.jks
nifi.zookeeper.security.keystoreType=JKS
nifi.zookeeper.security.keystorePasswd=caB6ECKi03R/co+N+64lrz
nifi.zookeeper.security.keyPasswd=
nifi.zookeeper.security.truststore=./conf/truststore.jks
nifi.zookeeper.security.truststoreType=JKS
nifi.zookeeper.security.truststorePasswd=qBdnLhsp+mKvV7wab/L4sv
nifi.zookeeper.connect.string=zookeeper1.internal.cloudapp.net:2281,zookeeper2.internal.cloudapp.net:2281,zookeeper3.internal.cloudapp.net:2281
A ZooKeeper TLS-sel való biztonságossá tételéről további információt az Apache NiFi Rendszergazda istration útmutatójában talál.
Identitás- és hozzáférés-vezérlés
A NiFi-ben az identitás- és hozzáférés-vezérlés felhasználói hitelesítéssel és engedélyezéssel érhető el. A felhasználói hitelesítéshez a NiFi több lehetőség közül is választhat: Egyfelhasználós, LDAP, Kerberos, Security Assertion Markup Language (SAML) és OpenID Csatlakozás (OIDC). Ha nem konfigurál egy beállítást, a NiFi ügyféltanúsítványokkal hitelesíti a felhasználókat HTTPS-en keresztül.
Ha többtényezős hitelesítést fontolgat, javasoljuk a Microsoft Entra ID és az OIDC kombinációját. A Microsoft Entra ID támogatja a natív felhőalapú egyszeri bejelentkezést (SSO) az OIDC-vel. Ezzel a kombinációval a felhasználók számos vállalati biztonsági funkciót kihasználhatnak:
- Gyanús tevékenységek naplózása és riasztása felhasználói fiókokból
- Az inaktivált hitelesítő adatok elérésére tett kísérletek figyelése
- Riasztás szokatlan fiókbejelentkezési viselkedésről
Az engedélyezéshez a NiFi felhasználói, csoport- és hozzáférési szabályzatokon alapuló kényszerítést biztosít. A NiFi a UserGroupProviders és az AccessPolicyProviders segítségével biztosítja ezt a kényszerítést. Alapértelmezés szerint a szolgáltatók közé tartozik a Fájl, LDAP, Shell és Azure Graph-alapú UserGroupProviders. Az AzureGraphUserGroupProviderrel a Microsoft Entra ID-ból is származtathatja a felhasználói csoportokat. Ezután szabályzatokat rendelhet ezekhez a csoportokhoz. A konfigurációs utasításokért tekintse meg az Apache NiFi Rendszergazda istration útmutatóját.
A fájlokon és az Apache Rangeren alapuló AccessPolicyProviders jelenleg a felhasználói és csoportszabályzatok kezeléséhez és tárolásához érhető el. Részletes információkért tekintse meg az Apache NiFi dokumentációját és az Apache Ranger dokumentációját.
Alkalmazásátjáró
Az application gateway egy felügyelt 7. rétegbeli terheléselosztót biztosít a NiFi-felülethez. Konfigurálja az application gatewayt a NiFi-csomópontok virtuálisgép-méretezési készletének háttérkészletként való használatára.
A legtöbb NiFi-telepítéshez a következő Application Gateway-konfigurációt javasoljuk:
- Szint: Standard
- Termékváltozat mérete: közepes
- Példányok száma: kettő vagy több
Állapotadat-mintavétel használatával monitorozza a webkiszolgáló állapotát az egyes csomópontokon. Távolítsa el a nem kifogástalan csomópontokat a terheléselosztó forgatásából. Ez a megközelítés megkönnyíti a felhasználói felület megtekintését, ha az általános fürt állapota nem megfelelő. A böngésző csak azokat a csomópontokat irányítja, amelyek jelenleg kifogástalan állapotban vannak, és válaszolnak a kérésekre.
Két fontos állapotadat-mintavételt kell figyelembe venni. Ezek együttesen rendszeres szívverést biztosítanak a fürt összes csomópontjának általános állapotáról. Konfigurálja az első állapotadat-mintavételt, hogy az elérési útra /NiFi
mutasson. Ez a mintavétel minden csomóponton meghatározza a NiFi felhasználói felület állapotát. Konfiguráljon egy második állapotmintát az elérési úthoz /nifi-api/controller/cluster
. Ez a mintavétel azt jelzi, hogy az egyes csomópontok jelenleg kifogástalan állapotban van-e, és csatlakoznak-e a teljes fürthöz.
Az Application Gateway előtérbeli IP-címének konfigurálására két lehetősége van:
- Nyilvános IP-címmel
- Privát alhálózati IP-címmel
Csak akkor adjon meg nyilvános IP-címet, ha a felhasználóknak a felhasználói felületet a nyilvános interneten keresztül kell elérnie. Ha nincs szükség nyilvános internet-hozzáférésre a felhasználók számára, a terheléselosztó előtérét a virtuális hálózat egyik jumpboxjából vagy a magánhálózathoz való társviszony-létesítéssel érheti el. Ha nyilvános IP-címmel konfigurálja az Application Gatewayt, javasoljuk, hogy engedélyezze az ügyféltanúsítvány-hitelesítést a NiFi-hez, és engedélyezze a TLS-t a NiFi felhasználói felületén. A delegált Application Gateway alhálózatában hálózati biztonsági csoportot is használhat a forrás IP-címeinek korlátozásához.
Diagnosztika és állapotfigyelés
Az Application Gateway diagnosztikai beállításai között lehetőség van a metrikák és a hozzáférési naplók küldésére. Ezzel a beállítással ezeket az információkat elküldheti a terheléselosztóból különböző helyekre:
- Egy tárfiók
- Event Hubs
- Log Analytics-munkaterület
A beállítás bekapcsolása hasznos a terheléselosztási problémák hibakereséséhez és a fürtcsomópontok állapotának megismeréséhez.
Az alábbi Log Analytics-lekérdezés a fürtcsomópont állapotát jeleníti meg az Application Gateway szempontjából. Hasonló lekérdezéssel riasztásokat vagy automatikus javítási műveleteket hozhat létre a nem megfelelő állapotú csomópontok esetében.
AzureDiagnostics
| summarize UnHealthyNodes = max(unHealthyHostCount_d), HealthyNodes = max(healthyHostCount_d) by bin(TimeGenerated, 5m)
| render timechart
A lekérdezési eredmények alábbi diagramja a fürt állapotának időnézetét jeleníti meg:
Elérhetőség
A megoldás megvalósításakor tartsa szem előtt a következő pontokat a rendelkezésre állásról:
Terheléselosztóval
A felhasználói felület terheléselosztójának használatával növelheti a felhasználói felület rendelkezésre állását a csomópont állásideje alatt.
Virtuális gépek elkülönítése
A rendelkezésre állás növeléséhez helyezze üzembe a ZooKeeper-fürtöt a NiFi-fürt virtuális gépeitől eltérő virtuális gépeken. A ZooKeeper konfigurálásáról további információt az Apache NiFi System Rendszergazda istrator útmutatójában található Állapotkezelés című témakörben talál.
Rendelkezésreállási zónák
A rendelkezésre állás maximalizálása érdekében helyezze üzembe a NiFi virtuálisgép-méretezési csoportot és a ZooKeeper-fürtöt zónák közötti konfigurációban. Amikor a fürt csomópontjai közötti kommunikáció átlépi a rendelkezésre állási zónákat, kis mértékű késést eredményez. Ez a késés azonban általában minimális általános hatással van a fürt átviteli sebességére.
Virtuálisgép-méretezési csoportok
Javasoljuk, hogy a NiFi-csomópontokat egyetlen virtuálisgép-méretezési csoportban helyezze üzembe, amely az elérhető rendelkezésre állási zónákra terjed ki. A méretezési csoportok ilyen módon történő használatáról további információt a Rendelkezésre állási zónákat használó virtuálisgép-méretezési csoport létrehozása című témakörben talál.
Figyelés
A NiFi-fürtök állapotának és teljesítményének monitorozására több lehetőség is rendelkezésre áll:
- Jelentéskészítési feladatok.
- MonitoFi, egy külön Microsoft által fejlesztett alkalmazás. A MonitoFi külsőleg fut, és a NiFi API használatával figyeli a fürtöt.
Jelentéskészítési tevékenységalapú monitorozás
A monitorozáshoz használhatja a NiFi-ben konfigurált és futtatott jelentéskészítési feladatokat. Ahogy a diagnosztika és az állapotfigyelés is tárgyalja, a Log Analytics egy jelentéskészítési feladatot biztosít a NiFi Azure-csomagban. Ezzel a jelentéskészítési feladattal integrálhatja a monitorozást a Log Analyticsszel és a meglévő figyelési vagy naplózási rendszerekkel.
Log Analytics-lekérdezések
A következő szakaszokban található minta lekérdezések segíthetnek az első lépésekben. A Log Analytics-adatok lekérdezésének áttekintését az Azure Monitor napló lekérdezései című témakörben tekintheti meg.
A Monitor és a Log Analytics napló lekérdezései a Kusto lekérdezésnyelv egy verzióját használják. A napló-lekérdezések és a Kusto-lekérdezések között azonban különbségek vannak. További információ: Kusto-lekérdezések áttekintése.
Strukturáltabb tanulásért tekintse meg az alábbi oktatóanyagokat:
- Ismerkedés az Azure Monitor-naplólekérdezésekkel
- A Log Analytics használatának első lépései az Azure Monitorban
Log Analytics-jelentéskészítési feladat
A NiFi alapértelmezés szerint metrikák adatait küldi el a nifimetrics
táblának. A jelentéskészítési feladat tulajdonságaiban azonban konfigurálhat egy másik célhelyet. A jelentéskészítési feladat a következő NiFi-metrikákat rögzíti:
Metrika típusa | Metrika neve |
---|---|
NiFi-metrikák | FlowFilesReceived |
NiFi-metrikák | FlowFilesSent |
NiFi-metrikák | FlowFilesQueued |
NiFi-metrikák | BytesReceived |
NiFi-metrikák | BytesWritten |
NiFi-metrikák | BytesRead |
NiFi-metrikák | BytesSent |
NiFi-metrikák | BytesQueued |
Portállapot-metrikák | InputCount |
Portállapot-metrikák | InputBytes |
Csatlakozás ion állapotmetrikái | QueuedCount |
Csatlakozás ion állapotmetrikái | QueuedBytes |
Portállapot-metrikák | OutputCount |
Portállapot-metrikák | OutputBytes |
Java virtuális gép (JVM) metrikái | jvm.uptime |
JVM-metrikák | jvm.heap_used |
JVM-metrikák | jvm.heap_usage |
JVM-metrikák | jvm.non_heap_usage |
JVM-metrikák | jvm.thread_states.runnable |
JVM-metrikák | jvm.thread_states.blocked |
JVM-metrikák | jvm.thread_states.timed_waiting |
JVM-metrikák | jvm.thread_states.terminated |
JVM-metrikák | jvm.thread_count |
JVM-metrikák | jvm.daemon_thread_count |
JVM-metrikák | jvm.file_descriptor_usage |
JVM-metrikák | jvm.gc.runs jvm.gc.runs.g1_old_generation jvm.gc.runs.g1_young_generation |
JVM-metrikák | jvm.gc.time jvm.gc.time.g1_young_generation jvm.gc.time.g1_old_generation |
JVM-metrikák | jvm.buff_pool_direct_capacity |
JVM-metrikák | jvm.buff_pool_direct_count |
JVM-metrikák | jvm.buff_pool_direct_mem_used |
JVM-metrikák | jvm.buff_pool_mapped_capacity |
JVM-metrikák | jvm.buff_pool_mapped_count |
JVM-metrikák | jvm.buff_pool_mapped_mem_used |
JVM-metrikák | jvm.mem_pool_code_cache |
JVM-metrikák | jvm.mem_pool_compressed_class_space |
JVM-metrikák | jvm.mem_pool_g1_eden_space |
JVM-metrikák | jvm.mem_pool_g1_old_gen |
JVM-metrikák | jvm.mem_pool_g1_survivor_space |
JVM-metrikák | jvm.mem_pool_metaspace |
JVM-metrikák | jvm.thread_states.new |
JVM-metrikák | jvm.thread_states.waiting |
Processzorszintű metrikák | BytesRead |
Processzorszintű metrikák | BytesWritten |
Processzorszintű metrikák | FlowFilesReceived |
Processzorszintű metrikák | FlowFilesSent |
Íme egy minta lekérdezés egy BytesQueued
fürt metrikájához:
let table_name = nifimetrics_CL;
let metric = "BytesQueued";
table_name
| where Name_s == metric
| where Computer contains {ComputerName}
| project TimeGenerated, Computer, ProcessGroupName_s, Count_d, Name_s
| summarize sum(Count_d) by bin(TimeGenerated, 1m), Computer, Name_s
| render timechart
Ez a lekérdezés a képernyőképen láthatóhoz hasonló diagramot hoz létre:
Feljegyzés
Amikor az Azure-ban futtatja a NiFi-t, nem korlátozódik a Log Analytics jelentéskészítési feladatára. A NiFi számos külső monitorozási technológia jelentéskészítési feladatait támogatja. A támogatott jelentéskészítési feladatok listáját az Apache NiFi Dokumentációs index Jelentéskészítési feladatok szakaszában találja.
NiFi-infrastruktúra monitorozása
A jelentéskészítési feladat mellett telepítse a Log Analytics virtuálisgép-bővítményt a NiFi és a ZooKeeper csomópontokra. Ez a bővítmény naplókat, további virtuálisgép-szintű metrikákat és metrikákat gyűjt a ZooKeeperből.
Egyéni naplók a NiFi alkalmazáshoz, a felhasználóhoz, a bootstraphez és a ZooKeeperhez
További naplók rögzítéséhez kövesse az alábbi lépéseket:
Az Azure Portalon válassza ki a Log Analytics-munkaterületeket, majd válassza ki a munkaterületet.
A Gépház alatt válassza az Egyéni naplók lehetőséget.
Válassza az Egyéni napló hozzáadása lehetőséget.
Egyéni napló beállítása az alábbi értékekkel:
- Név:
NiFiAppLogs
- Elérési út típusa:
Linux
- Elérési út neve:
/opt/nifi/logs/nifi-app.log
- Név:
Egyéni napló beállítása az alábbi értékekkel:
- Név:
NiFiBootstrapAndUser
- Első elérési út típusa:
Linux
- Első elérési út neve:
/opt/nifi/logs/nifi-user.log
- Második elérési út típusa:
Linux
- Második elérési út neve:
/opt/nifi/logs/nifi-bootstrap.log
- Név:
Egyéni napló beállítása az alábbi értékekkel:
- Név:
NiFiZK
- Elérési út típusa:
Linux
- Elérési út neve:
/opt/zookeeper/logs/*.out
- Név:
Az első példa által létrehozott egyéni tábla minta lekérdezése NiFiAppLogs
:
NiFiAppLogs_CL
| where TimeGenerated > ago(24h)
| where Computer contains {ComputerName} and RawData contains "error"
| limit 10
A lekérdezés az alábbi eredményekhez hasonló eredményeket hoz létre:
Infrastruktúranapló konfigurálása
A Monitorral figyelheti és kezelheti a virtuális gépeket és a fizikai számítógépeket. Ezek az erőforrások lehetnek a helyi adatközpontban vagy más felhőkörnyezetben. A monitorozás beállításához telepítse a Log Analytics-ügynököt. Konfigurálja az ügynököt úgy, hogy egy Log Analytics-munkaterületen jelentsen. További információ: Log Analytics-ügynök áttekintése.
Az alábbi képernyőképen egy mintaügynök konfigurációja látható NiFi virtuális gépekhez. A Perf
tábla tárolja az összegyűjtött adatokat.
Íme egy minta lekérdezés a NiFi-alkalmazásnaplókhoz Perf
:
let cluster_name = {ComputerName};
// The hourly average of CPU usage across all computers.
Perf
| where Computer contains {ComputerName}
| where CounterName == "% Processor Time" and InstanceName == "_Total"
| where ObjectName == "Processor"
| summarize CPU_Time_Avg = avg(CounterValue) by bin(TimeGenerated, 30m), Computer
A lekérdezés a képernyőképen láthatóhoz hasonló jelentést hoz létre:
Riasztások
A Monitor használatával riasztásokat hozhat létre a NiFi-fürt állapotáról és teljesítményéről. Ilyen riasztások például a következők:
- Az üzenetsorok teljes száma túllépte a küszöbértéket.
- Az
BytesWritten
érték a várt küszöbérték alatt van. - Az
FlowFilesReceived
érték egy küszöbérték alatt van. - A fürt állapota nem megfelelő.
A riasztások Monitorban való beállításáról további információt a Microsoft Azure riasztásainak áttekintése című témakörben talál.
Konfigurációs paraméterek
Az alábbi szakaszok a NiFi és függőségei, köztük a ZooKeeper és a Java ajánlott, nem alapértelmezett konfigurációit ismertetik. Ezek a beállítások a felhőben lehetséges fürtméretekhez használhatók. Adja meg a tulajdonságokat a következő konfigurációs fájlokban:
$NIFI_HOME/conf/nifi.properties
$NIFI_HOME/conf/bootstrap.conf
$ZOOKEEPER_HOME/conf/zoo.cfg
$ZOOKEEPER_HOME/bin/zkEnv.sh
Az elérhető konfigurációs tulajdonságokról és fájlokról az Apache NiFi System Rendszergazda istrator útmutatójában és a ZooKeeper Rendszergazda istrator útmutatójában talál részletes információkat.
NiFi
Azure-üzemelő példány esetén fontolja meg a tulajdonságok módosítását a következőben $NIFI_HOME/conf/nifi.properties
: . Az alábbi táblázat a legfontosabb tulajdonságokat sorolja fel. További javaslatokért és megállapításokért tekintse meg az Apache NiFi levelezőlistáit.
Paraméter | Leírás | Alapértelmezett | Ajánlás |
---|---|---|---|
nifi.cluster.node.connection.timeout |
Mennyi ideig kell várni, amikor más fürtcsomópontok felé nyit kapcsolatot. | 5 másodperc | 60 másodperc |
nifi.cluster.node.read.timeout |
Mennyi ideig kell várni a válaszra, amikor más fürtcsomópontokra irányuló kérést küld. | 5 másodperc | 60 másodperc |
nifi.cluster.protocol.heartbeat.interval |
Milyen gyakran küldhet szívveréseket a fürtkoordinátornak. | 5 másodperc | 60 másodperc |
nifi.cluster.node.max.concurrent.requests |
Milyen szintű párhuzamosságot kell használni a HTTP-hívások, például a REST API-hívások más fürtcsomópontokra történő replikálásakor. | 100 | 500 |
nifi.cluster.node.protocol.threads |
A fürtközi/replikált kommunikáció kezdeti szálkészlet-mérete. | 10 | 50 |
nifi.cluster.node.protocol.max.threads |
A fürtök közötti/replikált kommunikációhoz használandó szálak maximális száma. | 50 | 75 |
nifi.cluster.flow.election.max.candidates |
Az aktuális folyamat meghatározásához használandó csomópontok száma. Ez az érték rövidre zárja a szavazást a megadott számon. | üres | 75 |
nifi.cluster.flow.election.max.wait.time |
Mennyi ideig kell várni a csomópontokon, mielőtt eldöntené, hogy mi az aktuális folyamat. | 5 perc | 5 perc |
Fürt viselkedése
Fürtök konfigurálásakor tartsa szem előtt az alábbi pontokat.
Időkorlát
A fürt és a csomópontok általános állapotának biztosítása érdekében előnyös lehet az időtúllépések növelése. Ez a gyakorlat segít garantálni, hogy a hibák ne átmeneti hálózati problémákból vagy nagy terhelésből erednek.
Az elosztott rendszerekben az egyes rendszerek teljesítménye változó. Ez a változat magában foglalja a hálózati kommunikációt és a késést, amely általában hatással van a csomópontok közötti, fürtközi kommunikációra. Ezt a változást a hálózati infrastruktúra vagy maga a rendszer okozhatja. Ennek eredményeképpen a variáció valószínűsége nagy rendszerfürtökben nagyon valószínű. A terhelés alatt álló Java-alkalmazásokban a Java virtuális gép (JVM) szemétgyűjtési (GC) szüneteltetése is befolyásolhatja a kérelmek válaszidejének idejét.
A következő szakaszokban található tulajdonságok használatával időtúllépéseket konfigurálhat a rendszer igényeinek megfelelően:
nifi.cluster.node.connection.timeout és nifi.cluster.node.read.timeout
A nifi.cluster.node.connection.timeout
tulajdonság megadja, hogy mennyi ideig kell várni egy kapcsolat megnyitásakor. A nifi.cluster.node.read.timeout
tulajdonság azt határozza meg, hogy mennyi ideig kell várni, amikor adatokat fogad a kérések között. Minden tulajdonság alapértelmezett értéke öt másodperc. Ezek a tulajdonságok csomópontról csomópontra irányuló kérelmekre vonatkoznak. Ezeknek az értékeknek a növelése segít enyhíteni a kapcsolódó problémákat:
- A fürtkoordinátor megszakad a szívverés megszakadása miatt
- Nem sikerült lekérni a folyamatot a koordinátortól a fürthöz való csatlakozáskor
- Helyek közötti (S2S) és terheléselosztási kommunikáció létrehozása
Ha a fürt nem rendelkezik nagyon kis méretezési csoportokkal(például három csomópont vagy kevesebb), az alapértelmezettnél nagyobb értékeket használjon.
nifi.cluster.protocol.heartbeat.interval
A NiFi-fürtözési stratégia részeként minden csomópont szívverést bocsát ki az állapotának közléséhez. Alapértelmezés szerint a csomópontok öt másodpercenként küldenek szívveréseket. Ha a fürtkoordinátor azt észleli, hogy egy csomópont sorában nyolc szívverés meghiúsult, leválasztja a csomópontot. Növelje a tulajdonságban beállított időközt a nifi.cluster.protocol.heartbeat.interval
lassú szívverések kezeléséhez, és megakadályozza, hogy a fürt szükségtelenül leválasztsa a csomópontokat.
Egyidejűség
Az egyidejűségi beállítások konfigurálásához használja a következő szakaszok tulajdonságait:
nifi.cluster.node.protocol.threads és nifi.cluster.node.protocol.max.threads
A nifi.cluster.node.protocol.max.threads
tulajdonság megadja a teljes fürtkommunikációhoz, például az S2S terheléselosztáshoz és a felhasználói felület összesítéséhez használandó szálak maximális számát. A tulajdonság alapértelmezett értéke 50 szál. Nagy fürtök esetén növelje ezt az értéket, hogy figyelembe vegye a műveletek által igényelt kérelmek számát.
A nifi.cluster.node.protocol.threads
tulajdonság határozza meg a kezdeti szálkészlet méretét. Az alapértelmezett érték 10 szál. Ez az érték minimális. Igény szerint növekszik a maximális értékig a következőben nifi.cluster.node.protocol.max.threads
: . Növelje az nifi.cluster.node.protocol.threads
indításkor nagy méretezési csoportot használó fürtök értékét.
nifi.cluster.node.max.concurrent.requests
Számos HTTP-kérést, például REST API-hívásokat és felhasználói felületi hívásokat kell replikálni a fürt más csomópontjaira. A fürt méretének növekedésével egyre több kérelem replikálódik. A nifi.cluster.node.max.concurrent.requests
tulajdonság korlátozza a függőben lévő kérelmek számát. Az értéknek meg kell haladnia a várt fürtméretet. Az alapértelmezett érték 100 egyidejű kérés. Ha nem három vagy kevesebb csomópontból álló kis fürtöt futtat, az érték növelésével megakadályozhatja a sikertelen kérelmeket.
Folyamatválasztás
A folyamatválasztási beállítások konfigurálásához használja a következő szakaszok tulajdonságait:
nifi.cluster.flow.election.max.candidates
A NiFi nullavezető fürtözést használ, ami azt jelenti, hogy nincs egy konkrét mérvadó csomópont. Ennek eredményeképpen a csomópontok szavaznak arra, hogy melyik folyamatdefiníció számít a megfelelőnek. Azt is eldöntik, hogy mely csomópontok csatlakoznak a fürthöz.
Alapértelmezés szerint a nifi.cluster.flow.election.max.candidates
tulajdonság a tulajdonság által megadott maximális várakozási nifi.cluster.flow.election.max.wait.time
idő. Ha ez az érték túl magas, az indítás lassú lehet. Az alapértelmezett érték nifi.cluster.flow.election.max.wait.time
öt perc. Állítsa be a jelöltek maximális számát egy nem üres értékre, például 1
vagy annál nagyobb értékre, hogy a várakozás ne legyen hosszabb a szükségesnél. Ha ezt a tulajdonságot állítja be, rendeljen hozzá egy olyan értéket, amely megfelel a fürt méretének vagy a várt fürtméret bizonyos többségének. Kisebb, 10 vagy kevesebb csomópontból álló statikus fürtök esetén állítsa ezt az értéket a fürt csomópontjainak számára.
nifi.cluster.flow.election.max.wait.time
Rugalmas felhőkörnyezetben a gazdagépek kiépítésének ideje befolyásolja az alkalmazás indítási idejét. A nifi.cluster.flow.election.max.wait.time
tulajdonság határozza meg, hogy a NiFi mennyi ideig várakozik, mielőtt eldöntené a folyamatot. Ez az érték arányos legyen a fürt indítási idejének kezdő méretével. Az első tesztelés során öt perc több mint elegendő az ajánlott példánytípusokhoz tartozó összes Azure-régióban. Ezt az értéket azonban növelheti, ha a rendszeres üzembe helyezés ideje meghaladja az alapértelmezett értéket.
Java
Java LTS-kiadás használatát javasoljuk. Ezen kiadások közül a Java 11 kissé előnyösebb a Java 8-hoz, mert a Java 11 támogatja a gyorsabb szemétgyűjtés implementálását. Azonban bármelyik kiadással nagy teljesítményű NiFi-telepítés is lehetséges.
A következő szakaszok a NiFi futtatásakor használandó gyakori JVM-konfigurációkat ismertetik. JVM-paraméterek beállítása a bootstrap konfigurációs fájlban a következő helyen $NIFI_HOME/conf/bootstrap.conf
: .
Szemétgyűjtő
Ha Java 11-et futtat, a legtöbb esetben a G1 kukagyűjtőt (G1GC) javasoljuk. A G1GC jobb teljesítményt nyújt a ParallelGC-vel szemben, mivel a G1GC csökkenti a GC-szünetek hosszát. A Java 11-ben a G1GC az alapértelmezett, de explicit módon konfigurálhatja a következő érték bootstrap.conf
beállításával:
java.arg.13=-XX:+UseG1GC
Ha Java 8-at futtat, ne használja a G1GC-t. Használja helyette a ParallelGC-t. A G1GC Java 8 implementációjában vannak olyan hiányosságok, amelyek megakadályozzák, hogy az ajánlott adattár-implementációkkal használja. A ParallelGC lassabb, mint a G1GC. A ParallelGC-vel azonban továbbra is nagy teljesítményű NiFi-telepítéssel rendelkezhet a Java 8 használatával.
Halommemória
A fájlban található bootstrap.conf
tulajdonságok halmaza határozza meg a NiFi JVM-halom konfigurációját. Normál folyamat esetén konfiguráljon egy 32 GB-os halomelemet az alábbi beállításokkal:
java.arg.3=-Xmx32g
java.arg.2=-Xms32g
A JVM-folyamatra alkalmazandó optimális halomméret kiválasztásához két tényezőt érdemes figyelembe venni:
- Az adatfolyam jellemzői
- A NiFi memóriát használ a feldolgozás során
Részletes dokumentációért lásd az Apache NiFi részletes ismertetését.
A feldolgozási követelmények teljesítéséhez a halom csak a szükséges méretű legyen. Ez a módszer minimálisra csökkenti a GC-szünetek hosszát. A Java-szemétgyűjtés általános szempontjait a Java-verzió szemétgyűjtési hangolási útmutatójában találja.
A JVM memóriabeállításainak módosításakor vegye figyelembe az alábbi fontos tényezőket:
Az adott időszakban aktív FlowFile-k vagy NiFi-adatrekordok száma. Ez a szám tartalmazza a háttérbe szorított vagy várólistára helyezett FlowFile-okat.
A FlowFilesban definiált attribútumok száma.
A processzor által igényelt memória mennyisége egy adott tartalom feldolgozásához.
A feldolgozó az adatok feldolgozási módja:
- Adatok streamelése
- Rekordorientált processzorok használata
- Az összes adat egyszerre tartása a memóriában
Ezek a részletek fontosak. A feldolgozás során a NiFi a memóriában lévő egyes FlowFile-fájlok hivatkozásait és attribútumait tartalmazza. Csúcsteljesítmény esetén a rendszer által használt memória mennyisége arányos az élő FlowFile-fájlok számával és az általuk tartalmazott attribútumokkal. Ez a szám a várólistán lévő FlowFile-okat is tartalmazza. A NiFi képes lemezre cserélni. De kerülje ezt a lehetőséget, mert rontja a teljesítményt.
Tartsa szem előtt az alapvető objektummemória-használatot is. Pontosabban, hogy a halom elég nagy ahhoz, hogy az objektumok a memóriában. Vegye figyelembe az alábbi tippeket a memóriabeállítások konfigurálásához:
- Futtassa a folyamatot reprezentatív adatokkal és minimális hátterheléssel a beállítással
-Xmx4G
kezdve, majd szükség szerint növelje a memóriát. - Futtassa a folyamatot reprezentatív adatokkal és a visszanyomás csúcsával a beállítással
-Xmx4G
kezdve, majd szükség szerint növelje a fürt méretét. - Profilozza az alkalmazást, miközben a folyamat fut olyan eszközökkel, mint a VisualVM és a YourKit.
- Ha a halom konzervatív növekedése nem javítja jelentősen a teljesítményt, fontolja meg a folyamatok, processzorok és a rendszer egyéb aspektusainak újratervezését.
További JVM-paraméterek
Az alábbi táblázat további JVM-beállításokat sorol fel. Emellett azokat az értékeket is megadja, amelyek a kezdeti tesztelés során a legjobban működnek. A tesztek a GC tevékenységét és a memóriahasználatot figyelték meg, és gondos profilkészítést alkalmaztak.
Paraméter | Leírás | JVM alapértelmezett | Ajánlás |
---|---|---|---|
InitiatingHeapOccupancyPercent |
A jelölőciklus aktiválása előtt használt halom mennyisége. | 45 | 35 |
ParallelGCThreads |
A GC által használt szálak száma. Ez az érték megfeleltetve korlátozza a rendszerre gyakorolt általános hatást. | A vCPU-k számának 5/8-a | 8 |
ConcGCThreads |
A párhuzamosan futtatandó GC-szálak száma. Ez az érték növelve lesz a leképezett ParallelGCThreads értékhez. | Az érték 1/4-e ParallelGCThreads |
4 |
G1ReservePercent |
A szabad megőrzéshez fenntartott memória százalékos aránya. Ez az érték növelve van a helykihasználtság elkerülése érdekében, ami segít elkerülni a teljes GC-t. | 10 | 20 |
UseStringDeduplication |
Azonos sztringekre mutató hivatkozások azonosítása és duplikálása. A funkció bekapcsolása memóriamegtakarítást eredményezhet. | - | Jelen |
Ezeket a beállításokat úgy konfigurálhatja, hogy hozzáadja a következő bejegyzéseket a NiFi-hez bootstrap.conf
:
java.arg.17=-XX:+UseStringDeduplication
java.arg.18=-XX:G1ReservePercent=20
java.arg.19=-XX:ParallelGCThreads=8
java.arg.20=-XX:ConcGCThreads=4
java.arg.21=-XX:InitiatingHeapOccupancyPercent=35
ZooKeeper
A jobb hibatűrés érdekében futtassa a ZooKeepert fürtként. Ezt a megközelítést akkor is vegye figyelembe, ha a legtöbb NiFi-telepítés viszonylag szerény terhelést helyez a ZooKeeperre. A ZooKeeper fürtözésének bekapcsolása kifejezetten. Alapértelmezés szerint a ZooKeeper egykiszolgálós módban fut. További információt a ZooKeeper Rendszergazda istrator útmutatójában, a fürtözött (többkiszolgálós) beállításban talál.
A fürtözési beállítások kivételével használja az alapértelmezett értékeket a ZooKeeper-konfigurációhoz.
Ha nagy NiFi-fürtje van, előfordulhat, hogy nagyobb számú ZooKeeper-kiszolgálót kell használnia. Kisebb fürtméretek esetén a kisebb virtuálisgép-méretek és a Standard SSD felügyelt lemezek elegendőek.
Közreműködők
Ezt a cikket a Microsoft tartja karban. Eredetileg a következő közreműködők írták.
Fő szerző:
- Muazma Zahid | Vezető PM-vezető
A nem nyilvános LinkedIn-profilok megtekintéséhez jelentkezzen be a LinkedInbe.
Következő lépések
A dokumentum anyaga és javaslatai több forrásból származnak:
- Kísérletezés
- Az Azure ajánlott eljárásai
- NiFi közösségi ismeretek, ajánlott eljárások és dokumentáció
További információkat találhat az alábbi forrásokban:
- Apache NiFi System Rendszergazda istrator útmutatója
- Apache NiFi levelezőlisták
- A Cloudera ajánlott eljárásai a nagy teljesítményű NiFi-telepítés beállításához
- Azure prémium tároló: nagy teljesítményre tervezve
- Azure-beli virtuális gépek teljesítményének hibaelhárítása Linux vagy Windows rendszeren
Kapcsolódó erőforrások
- Apache NiFi monitorozás a MonitoFi-val
- Helm-alapú üzemelő példányok az Apache NiFi-hez
- Az Azure Data Explorer monitorozása
- [Hibrid kinyerés, átalakítás, betöltés (ETL) az Azure Data Factoryvel] [Hibrid ETL az Azure Data Factoryvel]
- [DataOps a modern adattárházhoz] [DataOps a modern adattárházhoz]
- Adattárház és elemzés