[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"blog-/blog/tutorial/monitoreo-grafana-prometheus":3,"prev-/blog/tutorial/monitoreo-grafana-prometheus":1873,"next-/blog/tutorial/monitoreo-grafana-prometheus":1876,"related-/blog/tutorial/monitoreo-grafana-prometheus":1879},{"id":4,"title":5,"author":6,"authorUrl":7,"body":8,"category":1839,"cta":1840,"date":1843,"dateModified":1843,"description":1844,"draft":1845,"extension":1846,"faq":1847,"featured":1845,"image":1860,"imageAlt":1861,"meta":1862,"navigation":128,"path":1863,"readingTime":261,"seo":1864,"stem":1865,"tags":1866,"__hash__":1872},"blog/blog/tutorial/monitoreo-grafana-prometheus.md","Monitoreo de servidores con Grafana y Prometheus desde cero","Syswork México","/nosotros",{"type":9,"value":10,"toc":1815},"minimark",[11,15,18,23,26,37,52,56,59,63,70,175,178,281,284,313,316,337,348,411,414,418,425,534,537,688,690,802,805,830,845,856,860,863,1019,1033,1035,1039,1067,1071,1078,1104,1107,1112,1177,1181,1184,1188,1235,1239,1250,1254,1263,1267,1273,1302,1306,1309,1313,1375,1381,1438,1445,1449,1459,1500,1504,1545,1547,1551,1554,1628,1631,1647,1650,1756,1760,1763,1802,1811],[12,13,14],"p",{},"Enterarte de que un servidor está caído porque un usuario te llama es la peor forma de monitorear infraestructura. Un sistema de monitoreo profesional te muestra el estado de todos tus servidores en tiempo real, te avisa antes de que los problemas impacten a los usuarios y te da datos históricos para tomar decisiones de capacidad.",[12,16,17],{},"En esta guía vas a instalar Prometheus + Grafana desde cero, configurar la recolección de métricas de tus servidores Linux y crear un dashboard profesional — todo en menos de una hora.",[19,20,22],"h2",{"id":21},"arquitectura","Arquitectura",[12,24,25],{},"Antes de instalar, entiende cómo funcionan las piezas juntas:",[27,28,33],"pre",{"className":29,"code":31,"language":32},[30],"language-text","┌──────────────────────────────────────────────────┐\n│                  Tu navegador                     │\n│              (dashboards Grafana)                  │\n└────────────────────┬─────────────────────────────┘\n                     │ :3000\n┌────────────────────▼─────────────────────────────┐\n│               Grafana                             │\n│    Visualización, dashboards, alertas             │\n└────────────────────┬─────────────────────────────┘\n                     │ consulta métricas\n┌────────────────────▼─────────────────────────────┐\n│              Prometheus                            │\n│    Recolección y almacenamiento de métricas       │\n│    (scraping cada 15s)                            │\n└───┬────────────────┬──────────────────┬──────────┘\n    │ :9100          │ :9100            │ :9100\n┌───▼───┐      ┌────▼────┐       ┌────▼────┐\n│Servidor│      │Servidor │       │Servidor │\n│  App   │      │   DB    │       │  Web    │\n│(node_  │      │(node_   │       │(node_   │\n│exporter│      │exporter)│       │exporter)│\n└────────┘      └─────────┘       └─────────┘\n","text",[34,35,31],"code",{"__ignoreMap":36},"",[12,38,39,43,44,47,48,51],{},[40,41,42],"strong",{},"node_exporter"," corre en cada servidor que quieres monitorear y expone métricas (CPU, RAM, disco, red) en un endpoint HTTP. ",[40,45,46],{},"Prometheus"," hace scraping de esos endpoints cada 15 segundos y almacena las métricas. ",[40,49,50],{},"Grafana"," consulta Prometheus y muestra los datos en dashboards.",[19,53,55],{"id":54},"requisitos-previos","Requisitos previos",[12,57,58],{},"Un servidor Ubuntu 24.04 dedicado al monitoreo (puede ser el mismo que corras otros servicios si es pequeño). Recomendamos al menos 2 GB de RAM y 20 GB de disco.",[19,60,62],{"id":61},"paso-1-instalar-node_exporter-en-los-servidores-a-monitorear","Paso 1: Instalar node_exporter en los servidores a monitorear",[12,64,65,66,69],{},"Instala node_exporter en ",[40,67,68],{},"cada servidor"," que quieras monitorear. Es un binario ligero que expone métricas del sistema operativo:",[27,71,75],{"className":72,"code":73,"language":74,"meta":36,"style":36},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark","# Descargar la última versión\ncd /tmp\ncurl -LO https://github.com/prometheus/node_exporter/releases/download/v1.8.2/node_exporter-1.8.2.linux-amd64.tar.gz\ntar xzf node_exporter-1.8.2.linux-amd64.tar.gz\n\n# Instalar\nsudo cp node_exporter-1.8.2.linux-amd64/node_exporter /usr/local/bin/\nsudo useradd --no-create-home --shell /bin/false node_exporter\n","bash",[34,76,77,86,97,111,123,130,136,151],{"__ignoreMap":36},[78,79,82],"span",{"class":80,"line":81},"line",1,[78,83,85],{"class":84},"sutJx","# Descargar la última versión\n",[78,87,89,93],{"class":80,"line":88},2,[78,90,92],{"class":91},"sptTA","cd",[78,94,96],{"class":95},"s_sjI"," /tmp\n",[78,98,100,104,108],{"class":80,"line":99},3,[78,101,103],{"class":102},"sbgvK","curl",[78,105,107],{"class":106},"stzsN"," -LO",[78,109,110],{"class":95}," https://github.com/prometheus/node_exporter/releases/download/v1.8.2/node_exporter-1.8.2.linux-amd64.tar.gz\n",[78,112,114,117,120],{"class":80,"line":113},4,[78,115,116],{"class":102},"tar",[78,118,119],{"class":95}," xzf",[78,121,122],{"class":95}," node_exporter-1.8.2.linux-amd64.tar.gz\n",[78,124,126],{"class":80,"line":125},5,[78,127,129],{"emptyLinePlaceholder":128},true,"\n",[78,131,133],{"class":80,"line":132},6,[78,134,135],{"class":84},"# Instalar\n",[78,137,139,142,145,148],{"class":80,"line":138},7,[78,140,141],{"class":102},"sudo",[78,143,144],{"class":95}," cp",[78,146,147],{"class":95}," node_exporter-1.8.2.linux-amd64/node_exporter",[78,149,150],{"class":95}," /usr/local/bin/\n",[78,152,154,156,159,162,165,168,172],{"class":80,"line":153},8,[78,155,141],{"class":102},[78,157,158],{"class":95}," useradd",[78,160,161],{"class":106}," --no-create-home",[78,163,164],{"class":106}," --shell",[78,166,167],{"class":95}," /bin/",[78,169,171],{"class":170},"s39Yj","false",[78,173,174],{"class":95}," node_exporter\n",[12,176,177],{},"Crea el servicio de systemd:",[27,179,181],{"className":72,"code":180,"language":74,"meta":36,"style":36},"sudo tee /etc/systemd/system/node_exporter.service > /dev/null \u003C\u003CEOF\n[Unit]\nDescription=Node Exporter\nWants=network-online.target\nAfter=network-online.target\n\n[Service]\nUser=node_exporter\nGroup=node_exporter\nType=simple\nExecStart=/usr/local/bin/node_exporter\n\n[Install]\nWantedBy=multi-user.target\nEOF\n",[34,182,183,207,212,217,222,227,231,236,241,247,253,259,264,270,276],{"__ignoreMap":36},[78,184,185,187,190,193,197,200,203],{"class":80,"line":81},[78,186,141],{"class":102},[78,188,189],{"class":95}," tee",[78,191,192],{"class":95}," /etc/systemd/system/node_exporter.service",[78,194,196],{"class":195},"smGrS"," >",[78,198,199],{"class":95}," /dev/null",[78,201,202],{"class":195}," \u003C\u003C",[78,204,206],{"class":205},"sjJ54","EOF\n",[78,208,209],{"class":80,"line":88},[78,210,211],{"class":95},"[Unit]\n",[78,213,214],{"class":80,"line":99},[78,215,216],{"class":95},"Description=Node Exporter\n",[78,218,219],{"class":80,"line":113},[78,220,221],{"class":95},"Wants=network-online.target\n",[78,223,224],{"class":80,"line":125},[78,225,226],{"class":95},"After=network-online.target\n",[78,228,229],{"class":80,"line":132},[78,230,129],{"emptyLinePlaceholder":128},[78,232,233],{"class":80,"line":138},[78,234,235],{"class":95},"[Service]\n",[78,237,238],{"class":80,"line":153},[78,239,240],{"class":95},"User=node_exporter\n",[78,242,244],{"class":80,"line":243},9,[78,245,246],{"class":95},"Group=node_exporter\n",[78,248,250],{"class":80,"line":249},10,[78,251,252],{"class":95},"Type=simple\n",[78,254,256],{"class":80,"line":255},11,[78,257,258],{"class":95},"ExecStart=/usr/local/bin/node_exporter\n",[78,260,262],{"class":80,"line":261},12,[78,263,129],{"emptyLinePlaceholder":128},[78,265,267],{"class":80,"line":266},13,[78,268,269],{"class":95},"[Install]\n",[78,271,273],{"class":80,"line":272},14,[78,274,275],{"class":95},"WantedBy=multi-user.target\n",[78,277,279],{"class":80,"line":278},15,[78,280,206],{"class":205},[12,282,283],{},"Arranca y habilita el servicio:",[27,285,287],{"className":72,"code":286,"language":74,"meta":36,"style":36},"sudo systemctl daemon-reload\nsudo systemctl enable --now node_exporter\n",[34,288,289,299],{"__ignoreMap":36},[78,290,291,293,296],{"class":80,"line":81},[78,292,141],{"class":102},[78,294,295],{"class":95}," systemctl",[78,297,298],{"class":95}," daemon-reload\n",[78,300,301,303,305,308,311],{"class":80,"line":88},[78,302,141],{"class":102},[78,304,295],{"class":95},[78,306,307],{"class":95}," enable",[78,309,310],{"class":106}," --now",[78,312,174],{"class":95},[12,314,315],{},"Verifica que está corriendo:",[27,317,319],{"className":72,"code":318,"language":74,"meta":36,"style":36},"curl http://localhost:9100/metrics | head -20\n",[34,320,321],{"__ignoreMap":36},[78,322,323,325,328,331,334],{"class":80,"line":81},[78,324,103],{"class":102},[78,326,327],{"class":95}," http://localhost:9100/metrics",[78,329,330],{"class":195}," |",[78,332,333],{"class":102}," head",[78,335,336],{"class":106}," -20\n",[12,338,339,340,343,344,347],{},"Deberías ver líneas con métricas como ",[34,341,342],{},"node_cpu_seconds_total",", ",[34,345,346],{},"node_memory_MemTotal_bytes",", etc.",[349,350,353,362,408],"alert",{"title":351,"type":352},"Firewall","info",[12,354,355,356,361],{},"node_exporter escucha en el puerto 9100. Asegúrate de que Prometheus pueda acceder a este puerto. Con ",[357,358,360],"a",{"href":359},"/blog/configurar-firewall-ufw-linux","UFW",":",[27,363,365],{"className":72,"code":364,"language":74,"meta":36,"style":36},"sudo ufw allow from 10.0.1.5 to any port 9100 comment 'Prometheus scraping'\n",[34,366,367],{"__ignoreMap":36},[78,368,369,371,374,377,380,384,387,390,393,396,399,402,405],{"class":80,"line":81},[78,370,141],{"class":102},[78,372,373],{"class":95}," ufw",[78,375,376],{"class":95}," allow",[78,378,379],{"class":95}," from",[78,381,383],{"class":382},"srdBf"," 10.0.1.5",[78,385,386],{"class":95}," to",[78,388,389],{"class":95}," any",[78,391,392],{"class":95}," port",[78,394,395],{"class":382}," 9100",[78,397,398],{"class":95}," comment",[78,400,401],{"class":205}," '",[78,403,404],{"class":95},"Prometheus scraping",[78,406,407],{"class":205},"'\n",[12,409,410],{},"Solo permite acceso desde la IP del servidor de Prometheus — no expongas el puerto a internet.",[412,413],"ad-banner",{},[19,415,417],{"id":416},"paso-2-instalar-prometheus","Paso 2: Instalar Prometheus",[12,419,420,421,424],{},"Ahora en el ",[40,422,423],{},"servidor de monitoreo",", instala Prometheus:",[27,426,428],{"className":72,"code":427,"language":74,"meta":36,"style":36},"cd /tmp\ncurl -LO https://github.com/prometheus/prometheus/releases/download/v2.54.0/prometheus-2.54.0.linux-amd64.tar.gz\ntar xzf prometheus-2.54.0.linux-amd64.tar.gz\n\nsudo cp prometheus-2.54.0.linux-amd64/{prometheus,promtool} /usr/local/bin/\nsudo mkdir -p /etc/prometheus /var/lib/prometheus\nsudo cp -r prometheus-2.54.0.linux-amd64/{consoles,console_libraries} /etc/prometheus/\nsudo useradd --no-create-home --shell /bin/false prometheus\nsudo chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus\n",[34,429,430,436,445,454,458,469,485,500,517],{"__ignoreMap":36},[78,431,432,434],{"class":80,"line":81},[78,433,92],{"class":91},[78,435,96],{"class":95},[78,437,438,440,442],{"class":80,"line":88},[78,439,103],{"class":102},[78,441,107],{"class":106},[78,443,444],{"class":95}," https://github.com/prometheus/prometheus/releases/download/v2.54.0/prometheus-2.54.0.linux-amd64.tar.gz\n",[78,446,447,449,451],{"class":80,"line":99},[78,448,116],{"class":102},[78,450,119],{"class":95},[78,452,453],{"class":95}," prometheus-2.54.0.linux-amd64.tar.gz\n",[78,455,456],{"class":80,"line":113},[78,457,129],{"emptyLinePlaceholder":128},[78,459,460,462,464,467],{"class":80,"line":125},[78,461,141],{"class":102},[78,463,144],{"class":95},[78,465,466],{"class":95}," prometheus-2.54.0.linux-amd64/{prometheus,promtool}",[78,468,150],{"class":95},[78,470,471,473,476,479,482],{"class":80,"line":132},[78,472,141],{"class":102},[78,474,475],{"class":95}," mkdir",[78,477,478],{"class":106}," -p",[78,480,481],{"class":95}," /etc/prometheus",[78,483,484],{"class":95}," /var/lib/prometheus\n",[78,486,487,489,491,494,497],{"class":80,"line":138},[78,488,141],{"class":102},[78,490,144],{"class":95},[78,492,493],{"class":106}," -r",[78,495,496],{"class":95}," prometheus-2.54.0.linux-amd64/{consoles,console_libraries}",[78,498,499],{"class":95}," /etc/prometheus/\n",[78,501,502,504,506,508,510,512,514],{"class":80,"line":153},[78,503,141],{"class":102},[78,505,158],{"class":95},[78,507,161],{"class":106},[78,509,164],{"class":106},[78,511,167],{"class":95},[78,513,171],{"class":170},[78,515,516],{"class":95}," prometheus\n",[78,518,519,521,524,527,530,532],{"class":80,"line":243},[78,520,141],{"class":102},[78,522,523],{"class":95}," chown",[78,525,526],{"class":106}," -R",[78,528,529],{"class":95}," prometheus:prometheus",[78,531,481],{"class":95},[78,533,484],{"class":95},[12,535,536],{},"Crea el archivo de configuración:",[27,538,540],{"className":72,"code":539,"language":74,"meta":36,"style":36},"sudo tee /etc/prometheus/prometheus.yml > /dev/null \u003C\u003CEOF\nglobal:\n  scrape_interval: 15s\n  evaluation_interval: 15s\n\nscrape_configs:\n  # Monitorear el propio Prometheus\n  - job_name: 'prometheus'\n    static_configs:\n      - targets: ['localhost:9090']\n\n  # Servidores Linux\n  - job_name: 'servidores'\n    static_configs:\n      - targets:\n          - '10.0.1.10:9100'   # Servidor App\n          - '10.0.1.11:9100'   # Servidor DB\n          - '10.0.1.12:9100'   # Servidor Web\n        labels:\n          env: 'produccion'\n\n      - targets:\n          - '10.0.1.20:9100'   # Servidor Dev\n        labels:\n          env: 'desarrollo'\nEOF\n",[34,541,542,559,564,569,574,578,583,588,593,598,603,607,612,617,621,626,632,638,644,650,656,661,666,672,677,683],{"__ignoreMap":36},[78,543,544,546,548,551,553,555,557],{"class":80,"line":81},[78,545,141],{"class":102},[78,547,189],{"class":95},[78,549,550],{"class":95}," /etc/prometheus/prometheus.yml",[78,552,196],{"class":195},[78,554,199],{"class":95},[78,556,202],{"class":195},[78,558,206],{"class":205},[78,560,561],{"class":80,"line":88},[78,562,563],{"class":95},"global:\n",[78,565,566],{"class":80,"line":99},[78,567,568],{"class":95},"  scrape_interval: 15s\n",[78,570,571],{"class":80,"line":113},[78,572,573],{"class":95},"  evaluation_interval: 15s\n",[78,575,576],{"class":80,"line":125},[78,577,129],{"emptyLinePlaceholder":128},[78,579,580],{"class":80,"line":132},[78,581,582],{"class":95},"scrape_configs:\n",[78,584,585],{"class":80,"line":138},[78,586,587],{"class":95},"  # Monitorear el propio Prometheus\n",[78,589,590],{"class":80,"line":153},[78,591,592],{"class":95},"  - job_name: 'prometheus'\n",[78,594,595],{"class":80,"line":243},[78,596,597],{"class":95},"    static_configs:\n",[78,599,600],{"class":80,"line":249},[78,601,602],{"class":95},"      - targets: ['localhost:9090']\n",[78,604,605],{"class":80,"line":255},[78,606,129],{"emptyLinePlaceholder":128},[78,608,609],{"class":80,"line":261},[78,610,611],{"class":95},"  # Servidores Linux\n",[78,613,614],{"class":80,"line":266},[78,615,616],{"class":95},"  - job_name: 'servidores'\n",[78,618,619],{"class":80,"line":272},[78,620,597],{"class":95},[78,622,623],{"class":80,"line":278},[78,624,625],{"class":95},"      - targets:\n",[78,627,629],{"class":80,"line":628},16,[78,630,631],{"class":95},"          - '10.0.1.10:9100'   # Servidor App\n",[78,633,635],{"class":80,"line":634},17,[78,636,637],{"class":95},"          - '10.0.1.11:9100'   # Servidor DB\n",[78,639,641],{"class":80,"line":640},18,[78,642,643],{"class":95},"          - '10.0.1.12:9100'   # Servidor Web\n",[78,645,647],{"class":80,"line":646},19,[78,648,649],{"class":95},"        labels:\n",[78,651,653],{"class":80,"line":652},20,[78,654,655],{"class":95},"          env: 'produccion'\n",[78,657,659],{"class":80,"line":658},21,[78,660,129],{"emptyLinePlaceholder":128},[78,662,664],{"class":80,"line":663},22,[78,665,625],{"class":95},[78,667,669],{"class":80,"line":668},23,[78,670,671],{"class":95},"          - '10.0.1.20:9100'   # Servidor Dev\n",[78,673,675],{"class":80,"line":674},24,[78,676,649],{"class":95},[78,678,680],{"class":80,"line":679},25,[78,681,682],{"class":95},"          env: 'desarrollo'\n",[78,684,686],{"class":80,"line":685},26,[78,687,206],{"class":205},[12,689,177],{},[27,691,693],{"className":72,"code":692,"language":74,"meta":36,"style":36},"sudo tee /etc/systemd/system/prometheus.service > /dev/null \u003C\u003CEOF\n[Unit]\nDescription=Prometheus\nWants=network-online.target\nAfter=network-online.target\n\n[Service]\nUser=prometheus\nGroup=prometheus\nType=simple\nExecStart=/usr/local/bin/prometheus \\\n  --config.file=/etc/prometheus/prometheus.yml \\\n  --storage.tsdb.path=/var/lib/prometheus \\\n  --storage.tsdb.retention.time=30d \\\n  --web.enable-lifecycle\n\n[Install]\nWantedBy=multi-user.target\nEOF\n",[34,694,695,712,716,721,725,729,733,737,742,747,751,760,767,774,781,786,790,794,798],{"__ignoreMap":36},[78,696,697,699,701,704,706,708,710],{"class":80,"line":81},[78,698,141],{"class":102},[78,700,189],{"class":95},[78,702,703],{"class":95}," /etc/systemd/system/prometheus.service",[78,705,196],{"class":195},[78,707,199],{"class":95},[78,709,202],{"class":195},[78,711,206],{"class":205},[78,713,714],{"class":80,"line":88},[78,715,211],{"class":95},[78,717,718],{"class":80,"line":99},[78,719,720],{"class":95},"Description=Prometheus\n",[78,722,723],{"class":80,"line":113},[78,724,221],{"class":95},[78,726,727],{"class":80,"line":125},[78,728,226],{"class":95},[78,730,731],{"class":80,"line":132},[78,732,129],{"emptyLinePlaceholder":128},[78,734,735],{"class":80,"line":138},[78,736,235],{"class":95},[78,738,739],{"class":80,"line":153},[78,740,741],{"class":95},"User=prometheus\n",[78,743,744],{"class":80,"line":243},[78,745,746],{"class":95},"Group=prometheus\n",[78,748,749],{"class":80,"line":249},[78,750,252],{"class":95},[78,752,753,756],{"class":80,"line":255},[78,754,755],{"class":95},"ExecStart=/usr/local/bin/prometheus ",[78,757,759],{"class":758},"s_hVV","\\\n",[78,761,762,765],{"class":80,"line":261},[78,763,764],{"class":95},"  --config.file=/etc/prometheus/prometheus.yml ",[78,766,759],{"class":758},[78,768,769,772],{"class":80,"line":266},[78,770,771],{"class":95},"  --storage.tsdb.path=/var/lib/prometheus ",[78,773,759],{"class":758},[78,775,776,779],{"class":80,"line":272},[78,777,778],{"class":95},"  --storage.tsdb.retention.time=30d ",[78,780,759],{"class":758},[78,782,783],{"class":80,"line":278},[78,784,785],{"class":95},"  --web.enable-lifecycle\n",[78,787,788],{"class":80,"line":628},[78,789,129],{"emptyLinePlaceholder":128},[78,791,792],{"class":80,"line":634},[78,793,269],{"class":95},[78,795,796],{"class":80,"line":640},[78,797,275],{"class":95},[78,799,800],{"class":80,"line":646},[78,801,206],{"class":205},[12,803,804],{},"Arranca Prometheus:",[27,806,808],{"className":72,"code":807,"language":74,"meta":36,"style":36},"sudo systemctl daemon-reload\nsudo systemctl enable --now prometheus\n",[34,809,810,818],{"__ignoreMap":36},[78,811,812,814,816],{"class":80,"line":81},[78,813,141],{"class":102},[78,815,295],{"class":95},[78,817,298],{"class":95},[78,819,820,822,824,826,828],{"class":80,"line":88},[78,821,141],{"class":102},[78,823,295],{"class":95},[78,825,307],{"class":95},[78,827,310],{"class":106},[78,829,516],{"class":95},[12,831,832,833,836,837,840,841,844],{},"Verifica en tu navegador: ",[34,834,835],{},"http://tu-servidor:9090",". Deberías ver la interfaz web de Prometheus. Ve a ",[40,838,839],{},"Status → Targets"," y confirma que todos tus servidores aparecen como ",[34,842,843],{},"UP",".",[349,846,849],{"title":847,"type":848},"Retención de datos","warning",[12,850,851,852,855],{},"La configuración ",[34,853,854],{},"--storage.tsdb.retention.time=30d"," conserva 30 días de métricas. Ajusta según tu espacio en disco. Prometheus usa aproximadamente 1-2 bytes por sample, así que 3 servidores con scraping cada 15s generan ~500 MB/mes.",[19,857,859],{"id":858},"paso-3-instalar-grafana","Paso 3: Instalar Grafana",[12,861,862],{},"En el mismo servidor de monitoreo:",[27,864,866],{"className":72,"code":865,"language":74,"meta":36,"style":36},"# Agregar repositorio oficial de Grafana\nsudo apt install -y apt-transport-https software-properties-common\nsudo mkdir -p /etc/apt/keyrings/\nwget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null\necho \"deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main\" | sudo tee /etc/apt/sources.list.d/grafana.list\n\n# Instalar\nsudo apt update\nsudo apt install grafana -y\n\n# Arrancar\nsudo systemctl enable --now grafana-server\n",[34,867,868,873,892,903,943,966,970,974,983,997,1001,1006],{"__ignoreMap":36},[78,869,870],{"class":80,"line":81},[78,871,872],{"class":84},"# Agregar repositorio oficial de Grafana\n",[78,874,875,877,880,883,886,889],{"class":80,"line":88},[78,876,141],{"class":102},[78,878,879],{"class":95}," apt",[78,881,882],{"class":95}," install",[78,884,885],{"class":106}," -y",[78,887,888],{"class":95}," apt-transport-https",[78,890,891],{"class":95}," software-properties-common\n",[78,893,894,896,898,900],{"class":80,"line":99},[78,895,141],{"class":102},[78,897,475],{"class":95},[78,899,478],{"class":106},[78,901,902],{"class":95}," /etc/apt/keyrings/\n",[78,904,905,908,911,914,917,920,922,925,928,930,933,935,938,940],{"class":80,"line":113},[78,906,907],{"class":102},"wget",[78,909,910],{"class":106}," -q",[78,912,913],{"class":106}," -O",[78,915,916],{"class":95}," -",[78,918,919],{"class":95}," https://apt.grafana.com/gpg.key",[78,921,330],{"class":195},[78,923,924],{"class":102}," gpg",[78,926,927],{"class":106}," --dearmor",[78,929,330],{"class":195},[78,931,932],{"class":102}," sudo",[78,934,189],{"class":95},[78,936,937],{"class":95}," /etc/apt/keyrings/grafana.gpg",[78,939,196],{"class":195},[78,941,942],{"class":95}," /dev/null\n",[78,944,945,948,951,954,957,959,961,963],{"class":80,"line":125},[78,946,947],{"class":91},"echo",[78,949,950],{"class":205}," \"",[78,952,953],{"class":95},"deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main",[78,955,956],{"class":205},"\"",[78,958,330],{"class":195},[78,960,932],{"class":102},[78,962,189],{"class":95},[78,964,965],{"class":95}," /etc/apt/sources.list.d/grafana.list\n",[78,967,968],{"class":80,"line":132},[78,969,129],{"emptyLinePlaceholder":128},[78,971,972],{"class":80,"line":138},[78,973,135],{"class":84},[78,975,976,978,980],{"class":80,"line":153},[78,977,141],{"class":102},[78,979,879],{"class":95},[78,981,982],{"class":95}," update\n",[78,984,985,987,989,991,994],{"class":80,"line":243},[78,986,141],{"class":102},[78,988,879],{"class":95},[78,990,882],{"class":95},[78,992,993],{"class":95}," grafana",[78,995,996],{"class":106}," -y\n",[78,998,999],{"class":80,"line":249},[78,1000,129],{"emptyLinePlaceholder":128},[78,1002,1003],{"class":80,"line":255},[78,1004,1005],{"class":84},"# Arrancar\n",[78,1007,1008,1010,1012,1014,1016],{"class":80,"line":261},[78,1009,141],{"class":102},[78,1011,295],{"class":95},[78,1013,307],{"class":95},[78,1015,310],{"class":106},[78,1017,1018],{"class":95}," grafana-server\n",[12,1020,1021,1022,1025,1026,1029,1030,1032],{},"Accede a Grafana en ",[34,1023,1024],{},"http://tu-servidor:3000",". Las credenciales por defecto son ",[34,1027,1028],{},"admin"," / ",[34,1031,1028],{}," — te pedirá cambiar la contraseña al primer login.",[412,1034],{},[19,1036,1038],{"id":1037},"paso-4-conectar-grafana-con-prometheus","Paso 4: Conectar Grafana con Prometheus",[1040,1041,1042,1049,1054,1060],"ol",{},[1043,1044,1045,1046],"li",{},"En Grafana, ve a ",[40,1047,1048],{},"Connections → Data sources → Add data source",[1043,1050,1051,1052],{},"Selecciona ",[40,1053,46],{},[1043,1055,1056,1057],{},"En la URL pon: ",[34,1058,1059],{},"http://localhost:9090",[1043,1061,1062,1063,1066],{},"Clic en ",[40,1064,1065],{},"Save & test"," — debería mostrar \"Data source is working\"",[19,1068,1070],{"id":1069},"paso-5-importar-un-dashboard-profesional","Paso 5: Importar un dashboard profesional",[12,1072,1073,1074,1077],{},"En lugar de crear un dashboard desde cero, Grafana tiene una biblioteca con miles de dashboards pre-construidos. El más popular para node_exporter es el ",[40,1075,1076],{},"Node Exporter Full"," (ID: 1860):",[1040,1079,1080,1086,1096,1099],{},[1043,1081,1082,1083],{},"Ve a ",[40,1084,1085],{},"Dashboards → Import",[1043,1087,1088,1089,1092,1093],{},"Escribe el ID ",[34,1090,1091],{},"1860"," y clic en ",[40,1094,1095],{},"Load",[1043,1097,1098],{},"Selecciona tu data source de Prometheus",[1043,1100,1062,1101],{},[40,1102,1103],{},"Import",[12,1105,1106],{},"En segundos tendrás un dashboard profesional con métricas de CPU, RAM, disco, red, filesystem, I/O y más — para cada servidor.",[1108,1109,1111],"h3",{"id":1110},"otros-dashboards-recomendados","Otros dashboards recomendados",[1113,1114,1115,1131],"table",{},[1116,1117,1118],"thead",{},[1119,1120,1121,1125,1128],"tr",{},[1122,1123,1124],"th",{},"ID",[1122,1126,1127],{},"Nombre",[1122,1129,1130],{},"Uso",[1132,1133,1134,1144,1155,1166],"tbody",{},[1119,1135,1136,1139,1141],{},[1137,1138,1091],"td",{},[1137,1140,1076],{},[1137,1142,1143],{},"Métricas detalladas por servidor",[1119,1145,1146,1149,1152],{},[1137,1147,1148],{},"11074",[1137,1150,1151],{},"Node Exporter Dashboard",[1137,1153,1154],{},"Vista compacta por servidor",[1119,1156,1157,1160,1163],{},[1137,1158,1159],{},"15172",[1137,1161,1162],{},"Node Exporter Overview",[1137,1164,1165],{},"Vista general de múltiples servidores",[1119,1167,1168,1171,1174],{},[1137,1169,1170],{},"3662",[1137,1172,1173],{},"Prometheus 2.0 Overview",[1137,1175,1176],{},"Métricas del propio Prometheus",[19,1178,1180],{"id":1179},"paso-6-configurar-alertas","Paso 6: Configurar alertas",[12,1182,1183],{},"Grafana puede enviarte alertas cuando una métrica supera un umbral. Configura las alertas más importantes:",[1108,1185,1187],{"id":1186},"alerta-de-disco-al-85","Alerta de disco al 85%",[1040,1189,1190,1196,1202],{},[1043,1191,1192,1193],{},"En un panel del dashboard, clic en ",[40,1194,1195],{},"Edit",[1043,1197,1198,1199],{},"Ve a la pestaña ",[40,1200,1201],{},"Alert",[1043,1203,1204,1205],{},"Crea una nueva regla:\n",[1206,1207,1208,1214,1224],"ul",{},[1043,1209,1210,1211],{},"Condición: ",[34,1212,1213],{},"avg(1 - (node_filesystem_avail_bytes / node_filesystem_size_bytes)) > 0.85",[1043,1215,1216,1217,1220,1221],{},"Evaluar cada: ",[34,1218,1219],{},"1m"," por ",[34,1222,1223],{},"5m",[1043,1225,1226,1227,1231,1232,956],{},"Mensaje: \"Disco al ",[1228,1229],"binding",{"value":1230},"$value"," en ",[1228,1233],{"value":1234},"$labels.instance",[1108,1236,1238],{"id":1237},"alerta-de-memoria-al-90","Alerta de memoria al 90%",[27,1240,1244],{"className":1241,"code":1242,"language":1243,"meta":36,"style":36},"language-promql shiki shiki-themes material-theme-lighter github-light github-dark","(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) > 0.90\n","promql",[34,1245,1246],{"__ignoreMap":36},[78,1247,1248],{"class":80,"line":81},[78,1249,1242],{},[1108,1251,1253],{"id":1252},"alerta-de-cpu-sostenido-al-90","Alerta de CPU sostenido al 90%",[27,1255,1257],{"className":1241,"code":1256,"language":1243,"meta":36,"style":36},"100 - (avg by(instance) (rate(node_cpu_seconds_total{mode=\"idle\"}[5m])) * 100) > 90\n",[34,1258,1259],{"__ignoreMap":36},[78,1260,1261],{"class":80,"line":81},[78,1262,1256],{},[1108,1264,1266],{"id":1265},"canal-de-notificación","Canal de notificación",[12,1268,1269,1270,361],{},"Configura dónde quieres recibir las alertas en ",[40,1271,1272],{},"Alerting → Contact points",[1206,1274,1275,1281,1290,1296],{},[1043,1276,1277,1280],{},[40,1278,1279],{},"Slack"," — webhook a un canal de #alertas",[1043,1282,1283,1286,1287],{},[40,1284,1285],{},"Email"," — requiere configurar SMTP en ",[34,1288,1289],{},"/etc/grafana/grafana.ini",[1043,1291,1292,1295],{},[40,1293,1294],{},"Telegram"," — bot de Telegram con chat ID",[1043,1297,1298,1301],{},[40,1299,1300],{},"Webhook"," — para integrar con cualquier sistema",[19,1303,1305],{"id":1304},"paso-7-monitorear-servicios-adicionales","Paso 7: Monitorear servicios adicionales",[12,1307,1308],{},"node_exporter cubre el sistema operativo. Para servicios específicos, agrega exporters:",[1108,1310,1312],{"id":1311},"postgresql","PostgreSQL",[27,1314,1316],{"className":72,"code":1315,"language":74,"meta":36,"style":36},"# Instalar postgres_exporter\ndocker run -d --name pg_exporter \\\n  -e DATA_SOURCE_NAME=\"postgresql://monitor:password@localhost:5432/postgres?sslmode=disable\" \\\n  -p 9187:9187 \\\n  prometheuscommunity/postgres-exporter\n",[34,1317,1318,1323,1343,1360,1370],{"__ignoreMap":36},[78,1319,1320],{"class":80,"line":81},[78,1321,1322],{"class":84},"# Instalar postgres_exporter\n",[78,1324,1325,1328,1331,1334,1337,1340],{"class":80,"line":88},[78,1326,1327],{"class":102},"docker",[78,1329,1330],{"class":95}," run",[78,1332,1333],{"class":106}," -d",[78,1335,1336],{"class":106}," --name",[78,1338,1339],{"class":95}," pg_exporter",[78,1341,1342],{"class":758}," \\\n",[78,1344,1345,1348,1351,1353,1356,1358],{"class":80,"line":99},[78,1346,1347],{"class":106},"  -e",[78,1349,1350],{"class":95}," DATA_SOURCE_NAME=",[78,1352,956],{"class":205},[78,1354,1355],{"class":95},"postgresql://monitor:password@localhost:5432/postgres?sslmode=disable",[78,1357,956],{"class":205},[78,1359,1342],{"class":758},[78,1361,1362,1365,1368],{"class":80,"line":113},[78,1363,1364],{"class":106},"  -p",[78,1366,1367],{"class":95}," 9187:9187",[78,1369,1342],{"class":758},[78,1371,1372],{"class":80,"line":125},[78,1373,1374],{"class":95},"  prometheuscommunity/postgres-exporter\n",[12,1376,1377,1378,361],{},"Agregar a ",[34,1379,1380],{},"prometheus.yml",[27,1382,1386],{"className":1383,"code":1384,"language":1385,"meta":36,"style":36},"language-yaml shiki shiki-themes material-theme-lighter github-light github-dark","  - job_name: 'postgresql'\n    static_configs:\n      - targets: ['10.0.1.11:9187']\n","yaml",[34,1387,1388,1406,1414],{"__ignoreMap":36},[78,1389,1390,1394,1398,1400,1402,1404],{"class":80,"line":81},[78,1391,1393],{"class":1392},"sP7_E","  -",[78,1395,1397],{"class":1396},"sQzsp"," job_name",[78,1399,361],{"class":1392},[78,1401,401],{"class":205},[78,1403,1311],{"class":95},[78,1405,407],{"class":205},[78,1407,1408,1411],{"class":80,"line":88},[78,1409,1410],{"class":1396},"    static_configs",[78,1412,1413],{"class":1392},":\n",[78,1415,1416,1419,1422,1424,1427,1430,1433,1435],{"class":80,"line":99},[78,1417,1418],{"class":1392},"      -",[78,1420,1421],{"class":1396}," targets",[78,1423,361],{"class":1392},[78,1425,1426],{"class":1392}," [",[78,1428,1429],{"class":205},"'",[78,1431,1432],{"class":95},"10.0.1.11:9187",[78,1434,1429],{"class":205},[78,1436,1437],{"class":1392},"]\n",[12,1439,1440,1441,1444],{},"Dashboard recomendado: ID ",[34,1442,1443],{},"9628"," (PostgreSQL Database).",[1108,1446,1448],{"id":1447},"nginx","Nginx",[12,1450,1451,1452,1455,1456,361],{},"Habilita ",[34,1453,1454],{},"stub_status"," en Nginx y usa ",[34,1457,1458],{},"nginx-prometheus-exporter",[27,1460,1462],{"className":72,"code":1461,"language":74,"meta":36,"style":36},"docker run -d --name nginx_exporter \\\n  -p 9113:9113 \\\n  nginx/nginx-prometheus-exporter \\\n  --nginx.scrape-uri=http://10.0.1.12/nginx_status\n",[34,1463,1464,1479,1488,1495],{"__ignoreMap":36},[78,1465,1466,1468,1470,1472,1474,1477],{"class":80,"line":81},[78,1467,1327],{"class":102},[78,1469,1330],{"class":95},[78,1471,1333],{"class":106},[78,1473,1336],{"class":106},[78,1475,1476],{"class":95}," nginx_exporter",[78,1478,1342],{"class":758},[78,1480,1481,1483,1486],{"class":80,"line":88},[78,1482,1364],{"class":106},[78,1484,1485],{"class":95}," 9113:9113",[78,1487,1342],{"class":758},[78,1489,1490,1493],{"class":80,"line":99},[78,1491,1492],{"class":95},"  nginx/nginx-prometheus-exporter",[78,1494,1342],{"class":758},[78,1496,1497],{"class":80,"line":113},[78,1498,1499],{"class":106},"  --nginx.scrape-uri=http://10.0.1.12/nginx_status\n",[1108,1501,1503],{"id":1502},"redis","Redis",[27,1505,1507],{"className":72,"code":1506,"language":74,"meta":36,"style":36},"docker run -d --name redis_exporter \\\n  -p 9121:9121 \\\n  oliver006/redis_exporter \\\n  --redis.addr=redis://10.0.1.11:6379\n",[34,1508,1509,1524,1533,1540],{"__ignoreMap":36},[78,1510,1511,1513,1515,1517,1519,1522],{"class":80,"line":81},[78,1512,1327],{"class":102},[78,1514,1330],{"class":95},[78,1516,1333],{"class":106},[78,1518,1336],{"class":106},[78,1520,1521],{"class":95}," redis_exporter",[78,1523,1342],{"class":758},[78,1525,1526,1528,1531],{"class":80,"line":88},[78,1527,1364],{"class":106},[78,1529,1530],{"class":95}," 9121:9121",[78,1532,1342],{"class":758},[78,1534,1535,1538],{"class":80,"line":99},[78,1536,1537],{"class":95},"  oliver006/redis_exporter",[78,1539,1342],{"class":758},[78,1541,1542],{"class":80,"line":113},[78,1543,1544],{"class":106},"  --redis.addr=redis://10.0.1.11:6379\n",[412,1546],{},[19,1548,1550],{"id":1549},"asegurar-grafana-en-producción","Asegurar Grafana en producción",[12,1552,1553],{},"Antes de exponer Grafana a tu equipo, aplica estas configuraciones de seguridad:",[27,1555,1559],{"className":1556,"code":1557,"language":1558,"meta":36,"style":36},"language-ini shiki shiki-themes material-theme-lighter github-light github-dark","# /etc/grafana/grafana.ini\n\n[security]\n# Deshabilitar registro público\ndisable_initial_admin_creation = false\nadmin_user = admin\n\n[users]\n# No permitir que los usuarios se registren solos\nallow_sign_up = false\n\n[auth.anonymous]\n# No permitir acceso anónimo\nenabled = false\n","ini",[34,1560,1561,1566,1570,1575,1580,1585,1590,1594,1599,1604,1609,1613,1618,1623],{"__ignoreMap":36},[78,1562,1563],{"class":80,"line":81},[78,1564,1565],{},"# /etc/grafana/grafana.ini\n",[78,1567,1568],{"class":80,"line":88},[78,1569,129],{"emptyLinePlaceholder":128},[78,1571,1572],{"class":80,"line":99},[78,1573,1574],{},"[security]\n",[78,1576,1577],{"class":80,"line":113},[78,1578,1579],{},"# Deshabilitar registro público\n",[78,1581,1582],{"class":80,"line":125},[78,1583,1584],{},"disable_initial_admin_creation = false\n",[78,1586,1587],{"class":80,"line":132},[78,1588,1589],{},"admin_user = admin\n",[78,1591,1592],{"class":80,"line":138},[78,1593,129],{"emptyLinePlaceholder":128},[78,1595,1596],{"class":80,"line":153},[78,1597,1598],{},"[users]\n",[78,1600,1601],{"class":80,"line":243},[78,1602,1603],{},"# No permitir que los usuarios se registren solos\n",[78,1605,1606],{"class":80,"line":249},[78,1607,1608],{},"allow_sign_up = false\n",[78,1610,1611],{"class":80,"line":255},[78,1612,129],{"emptyLinePlaceholder":128},[78,1614,1615],{"class":80,"line":261},[78,1616,1617],{},"[auth.anonymous]\n",[78,1619,1620],{"class":80,"line":266},[78,1621,1622],{},"# No permitir acceso anónimo\n",[78,1624,1625],{"class":80,"line":272},[78,1626,1627],{},"enabled = false\n",[12,1629,1630],{},"Reinicia Grafana después de cambiar la configuración:",[27,1632,1634],{"className":72,"code":1633,"language":74,"meta":36,"style":36},"sudo systemctl restart grafana-server\n",[34,1635,1636],{"__ignoreMap":36},[78,1637,1638,1640,1642,1645],{"class":80,"line":81},[78,1639,141],{"class":102},[78,1641,295],{"class":95},[78,1643,1644],{"class":95}," restart",[78,1646,1018],{"class":95},[12,1648,1649],{},"Para acceso externo, pon Grafana detrás de Nginx con HTTPS:",[27,1651,1654],{"className":1652,"code":1653,"language":1447,"meta":36,"style":36},"language-nginx shiki shiki-themes material-theme-lighter github-light github-dark","server {\n    listen 443 ssl;\n    server_name grafana.tuempresa.com;\n\n    ssl_certificate /etc/letsencrypt/live/grafana.tuempresa.com/fullchain.pem;\n    ssl_certificate_key /etc/letsencrypt/live/grafana.tuempresa.com/privkey.pem;\n\n    location / {\n        proxy_pass http://localhost:3000;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n    }\n\n    # WebSocket para live dashboards\n    location /api/live/ws {\n        proxy_pass http://localhost:3000;\n        proxy_http_version 1.1;\n        proxy_set_header Upgrade $http_upgrade;\n        proxy_set_header Connection \"upgrade\";\n    }\n}\n",[34,1655,1656,1661,1666,1671,1675,1680,1685,1689,1694,1699,1704,1709,1714,1718,1723,1728,1732,1737,1742,1747,1751],{"__ignoreMap":36},[78,1657,1658],{"class":80,"line":81},[78,1659,1660],{},"server {\n",[78,1662,1663],{"class":80,"line":88},[78,1664,1665],{},"    listen 443 ssl;\n",[78,1667,1668],{"class":80,"line":99},[78,1669,1670],{},"    server_name grafana.tuempresa.com;\n",[78,1672,1673],{"class":80,"line":113},[78,1674,129],{"emptyLinePlaceholder":128},[78,1676,1677],{"class":80,"line":125},[78,1678,1679],{},"    ssl_certificate /etc/letsencrypt/live/grafana.tuempresa.com/fullchain.pem;\n",[78,1681,1682],{"class":80,"line":132},[78,1683,1684],{},"    ssl_certificate_key /etc/letsencrypt/live/grafana.tuempresa.com/privkey.pem;\n",[78,1686,1687],{"class":80,"line":138},[78,1688,129],{"emptyLinePlaceholder":128},[78,1690,1691],{"class":80,"line":153},[78,1692,1693],{},"    location / {\n",[78,1695,1696],{"class":80,"line":243},[78,1697,1698],{},"        proxy_pass http://localhost:3000;\n",[78,1700,1701],{"class":80,"line":249},[78,1702,1703],{},"        proxy_set_header Host $host;\n",[78,1705,1706],{"class":80,"line":255},[78,1707,1708],{},"        proxy_set_header X-Real-IP $remote_addr;\n",[78,1710,1711],{"class":80,"line":261},[78,1712,1713],{},"    }\n",[78,1715,1716],{"class":80,"line":266},[78,1717,129],{"emptyLinePlaceholder":128},[78,1719,1720],{"class":80,"line":272},[78,1721,1722],{},"    # WebSocket para live dashboards\n",[78,1724,1725],{"class":80,"line":278},[78,1726,1727],{},"    location /api/live/ws {\n",[78,1729,1730],{"class":80,"line":628},[78,1731,1698],{},[78,1733,1734],{"class":80,"line":634},[78,1735,1736],{},"        proxy_http_version 1.1;\n",[78,1738,1739],{"class":80,"line":640},[78,1740,1741],{},"        proxy_set_header Upgrade $http_upgrade;\n",[78,1743,1744],{"class":80,"line":646},[78,1745,1746],{},"        proxy_set_header Connection \"upgrade\";\n",[78,1748,1749],{"class":80,"line":652},[78,1750,1713],{},[78,1752,1753],{"class":80,"line":658},[78,1754,1755],{},"}\n",[19,1757,1759],{"id":1758},"siguientes-pasos","Siguientes pasos",[12,1761,1762],{},"Con Prometheus y Grafana corriendo, puedes expandir tu monitoreo:",[1206,1764,1765,1771,1777,1787,1793],{},[1043,1766,1767,1770],{},[40,1768,1769],{},"Alertmanager"," — gestión avanzada de alertas con silencing, agrupación y escalamiento",[1043,1772,1773,1776],{},[40,1774,1775],{},"Loki"," — agregación de logs que se integra nativamente con Grafana (como un \"Prometheus para logs\")",[1043,1778,1779,1786],{},[40,1780,1781,1785],{},[357,1782,1784],{"href":1783},"/tecnologias/docker","Docker"," monitoring"," — cAdvisor para métricas de contenedores",[1043,1788,1789,1792],{},[40,1790,1791],{},"Blackbox Exporter"," — monitoreo de endpoints HTTP, TCP y DNS desde fuera (uptime monitoring)",[1043,1794,1795,1801],{},[40,1796,1797],{},[357,1798,1800],{"href":1799},"/servicios/infraestructura","Monitoreo profesional"," con Zabbix para monitoreo SNMP de switches, firewalls y UPS",[1803,1804],"call-to-action",{"description":1805,"eyebrow":1806,"icon":1807,"label":1808,"title":1809,"to":1810},"Implementamos Prometheus, Grafana y Zabbix con alertas proactivas, dashboards personalizados y soporte 24/7.","Monitoreo empresarial","i-lucide-activity","Solicitar evaluación","¿Necesitas monitoreo profesional para toda tu infraestructura?","/contacto",[1812,1813,1814],"style",{},"html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html pre.shiki code .sptTA, html code.shiki .sptTA{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .stzsN, html code.shiki .stzsN{--shiki-light:#91B859;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s39Yj, html code.shiki .s39Yj{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sQzsp, html code.shiki .sQzsp{--shiki-light:#E53935;--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":36,"searchDepth":88,"depth":99,"links":1816},[1817,1818,1819,1820,1821,1822,1823,1826,1832,1837,1838],{"id":21,"depth":88,"text":22},{"id":54,"depth":88,"text":55},{"id":61,"depth":88,"text":62},{"id":416,"depth":88,"text":417},{"id":858,"depth":88,"text":859},{"id":1037,"depth":88,"text":1038},{"id":1069,"depth":88,"text":1070,"children":1824},[1825],{"id":1110,"depth":99,"text":1111},{"id":1179,"depth":88,"text":1180,"children":1827},[1828,1829,1830,1831],{"id":1186,"depth":99,"text":1187},{"id":1237,"depth":99,"text":1238},{"id":1252,"depth":99,"text":1253},{"id":1265,"depth":99,"text":1266},{"id":1304,"depth":88,"text":1305,"children":1833},[1834,1835,1836],{"id":1311,"depth":99,"text":1312},{"id":1447,"depth":99,"text":1448},{"id":1502,"depth":99,"text":1503},{"id":1549,"depth":88,"text":1550},{"id":1758,"depth":88,"text":1759},"tutorial",{"title":1841,"description":1842,"label":1808,"to":1810,"icon":1807},"¿Necesitas monitoreo profesional para tu infraestructura?","Implementamos monitoreo con Prometheus, Grafana y Zabbix con alertas proactivas y dashboards personalizados para tu operación.","2026-02-05","Guía paso a paso para instalar Prometheus y Grafana en Ubuntu, configurar la recolección de métricas de servidores y crear dashboards de monitoreo profesionales.",false,"md",[1848,1851,1854,1857],{"question":1849,"answer":1850},"¿Cuál es la diferencia entre Prometheus y Grafana?","Prometheus recolecta y almacena las métricas — es la base de datos de series temporales que hace scraping a tus servidores cada N segundos. Grafana es la capa de visualización — lee los datos de Prometheus y los muestra en dashboards interactivos con gráficas, tablas y alertas. Se complementan, no se sustituyen.",{"question":1852,"answer":1853},"¿Prometheus consume muchos recursos?","Depende de la cantidad de métricas y la frecuencia de scraping. Para monitorear 5-10 servidores con scraping cada 15 segundos, Prometheus necesita alrededor de 1 GB de RAM y poco CPU. Para 50+ servidores con retención de 30 días, recomendamos 4 GB de RAM y almacenamiento SSD. Es mucho más ligero que herramientas comerciales equivalentes.",{"question":1855,"answer":1856},"¿Puedo monitorear servidores Windows con Prometheus?","Sí. Existe windows_exporter (antes wmi_exporter) que expone métricas de Windows en el formato que Prometheus espera — CPU, RAM, disco, servicios de Windows, IIS, SQL Server y más. Se instala como servicio de Windows y funciona igual que node_exporter en Linux.",{"question":1858,"answer":1859},"¿Grafana es gratuito?","Sí. Grafana OSS (open source) es completamente gratuito y cubre todas las necesidades de dashboards, alertas y visualización. Grafana Cloud y Grafana Enterprise son las versiones de pago con funcionalidades adicionales de gestión y escalamiento, pero para la mayoría de las empresas la versión open source es suficiente.","/images/blog/grafana-prometheus.jpg","Dashboard de Grafana mostrando métricas de CPU, RAM, disco y red de múltiples servidores en tiempo real",{},"/blog/tutorial/monitoreo-grafana-prometheus",{"title":5,"description":1844},"blog/tutorial/monitoreo-grafana-prometheus",[1867,1868,1869,1870,1871,1839],"monitoreo","grafana","prometheus","linux","servidores","vVahyEliww5YPx6DrpoqZCPMXvx9PMAYCtfubvK2A7c",{"path":1874,"title":1875},"/blog/tutorial/configurar-vpn-wireguard","Configurar VPN WireGuard en tu servidor en 10 minutos",{"path":1877,"title":1878},"/blog/tutorial/automatizar-ansible","Automatizar tareas de infraestructura con Ansible",[1880,1887,1894],{"path":1881,"title":1882,"description":1883,"date":1884,"category":1839,"image":1885,"imageAlt":1886,"readingTime":261},"/blog/tutorial/apis-rest-python-fastapi","Crear APIs REST con Python y FastAPI para integraciones empresariales","Guía paso a paso para construir una API REST profesional con Python y FastAPI que conecte tu ERP, CRM o cualquier sistema con validación, autenticación y documentación automática.","2026-03-04","/images/blog/fastapi-api-rest.jpg","Editor de código mostrando una API FastAPI con documentación Swagger generada automáticamente",{"path":1888,"title":1889,"description":1890,"date":1891,"category":1839,"image":1892,"imageAlt":1893,"readingTime":153},"/blog/tutorial/configurar-firewall-ufw-linux","Configurar firewall en Linux con UFW — reglas esenciales","Guía paso a paso para configurar UFW (Uncomplicated Firewall) en Ubuntu y Debian con las reglas esenciales para proteger servidores de producción.","2026-03-01","/images/blog/ufw-firewall-linux.jpg","Terminal de Linux mostrando reglas de firewall UFW activas protegiendo un servidor de producción",{"path":1895,"title":1896,"description":1897,"date":1898,"category":1839,"image":1899,"imageAlt":1900,"readingTime":249},"/blog/tutorial/traefik-reverse-proxy-docker","Configurar Traefik como reverse proxy para contenedores Docker","Guía paso a paso para instalar Traefik como reverse proxy con descubrimiento automático de contenedores Docker, SSL con Let's Encrypt y dashboard de monitoreo.","2026-02-28","/images/blog/traefik-docker.jpg","Dashboard de Traefik mostrando rutas automáticas hacia múltiples contenedores Docker con SSL activo"]