grafana plugin private repository 구성

Jaemyeong.Lee·2022년 9월 20일
2

grafana plugin 의 경우 public repository 만 있다보니
air-gap network 환경에서는 plugin 설치가 불편한 점이 있습니다.

https://grafana.com/grafana/plugins/

그래서 nexus 를 private repository 로 구성한 후
grafana plugin 을 nexus 에 등록하여 grafana plugin repository 를 구성하려고 합니다.

이 가이드는 nexus 로 grafana plugin private repository 를 구성 후
grafana-cli 를 이용해서 plugin 을 설치하는 방법과
helm chart 의 values.yaml 파일 설정을 통해서 배포하는 방법을 확인해보겠습니다.

참고로 nexus 에 grafana plugin 을 등록 절차가 조금 수작업이긴 하나
grafana 에서 활용되는 plugin 이 자주 변경이 되지는 않으니 air-gap network 환경에서는 활용가치는 있다고 생각합니다.

가이드는 아래 2개의 plugin 을 샘플 대상으로 작성되었습니다.

  • michaeldmoore-scatter-panel 1.1.0
  • clock-panel 2.1.2

metadata 파일 생성

먼저, grafana plugin 을 nexus repository 에 upload 하는데 사용되는 metadata 파일들을 생성합니다.

  • plugin 수 만큼 repo 파일에 내용을 추가합니다. shell script 로 생성할 수 있도록 작성되어 있습니다.
id=michaeldmoore-scatter-panel
type=panel
url=https://github.com/michaeldmoore/michaeldmoore-scatter-panel
version=1.1.0

jq -c '.' repo | jq '.plugins[.plugins | length] += {"id":"'${id}'","type":"'${type}'","url":"'${url}'","versions":[{"version":"'${version}'"}]}' > repo_new

cp repo_new repo

id=grafana-clock-panel
type=panel
url=https://github.com/grafana/clock-panel
version=2.1.0

jq -c '.' repo | jq '.plugins[.plugins | length] += {"id":"'${id}'","type":"'${type}'","url":"'${url}'","versions":[{"version":"'${version}'"}]}' > repo_new

cp repo_new repo
  • 생성된 repo 파일 내용을 확인하면 아래와 같습니다.
// repo
{
    "plugins": [
        {
            "id": "michaeldmoore-scatter-panel",
            "type": "panel",
            "url": "https://github.com/michaeldmoore/michaeldmoore-scatter-panel",
            "versions": [
                {
                "version": "1.1.0"
                }
            ]
        },
        {
            "id": "grafana-clock-panel",
            "type": "panel",
            "url": "https://github.com/grafana/clock-panel",
            "versions": [
                {
                "version": "2.1.0"
                }
            ]
        }
    ]
}
  • plugin 마다 각각 1개의 metadata 파일을 작성합니다.
id=michaeldmoore-scatter-panel
version=1.1.0

echo '{"versions":[{"version":"'${version}'","arch":{"any":{}}}]}' | jq . > ${id}

id=grafana-clock-panel
version=2.1.0

echo '{"versions":[{"version":"'${version}'","arch":{"any":{}}}]}' | jq . > ${id}
  • 생성된 metadata 파일을 확인하면 아래와 같습니다.
// michaeldmoore-scatter-panel
{
    "versions": [
        {
            "version": "1.1.0",
            "arch": {
                "any": {}
            }
        }
    ]
}
// grafana-clock-panel
{
    "versions": [
        {
            "version": "2.1.0",
            "arch": {
                "any": {}
            }
        }
    ]
}

nexus repository 에 metadata & plugin 등록

위에서 생성한 metadata 와 grafana plugin 을 nexus rest api 를 활용해서 등록합니다.

nexus 에 rest api 호출이 가능하도록 설정되어야 합니다.
rest api 가 안되는 상황이라면 수동으로 업로드를 진행하세요.

helm repo add sonatype https://sonatype.github.io/helm3-charts/
helm install nexus sonatype/nexus-repository-manager -n nexus

kubectl port-forward services/nexus 8081:8081 -n nexus
  • nexus 에 hosted repository 를 생성합니다.

    • name : grafana-plugin
  • 다음으로 nexus rest api 를 활용하여 파일을 업로드 합니다.

echo -n 'admin:admin' | base64
export token=YWRtaW46YWRtaW4=
export host=http://localhost:8081

# repo 파일 등록, repo 폴더도 같이 생성
curl -X POST ${host}/service/rest/v1/components?repository=grafana-plugin \
  -H 'accept: application/json' \
  -H 'Content-Type: multipart/form-data' \
  -H 'Authorization: Basic ${token}' \
  -F 'raw.directory=/' \
  -F 'raw.asset1=@repo;type=application/x-zip-compressed' \
  -F 'raw.asset1.filename=repo'

# /repo/michaeldmoore-scatter-panel 파일 등록
curl -X POST ${host}/service/rest/v1/components?repository=grafana-plugin \
  -H 'accept: application/json' \
  -H 'Content-Type: multipart/form-data' \
  -H 'Authorization: Basic ${token}' \
  -F 'raw.directory=/repo' \
  -F 'raw.asset1=@michaeldmoore-scatter-panel;type=application/x-zip-compressed' \
  -F 'raw.asset1.filename=michaeldmoore-scatter-panel'

# /michaeldmoore-scatter-panel/versions/1.1.0/download 이름으로 plugin 파일 등록
curl -X POST ${host}/service/rest/v1/components?repository=grafana-plugin \
  -H 'accept: application/json' \
  -H 'Content-Type: multipart/form-data' \
  -H 'Authorization: Basic ${token}' \
  -F 'raw.directory=/michaeldmoore-scatter-panel/versions/1.1.0' \
  -F 'raw.asset1=@michaeldmoore-scatter-panel-1.1.0.zip;type=application/x-zip-compressed' \
  -F 'raw.asset1.filename=download'

# /repo/grafana-clock-panel 파일 등록
curl -X POST ${host}/service/rest/v1/components?repository=grafana-plugin \
  -H 'accept: application/json' \
  -H 'Content-Type: multipart/form-data' \
  -H 'Authorization: Basic ${token}' \
  -F 'raw.directory=/repo' \
  -F 'raw.asset1=@grafana-clock-panel;type=application/x-zip-compressed' \
  -F 'raw.asset1.filename=grafana-clock-panel'

# /grafana-clock-panel/versions/2.1.0/download 이름으로 plugin 파일 등록
curl -X POST ${host}/service/rest/v1/components?repository=grafana-plugin \
  -H 'accept: application/json' \
  -H 'Content-Type: multipart/form-data' \
  -H 'Authorization: Basic ${token}' \
  -F 'raw.directory=/grafana-clock-panel/versions/2.1.0' \
  -F 'raw.asset1=@grafana-clock-panel-2.1.0.any.zip;type=application/x-zip-compressed' \
  -F 'raw.asset1.filename=download'
  • 최종적으로 nexus 에 등록된 폴더 구조를 확인하면 아래와 같습니다.
- repo (file 포함)
  - grafana-clock-panel
  - michaeldmoore-scatter-panel
- grafana-clock-panel
  - versions
    - 2.1.0
      - download
- michaeldmoore-scatter-panel
  - versions
    - 1.1.0
      - download

grafana plugin install

grafana-cli 를 이용하여 plugin 을 설치합니다.

# grafana pod 에 terminal 접속
kubectl exec -it deploy/grafana -c grafana -- bash

# 환경변수 setup
export GF_PLUGIN_REPO=http://localhost:8081/repository/grafana-plugin/

# plugin 설치
grafana-cli plugins install michaeldmoore-scatter-panel 1.1.0
grafana-cli plugins install grafana-clock-panel 2.1.0

grafana helm chart values.yaml 설정

grafana 를 helm chart 로 배포하는 경우에는 values.yaml 에 설정을 추가합니다.

# grafana values.yaml

env:
  GF_PLUGIN_REPO: http://localhost:8081/repository/grafana-plugin/

plugins:
  - michaeldmoore-scatter-panel 1.1.0
  - grafana-clock-panel 2.1.0

이상으로 grafana plugin private repositry 를 구성하고 plugin 을 설치하는 과정까지 확인해 보았습니다.

.감사합니다.

0개의 댓글