웹사이트 검색

Ubuntu 18.04에서 Grafana를 설치하고 보호하는 방법


작성자는 DOnations 프로그램에 쓰기를 선택했습니다.

소개

ElasticSearch. Grafana를 사용하면 데이터에 대한 경고, 알림 및 임시 필터를 생성하는 동시에 내장된 공유 기능을 통해 팀원과 더 쉽게 협업할 수 있습니다.

이 튜토리얼에서는 Grafana를 설치하고 Nginx 리버스 프록시로 보호합니다. Grafana를 설정하면 GitHub를 통해 사용자 인증을 구성할 수 있는 옵션이 제공되어 팀 권한을 보다 잘 구성할 수 있습니다.

전제 조건

이 자습서를 따르려면 다음이 필요합니다.

  • sudo 권한이 있는 루트가 아닌 사용자와 ufw로 구성된 방화벽을 포함하여 Ubuntu 18.04용 초기 서버 설정 가이드에 따라 설정된 Ubuntu 18.04 서버 1대.\n
  • 완전히 등록된 도메인 이름. 이 자습서에서는 전체적으로 your_domain을 사용합니다. Freenom에서 도메인 이름을 구입하거나 선택한 도메인 등록 기관을 사용할 수 있습니다.\n
  • 다음 DNS 레코드는 서버에 대해 설정됩니다. 추가 방법에 대한 자세한 내용은 DigitalOcean으로 호스트 이름을 설정하는 방법을 참조하십시오.\n
    • 서버의 공용 IP 주소를 가리키는 your_domain이 있는 A 레코드
    • 서버의 공용 IP 주소를 가리키는 www.your_domain이 있는 A 레코드

    도메인의 서버 블록을 따라 Nginx를 설정합니다.

    Let's Encrypt가 구성된 Nginx 서버 블록은 Ubuntu 18.04에서 Let's Encrypt로 Nginx를 보호하는 방법에 따라 설정할 수 있습니다.

    선택적으로 조직과 연결된 GitHub 계정을 설정합니다.

    1단계 - Grafana 설치

    이 첫 번째 단계에서는 Ubuntu 18.04 서버에 Grafana를 설치합니다. APT 저장소를 통해 Grafana를 설치할 수 있습니다. APT 리포지토리를 사용하면 Grafana의 업데이트를 더 쉽게 설치하고 관리할 수 있으므로 이 자습서에서는 해당 방법을 사용합니다.

    Grafana는 공식 Ubuntu 18.04 패키지 저장소에서 사용할 수 있지만 Grafana 버전이 최신 버전이 아닐 수 있으므로 Grafana의 공식 저장소를 사용하십시오.

    Grafana 파이프 출력을 apt-key로 다운로드합니다. 이렇게 하면 APT 설치의 신뢰할 수 있는 키 목록에 키가 추가되어 GPG 서명 Grafana 패키지를 다운로드하고 확인할 수 있습니다.

    1. wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -

    이 명령에서 -q 옵션은 wget에 대한 상태 업데이트 메시지를 끄고 -O는 다운로드한 파일을 터미널에 출력합니다. . 이 두 가지 옵션은 다운로드한 파일의 내용만 apt-key로 파이프라인되도록 합니다.

    다음으로 APT 소스에 Grafana 리포지토리를 추가합니다.

    1. sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"

    패키지 목록을 업데이트하려면 APT 캐시를 새로 고치십시오.

    1. sudo apt update

    다음으로 Grafana 리포지토리에서 Grafana가 설치되는지 확인합니다.

    1. apt-cache policy grafana

    이전 명령의 출력은 설치하려는 Grafana의 버전과 패키지를 검색할 위치를 알려줍니다. 목록 맨 위에 있는 설치 후보가 https://packages.grafana.com/oss/deb의 공식 Grafana 리포지토리에서 온 것인지 확인합니다.

    Output of apt-cache policy grafana
    grafana: Installed: (none) Candidate: 9.1.3 Version table: 9.1.3 500 500 https://packages.grafana.com/oss/deb stable/main amd64 Packages ...

    이제 설치를 진행할 수 있습니다.

    1. sudo apt install grafana

    Grafana가 설치되면 systemctl을 사용하여 Grafana 서버를 시작합니다.

    1. sudo systemctl start grafana-server

    다음으로 서비스 상태를 확인하여 Grafana가 실행 중인지 확인합니다.

    1. sudo systemctl status grafana-server

    다음과 유사한 출력이 표시됩니다.

    Output of grafana-server status
    ● grafana-server.service - Grafana instance Loaded: loaded (/usr/lib/systemd/system/grafana-server.service; disabled; vendor preset: enabled) Active: active (running) since Tue 2022-09-06 09:35:00 UTC; 5s ago Docs: http://docs.grafana.org Main PID: 22886 (grafana-server) Tasks: 5 (limit: 546) ...

    이 출력에는 상태, 기본 프로세스 식별자(PID) 등 Grafana의 프로세스에 대한 정보가 포함됩니다. 활성(실행 중)은 프로세스가 올바르게 실행 중임을 나타냅니다.

    마지막으로 서비스가 부팅 시 Grafana를 자동으로 시작하도록 활성화합니다.

    1. sudo systemctl enable grafana-server

    다음 출력을 받게 됩니다.

    Output of systemctl enable grafana-server
    Synchronizing state of grafana-server.service with SysV service script with /lib/systemd/systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install enable grafana-server Created symlink /etc/systemd/system/multi-user.target.wants/grafana-server.service → /usr/lib/systemd/system/grafana-server.service.

    이것은 systemd가 Grafana를 자동 시작하는 데 필요한 심볼릭 링크를 생성했음을 확인합니다.

    이제 Grafana가 설치되어 사용할 준비가 되었습니다. 다음으로 리버스 프록시 및 SSL 인증서를 사용하여 Grafana에 대한 연결을 보호합니다.

    2단계 - 역방향 프록시 설정

    SSL 인증서를 사용하면 Grafana와의 연결을 암호화하여 데이터를 안전하게 보호할 수 있습니다. 하지만 이 연결을 사용하려면 먼저 Nginx를 Grafana용 리버스 프록시로 재구성해야 합니다.

    Prerequisites에서 Let’s Encrypt로 Nginx 서버 블록을 설정할 때 생성한 Nginx 구성 파일을 엽니다. 모든 텍스트 편집기를 사용할 수 있지만 이 자습서에서는 nano를 사용합니다.

    1. sudo nano /etc/nginx/sites-available/your_domain

    다음 블록을 찾습니다.

    ...
    	location / {
    		try_files $uri $uri/ =404;
    	}
    ...
    

    이미 SSL을 통해 통신하도록 Nginx를 구성했고 서버에 대한 모든 웹 트래픽이 이미 Nginx를 통과하기 때문에 기본적으로 3000 포트에서 실행되는 Grafana로 모든 요청을 전달하도록 Nginx에 지시하기만 하면 됩니다.

    위치 블록에서 기존 try_files 줄을 삭제하고 다음 옵션으로 바꿉니다.

    ...
    	location / {
    		proxy_set_header Host $http_host;
    		proxy_pass http://localhost:3000;
    	}
    ...
    

    그러면 프록시가 적절한 포트에 매핑되고 헤더에 서버 이름이 전달됩니다.

    또한 Grafana Live WebSocket 연결이 올바르게 작동하려면 server 섹션 외부에 다음 섹션을 추가하십시오.

    map $http_upgrade $connection_upgrade {
    	default upgrade;
    	'' close;
    }
    
    server {
        ...
    

    그런 다음 다음 location 섹션을 추가합니다.

    ...
    	location /api/live {
    		proxy_http_version 1.1;
    		proxy_set_header Upgrade $http_upgrade;
    		proxy_set_header Connection $connection_upgrade;
    		proxy_set_header Host $http_host;
    		proxy_pass http://localhost:3000;
    	}
    ...
    

    헤더 UpgradeConnection은 클라이언트에서 프록시 서버로 전송되지 않습니다. 따라서 프록시 서버가 프로토콜을 WebSocket으로 변경하려는 클라이언트의 의도를 알기 위해서는 이러한 헤더를 명시적으로 전달해야 합니다.

    최종 구성은 다음과 같아야 합니다.

    map $http_upgrade $connection_upgrade {
    	default upgrade;
    	'' close;
    }
    
    server {
    	...
    
    	root /var/www/your_domain/html;
    	index index.html index.htm index.nginx-debian.html;
    
    	server_name your_domain www.your_domain;
    
    	location / {
    		proxy_set_header Host $http_host;
    		proxy_pass http://localhost:3000;
    	}
    
    	location /api/live {
    		proxy_http_version 1.1;
    		proxy_set_header Upgrade $http_upgrade;
    		proxy_set_header Connection $connection_upgrade;
    		proxy_set_header Host $http_host;
    		proxy_pass http://localhost:3000;
    	}
    }
    ...
    

    참고: certbot 도구를 사용하여 Let’s Encrypt SSL 인증서를 설정한 경우 구성 파일에 Certbot이 추가한 추가 행과 서버 블록이 포함될 수 있습니다.

    작업이 완료되면 CTRL+X를 누른 다음 Y를 누른 다음 ENTER를 눌러 파일을 저장하고 닫습니다. 코드>나노.

    이제 새 설정을 테스트하여 모든 것이 올바르게 구성되었는지 확인합니다.

    1. sudo nginx -t

    다음 출력을 받게 됩니다.

    Output
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful

    마지막으로 Nginx를 다시 로드하여 변경 사항을 활성화합니다.

    1. sudo systemctl reload nginx

    이제 웹 브라우저에서 https://your_domain으로 이동하여 기본 Grafana 로그인 화면에 액세스할 수 있습니다. Grafana에 연결할 수 없는 경우 포트 443에서 트래픽을 허용하도록 방화벽이 설정되어 있는지 확인한 다음 이전 지침을 다시 추적하십시오.

    Grafana에 대한 암호화된 연결을 통해 이제 Grafana의 기본 관리 자격 증명 변경부터 시작하여 추가 보안 조치를 구현할 수 있습니다.

    3단계 - 자격 증명 업데이트

    모든 Grafana 설치는 기본적으로 동일한 관리 자격 증명을 사용하므로 가능한 한 빨리 로그인 정보를 변경하는 것이 가장 좋습니다. 이 단계에서는 보안을 강화하기 위해 자격 증명을 업데이트합니다.

    웹 브라우저에서 https://your_domain으로 이동하여 시작합니다. 이렇게 하면 Grafana 로고, 이메일 또는 사용자 이름 및 암호를 입력하라는 양식, 로그인 버튼 및 암호를 잊으셨습니까?가 표시되는 기본 로그인 화면이 나타납니다. 링크.

    이메일 또는 사용자 이름 및 비밀번호 필드에 모두 admin을 입력한 다음 로그인 버튼을 클릭합니다.

    다음 화면에서 기본 비밀번호를 변경하여 계정 보안을 강화하라는 메시지가 표시됩니다.

    새 비밀번호 및 새 비밀번호 확인 필드에 사용하려는 비밀번호를 입력합니다.

    여기에서 제출을 클릭하여 새 정보를 저장하거나 건너뛰기를 눌러 이 단계를 건너뛸 수 있습니다. 건너뛰면 다음에 로그인할 때 암호를 변경하라는 메시지가 표시됩니다.

    Grafana 설정의 보안을 강화하려면 저장을 클릭하십시오. Grafana에 오신 것을 환영합니다 페이지로 돌아갑니다.

    이제 기본 자격 증명을 변경하여 계정을 보호했습니다. 다음으로, 아무도 귀하의 허가 없이 새 Grafana 계정을 만들 수 없도록 Grafana 구성을 변경합니다.

    4단계 - Grafana 등록 및 익명 액세스 비활성화

    Grafana는 방문자가 등록하지 않고 스스로 사용자 계정을 생성하고 대시보드를 미리 볼 수 있는 옵션을 제공합니다. 인터넷을 통해 Grafana에 액세스할 수 없거나 Grafana가 서비스 상태와 같은 공개적으로 사용 가능한 데이터로 작동하는 경우 이러한 기능을 허용할 수 있습니다. 그러나 온라인에서 Grafana를 사용하여 중요한 데이터를 작업할 때 익명 액세스는 보안 문제가 될 수 있습니다. 이 문제를 해결하려면 Grafana 구성을 일부 변경하십시오.

    편집을 위해 Grafana의 기본 구성 파일을 열어 시작합니다.

    1. sudo nano /etc/grafana/grafana.ini

    [users] 제목 아래에서 다음 allow_sign_up 지시문을 찾습니다.

    ...
    [users]
    # disable user signup / registration
    ;allow_sign_up = true
    ...
    

    true로 이 지시문을 활성화하면 로그인 화면에 가입 버튼이 추가되어 사용자가 자신을 등록하고 Grafana에 액세스할 수 있습니다.

    false로 이 지시문을 비활성화하면 가입 버튼이 제거되고 Grafana의 보안 및 개인 정보가 강화됩니다.

    줄 시작 부분에서 ;를 제거한 다음 옵션을 false로 설정하여 이 지시문의 주석 처리를 제거하십시오.

    ...
    [users]
    # disable user signup / registration
    allow_sign_up = false
    ...
    

    그런 다음 [auth.anonymous] 제목 아래에서 다음 enabled 지시문을 찾습니다.

    ...
    [auth.anonymous]
    # enable anonymous access
    ;enabled = false
    ...
    

    활성화true로 설정하면 등록되지 않은 사용자가 대시보드에 액세스할 수 있습니다. 이 옵션을 false로 설정하면 등록된 사용자만 대시보드에 액세스할 수 있습니다.

    줄 시작 부분에서 ;를 제거한 다음 옵션을 false로 설정하여 이 지시문의 주석 처리를 제거하십시오.

    ...
    [auth.anonymous]
    # enable anonymous access
    enabled = false
    ...
    

    파일을 저장하고 텍스트 편집기를 종료합니다.

    변경 사항을 활성화하려면 Grafana를 다시 시작하십시오.

    1. sudo systemctl restart grafana-server

    Grafana의 서비스 상태를 확인하여 모든 것이 작동하는지 확인합니다.

    1. sudo systemctl status grafana-server

    이전과 마찬가지로 출력은 Grafana가 활성(실행 중)임을 보고합니다.

    이제 웹 브라우저에서 https://your_domain을 가리킵니다. 가입 화면으로 돌아가려면 화면 왼쪽 하단에 있는 아바타에 커서를 놓고 표시되는 로그아웃 옵션을 클릭합니다.

    로그아웃한 후 가입 버튼이 없는지, 로그인 자격 증명을 입력하지 않으면 로그인할 수 없는지 확인하십시오.

    이 시점에서 Grafana는 완전히 구성되어 사용할 준비가 되었습니다. 다음으로 GitHub를 통해 인증하여 조직의 로그인 프로세스를 간소화할 수 있습니다.

    (선택 사항) 5단계 - GitHub OAuth 앱 설정

    로그인에 대한 다른 접근 방식의 경우 GitHub를 통해 인증하도록 Grafana를 구성할 수 있습니다. 그러면 인증된 GitHub 조직의 모든 구성원에게 로그인 액세스가 제공됩니다. 이는 Grafana 관련 자격 증명을 만들지 않고도 여러 개발자가 공동 작업하고 메트릭에 액세스할 수 있도록 하려는 경우에 특히 유용할 수 있습니다.

    조직과 연결된 GitHub 계정에 로그인하여 시작한 다음 GitHub 프로필 페이지로 이동합니다.

    화면 왼쪽 탐색 메뉴의 조직 설정에서 조직 이름을 클릭합니다.

    다음 화면에는 조직 표시 이름, 조직 이메일 및 조직 URL과 같은 설정을 변경할 수 있는 조직 프로필이 표시됩니다.

    Grafana는 GitHub 내에서 OAuth 애플리케이션을 사용하기 때문입니다.

    화면 왼쪽 하단의 개발자 설정에서 OAuth 앱 링크를 클릭합니다.

    GitHub에 조직과 연결된 OAuth 애플리케이션이 아직 없는 경우 조직 소유 애플리케이션이 없다는 메시지가 표시됩니다. 그렇지 않으면 계정에 이미 연결된 OAuth 애플리케이션 목록이 표시됩니다.

    계속하려면 애플리케이션 등록 버튼을 클릭합니다.

    다음 화면에서 Grafana 설치에 대한 다음 세부 정보를 입력합니다.

    • 애플리케이션 이름: 서로 다른 OAuth 애플리케이션을 구별하는 데 도움이 됩니다.
    • 홈페이지 URL: GitHub에 Grafana를 찾을 위치를 알려줍니다. 이 필드에 https://your_domain을 입력하고 your_domain을 귀하의 도메인으로 바꿉니다.
    • 애플리케이션 설명: OAuth 애플리케이션의 용도에 대한 설명을 제공합니다.
    • 응용 프로그램 콜백 URL: 성공적으로 인증되면 사용자가 전송되는 주소입니다. Grafana의 경우 이 필드를 https://your_domain/login/github로 설정해야 합니다.

    GitHub를 통해 로그인하는 Grafana 사용자는 앞의 처음 세 필드에 입력한 값을 볼 수 있으므로 의미 있고 적절한 값을 입력해야 합니다.

    완료되면 양식은 다음과 같이 표시됩니다.

    애플리케이션 등록 버튼을 클릭합니다.

    이제 새 OAuth 애플리케이션과 연결된 클라이언트 ID 및 클라이언트 암호가 포함된 페이지로 리디렉션됩니다. 설정을 완료하려면 Grafana의 기본 구성 파일에 추가해야 하므로 두 값을 모두 기록해 두십시오.

    경고: 클라이언트 ID와 클라이언트 암호는 공격의 기반으로 사용될 수 있으므로 안전한 비공개 위치에 보관하십시오.

    GitHub OAuth 애플리케이션이 생성되면 이제 인증에 GitHub를 사용하도록 Grafana를 재구성할 준비가 되었습니다.

    (선택 사항) 6단계 - Grafana를 GitHub OAuth 앱으로 구성

    Grafana 설정에 대한 GitHub 인증을 완료하기 위해 이제 Grafana 구성 파일을 일부 변경합니다.

    시작하려면 기본 Grafana 구성 파일을 엽니다.

    1. sudo nano /etc/grafana/grafana.ini

    [auth.github] 제목을 찾아 ;allowed_domains;를 제거하여 이 섹션의 주석 처리를 제거합니다. >;team_ids=, 이 튜토리얼에서는 변경되지 않습니다.

    다음으로 OAuth 애플리케이션의 client_idclient_secret 값과 함께 GitHub를 사용하도록 Grafana를 구성합니다.

    • enabledallow_sign_uptrue로 설정합니다. 이렇게 하면 GitHub 인증이 활성화되고 허용된 조직의 구성원이 직접 계정을 만들 수 있습니다. 이 설정은 4단계에서 변경한 [users] 아래의 allow_sign_up 속성과 다릅니다.
    • client_idclient_secret을 GitHub OAuth 애플리케이션을 생성하는 동안 얻은 값으로 설정합니다.
    • allowed_organizations를 조직의 이름으로 설정하여 조직의 구성원만 Grafana에 가입하고 로그인할 수 있도록 합니다.

    전체 구성은 다음과 같습니다.

    ...
    [auth.github]
    enabled = true
    allow_sign_up = true
    client_id = your_client_id_from_github
    client_secret = your_client_secret_from_github
    scopes = user:email,read:org
    auth_url = https://github.com/login/oauth/authorize
    token_url = https://github.com/login/oauth/access_token
    api_url = https://api.github.com/user
    ;allowed_domains =
    ;team_ids =
    allowed_organizations = your_organization_name
    ...
    

    이제 GitHub에 대해 알아야 할 모든 것을 Grafana에 알렸습니다. 설정을 완료하려면 리버스 프록시 뒤에서 리디렉션을 활성화해야 합니다. [server] 제목 아래에 root_url 값을 설정하면 됩니다.

    ...
    [server]
    root_url = https://your_domain
    ...
    

    구성을 저장하고 파일을 닫습니다.

    그런 다음 Grafana를 다시 시작하여 변경 사항을 활성화합니다.

    1. sudo systemctl restart grafana-server

    마지막으로 서비스가 실행 중인지 확인합니다.

    1. sudo systemctl status grafana-server

    출력은 서비스가 활성(실행 중)임을 나타냅니다.

    이제 https://your_domain으로 이동하여 새 인증 시스템을 테스트합니다. 이미 Grafana에 로그인한 경우 화면 왼쪽 하단에 있는 아바타 로그에 마우스를 올려 놓고 이름 옆에 표시되는 보조 메뉴에서 로그아웃을 클릭합니다.

    로그인 페이지에서 GitHub 로고가 있는 GitHub로 로그인 버튼이 포함된 원래 로그인 버튼 아래에 새 섹션이 표시됩니다.

    GitHub로 로그인 버튼을 클릭하면 GitHub로 리디렉션됩니다. 여기에서 GitHub 계정에 로그인하고 Grafana 승인을 확인합니다.

    녹색의 Authorize your_github_organization 버튼을 클릭합니다.

    참고: GitHub 계정이 승인된 조직의 구성원이고 Grafana 이메일 주소가 GitHub 이메일 주소와 일치하는지 확인하세요. 승인된 조직의 구성원이 아닌 GitHub 계정으로 인증을 시도하면 사용자가 필요한 조직 중 하나의 구성원이 아니라는 로그인 실패 메시지가 표시됩니다.

    이제 기존 Grafana 계정으로 로그인됩니다. 로그인한 사용자의 Grafana 계정이 아직 존재하지 않는 경우 Grafana는 뷰어 권한이 있는 새 사용자 계정을 생성하여 새 사용자가 기존 대시보드만 사용할 수 있도록 합니다.

    새 사용자의 기본 권한을 변경하려면 편집을 위해 기본 Grafana 구성 파일을 엽니다.

    1. sudo nano /etc/grafana/grafana.ini

    [users] 제목 아래에서 auto_assign_org_role 지시문을 찾고 줄 시작 부분에서 ;를 제거하여 설정의 주석 처리를 제거합니다.

    지시문을 다음 값 중 하나로 설정합니다.

    • 뷰어: 기존 대시보드만 사용할 수 있습니다.
    • Editor: 대시보드 사용, 수정 및 추가를 변경할 수 있습니다.
    • Admin: 모든 것을 할 수 있는 권한이 있습니다.

    이 자습서에서는 자동 할당을 Viewer로 설정합니다.

    ...
    [users]
    ...
    auto_assign_org_role = Viewer
    ...
    

    변경 사항을 저장했으면 파일을 닫고 Grafana를 다시 시작합니다.

    1. sudo systemctl restart grafana-server

    서비스 상태 확인:

    1. sudo systemctl status grafana-server

    이전과 마찬가지로 상태는 활성(실행 중)으로 표시됩니다.

    이제 GitHub 조직의 구성원이 Grafana 설치를 등록하고 사용할 수 있도록 Grafana를 완전히 구성했습니다.

    결론

    이 자습서에서는 Grafana를 설치, 구성 및 보호했으며 조직 구성원이 GitHub를 통해 인증하도록 허용했습니다.

    현재 Grafana 설치를 확장하려면 다른 모니터링 자습서를 참조하십시오.