Индекс на дневникаDockup / бележка от практиката
Note / self-host-grafana

Как да хоствате Grafana самостоятелно през 2026 г.: табла, известия и устойчиво състояние

Разположете Grafana с правилен порт, надеждно хранилище, TLS, удостоверяване и резервни копия. Отстранявайте проблеми, когато таблата изчезнат заедно с SQLite файла в production.

Има две версии на „стартирана Grafana“: контейнерът съществува или услугата изпълнява реалната си задача. Важна е само втората. Тук доказателството е да добавите read-only data source, да запишете панел, да изпълните alert rule и да изпратите тестово известие чрез contact point.

Grafana служи за тази цел: табла и известия върху metrics, logs и traces. Разполагането трябва да запази компонентите зад това поведение; портът, volume-ът и сертификатът са входни параметри, а не резултатът.

Production конфигурация на Grafana

HTTP процесът на Grafana слуша на порт 3000; оставете този порт в application network и публикувайте само platform route. Мрежовият договор за Grafana включва достъпни data sources и SMTP, ако е необходимо изпращане на известия. Дръжте private endpoints във вътрешен DNS, разрешете само необходимите изходящи заявки и предоставете на Grafana service credential с ограничен обхват.

Опишете границата като кратък договор: кой отговаря за изискването, кои credential-и се използват, какъв timeout е приемлив и как изглежда отказът. След това изпълнете следната транзакция: добавете read-only data source, запишете панел, изпълнете alert rule и изпратете тестово известие чрез contact point. По време на изпълнението наблюдавайте query fan-out, интервалите за обновяване на таблата, изпълнението на известията и plugin memory, а не собствените съхранени metrics на Grafana, защото това натоварване дава по-полезен начален размер от idle container.

Стартирайте Grafana, без да скривате важните компоненти

Стартирайте Grafana така, че route-ът да остане private, докато bootstrap процесът завърши.

docker run -d \
  --name grafana \
  --restart unless-stopped \
  -p 127.0.0.1:3000:3000 \
  -v grafana-data:/var/lib/grafana \
  -e GF_SECURITY_ADMIN_PASSWORD=replace-with-a-long-random-value \
  grafana/grafana:latest

Ако процесът влиза в loop, сравнете очаквания user на image-а с owner-а на всеки mounted path. Ако остане активен, тествайте локално порт 3000 и след това преминете директно към workflow-а: добавете read-only data source, запишете панел, изпълнете alert rule и изпратете тестово известие чрез contact point. Фиксирайте версията на image-а едва след като тази end-to-end проверка премине успешно, и запишете точната конфигурация до услугата.

Задайте един каноничен адрес за Grafana

Издаването на TLS сертификат е само половината от route-а на Grafana. Задайте GF_SERVER_ROOT_URL на публичния HTTPS URL. Изпращайте трафика вътрешно към 3000 и предавайте външната схема, така че генерираните URL адреси и secure cookies да останат съгласувани.

Изпълнете целия сценарий за Grafana от чиста network среда, а не само началната страница. Грешка 502 или проблем със сертификата може да бъде изолирана чрез автоматична настройка на домейн и TLS. Ако трафикът достига до процеса, но таблата изчезват заедно със SQLite файла или OAuth callbacks използват localhost, диагностицирайте условието там, където възниква, вместо да наслагвате redirects.

Проектирайте възстановяването на Grafana преди стартирането

Надеждният набор за възстановяване включва database-а на Grafana, plugins и provisioned configuration. Монтирайте /var/lib/grafana преди bootstrap, запишете безвредни примерни данни и заменете container-а, за да докажете, че този path наистина е persistent. Volume-ът предпазва данните от подмяна на container-а, но не и от загуба на host-а, случайно изтриване или corruption на ниво приложение.

Правете backups, които разбират data source-а: използвайте logical dumps за активни databases, когато е необходимо, и копирайте файлове само от consistent state. Съхранявайте едно encrypted копие извън host-а на Grafana. Критерият за приемане на restore е конкретен — users, folders, dashboards, alert rules и metadata за data sources се възстановяват, а тестовият alert се изпълнява. Ръководството за backup, проверен чрез restore обяснява защо единствено успешното изпълнение на job не е достатъчно.

Премахнете временния достъп за настройка

Сигурното разполагане на Grafana започва с премахване на излишните права. Не оставяйте admin/admin и не разрешавайте anonymous access по невнимание; вместо това сменете bootstrap admin password, ограничете редактирането на data sources и използвайте service-account tokens с ограничен обхват.

Сменете GF_SECURITY_ADMIN_PASSWORD веднага, съхранявайте го извън image-а и го ротирайте като administrator credential, ако бъде разкрит. Ограничете administrative routes, използвайте private DNS за зависимостите и прегледайте всеки bind mount. Когато logs се изпращат централно, филтрирайте secret-ите и private content-а, преди да напуснат сървъра.

Репетирайте рисковата промяна в Grafana

Работещият container е необходим, но не е достатъчен. Service-level indicator е успешното изпълнение на „добавяне на read-only data source, записване на панел, изпълнение на alert rule и изпращане на тестово известие чрез contact point“, а вероятните сигнали за натоварване са query fan-out, интервалите за обновяване на таблата, изпълнението на известията и plugin memory, а не собствените съхранени metrics на Grafana.

Управлението на промените е важно, защото database migrations на Grafana и plugin compatibility изискват поетапен upgrade със същите provisioning files. Запазете стария image, тествайте migrations върху копирано state и документирайте дали rollback се поддържа след промяна на schema. Ако таблата изчезват заедно със SQLite файла или OAuth callbacks използват localhost, диагностицирайте първата граница, която се различава от работещата среда.

Запишете deployment на Grafana, за който е доказано, че работи

За Grafana дефинирайте известна добра транзакция преди стартирането: добавете read-only data source, запишете панел, изпълнете alert rule и изпратете тестово известие чрез contact point. Съхранявайте нейните prerequisites, очаквания отговор и стъпките за cleanup във version control, без secret стойности. Фиксирайте image-а, използван за създаването на тази референтна конфигурация.

Използвайте транзакцията, за да валидирате заместващ deployment и независим restore. Възстановената услуга е приемлива само когато users, folders, dashboards, alert rules и metadata за data sources се върнат и тестовият alert се изпълни. Едновременно с това наблюдавайте query fan-out, интервалите за обновяване на таблата, изпълнението на известията и plugin memory, а не собствените съхранени metrics на Grafana, и превърнете най-бавната или най-ограничената част в service-level alert.

Тестът трябва да включва и негативен случай: временно откажете на test identity достъпа до достъпните data sources и SMTP, ако е необходимо изпращане на известия. Потвърдете, че Grafana генерира actionable error, като същевременно запазва данните, възстановете валидното условие и повторете известната добра транзакция. Съхраняването и на двата резултата предотвратява превръщането на повърхностен health endpoint в единственото доказателство за production средата.

Как Dockup премахва част от работата с Grafana

Routing, сертификатите, подмяната на услугата и прикаченото storage са подходящи цели за automation. Dockup се грижи за тях при Grafana и може да provision-не свързания managed database или да се свърже с услуги на собствения сървър на клиента.

Това, което не бива да измисля, е trust policy на Grafana. След deployment задайте GF_SERVER_ROOT_URL на публичния HTTPS URL, наложете тази граница — сменете bootstrap admin password, ограничете редактирането на data sources и използвайте service-account tokens с ограничен обхват — и проверете резултата от този сценарий: добавете read-only data source, запишете панел, изпълнете alert rule и изпратете тестово известие чрез contact point. Резултатът е one-click infrastructure с application-specific acceptance test.

Често задавани въпроси

От какво се нуждае Grafana за production deployment?

Маршрутизирайте Grafana container-а на порт 3000 през един HTTPS origin. Поддържащото мрежово изискване включва достъпни data sources и SMTP, ако е необходимо изпращане на известия. Не обявявайте Grafana за готова, докато не можете да добавите read-only data source, да запишете панел, да изпълните alert rule и да изпратите тестово известие чрез contact point.

Кои данни на Grafana трябва да бъдат включени в backup?

Запазете /var/lib/grafana и включете database-а на Grafana, plugins и provisioned configuration в един и същ recovery manifest. Един чист restore на Grafana е успешен само когато users, folders, dashboards, alert rules и metadata за data sources се върнат и тестовият alert се изпълни.

Необходим ли е HTTPS за Grafana зад reverse proxy?

Използвайте HTTPS за публичния origin на Grafana и оставете порт 3000 във вътрешния route. Приложете правилно настройката на Grafana: задайте GF_SERVER_ROOT_URL на публичния HTTPS URL. За Grafana HTTPS защитава credential-ите или user content-а при пренос и поддържа съгласувано клиентско поведение, чувствително към origin-а.

Как трябва да се тества upgrade на Grafana?

Възстановете текущото state на Grafana в изолиран deployment, приложете кандидат-версията и повторете acceptance transaction. Обърнете специално внимание, защото database migrations на Grafana и plugin compatibility изискват поетапен upgrade със същите provisioning files. Запазете предишния image на Grafana, докато границите на data migration и rollback не бъдат изяснени.