├── .gitignore ├── .trivyignore ├── .github ├── ISSUE_TEMPLATE │ ├── config.yml │ ├── story.md │ ├── feature-request.md │ └── bug-report.md ├── workflows │ ├── automated_release.yaml │ ├── a2q_candidate.yml │ ├── security.yml │ ├── release.yml │ ├── nightly.yml │ ├── build.yml │ └── on-demand.yml └── renovate.json5 ├── go.mod ├── assets ├── README.md └── LICENSE.linux.txt ├── Dockerfile ├── docker-build.sh ├── go.sum ├── run-ci-locally.sh ├── run-fips-ci-locally.sh ├── CONTRIBUTING.md ├── bundle.yml ├── bundle-fips.yml ├── README.md ├── LICENSE ├── downloader.go └── CHANGELOG.md /.gitignore: -------------------------------------------------------------------------------- 1 | out/ 2 | out-fips/ 3 | .idea 4 | /vendor 5 | /build 6 | 7 | # Release toolkit 8 | CHANGELOG.partial.md 9 | -------------------------------------------------------------------------------- /.trivyignore: -------------------------------------------------------------------------------- 1 | # We could not fix it and it is not relevant - https://github.com/prometheus/client_golang/issues/916#issuecomment-929330066 2 | CVE-2021-3121 3 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | contact_links: 3 | - name: Troubleshooting 4 | url: https://github.com/newrelic/infrastructure-bundle/blob/master/README.md#support 5 | about: Check out the README for troubleshooting directions 6 | -------------------------------------------------------------------------------- /go.mod: -------------------------------------------------------------------------------- 1 | module github.com/newrelic/infrastructure-bundle/builder 2 | 3 | go 1.23.6 4 | 5 | require ( 6 | github.com/google/go-github/v66 v66.0.0 7 | golang.org/x/oauth2 v0.27.0 8 | gopkg.in/yaml.v3 v3.0.1 9 | ) 10 | 11 | require github.com/google/go-querystring v1.1.0 // indirect 12 | -------------------------------------------------------------------------------- /assets/README.md: -------------------------------------------------------------------------------- 1 | # New Relic Infrastructure 2 | 3 | This Docker image contains the [New Relic Infrastructure **Bundle**](https://newrelic.com/infrastructure). This image contains usual NR Infrastructure agent + all available on-host integrations. 4 | 5 | ## Usage 6 | 7 | ### Pulling 8 | 9 | `docker pull newrelic/infrastructure-bundle:latest` 10 | -------------------------------------------------------------------------------- /.github/workflows/automated_release.yaml: -------------------------------------------------------------------------------- 1 | name: Automated release creation 2 | 3 | on: 4 | workflow_dispatch: 5 | schedule: 6 | - cron: "0 10 * * 4" 7 | 8 | jobs: 9 | release_management: 10 | uses: newrelic/coreint-automation/.github/workflows/reusable_release_automation.yaml@v3 11 | secrets: inherit 12 | with: 13 | rt-included-files: bundle.yml 14 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | ARG agent_version=latest 2 | ARG base_image_name=newrelic/infrastructure 3 | ARG base_image=${base_image_name}:${agent_version} 4 | 5 | # ephemeral building container 6 | FROM $base_image 7 | 8 | # Set by recent docker versions automatically, or by older ones when defining DOCKER_BUILDKIT=1 9 | ARG TARGETOS 10 | ARG TARGETARCH 11 | ARG jre_version 12 | ARG out_dir 13 | 14 | # required for nri-jmx 15 | RUN if [ -n "${jre_version}" ]; then apk add --no-cache openjdk8-jre=${jre_version}; else apk add --no-cache openjdk8-jre; fi 16 | 17 | # integrations 18 | COPY ${out_dir}/${TARGETARCH} / 19 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/story.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Story 3 | about: Issue describing development work to fulfill a feature request 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | priority: '' 8 | --- 9 | ### Description 10 | _What's the goal of this unit of work? What is included? What isn't included?_ 11 | 12 | ### Acceptance Criteria 13 | _What tasks need to be accomplished to achieve the goal?_ 14 | 15 | ### Design Consideration/Limitations 16 | _Why is this the route we should take to achieve our goal?_ 17 | _What can't be achieved within this story?_ 18 | 19 | ### Dependencies 20 | _Do any other teams or parts of the New Relic product need to be considered?_ 21 | _Some common areas: UI, collector, documentation_ 22 | 23 | ### Additional context 24 | _What else should we know about this story that might not fit into the other categories?_ 25 | 26 | ### Estimates 27 | _Please provide initial t-shirt size. S = 1-3 days, M = 3-5 days (1 week), L = 1-2 weeks (1 sprint)_ 28 | -------------------------------------------------------------------------------- /.github/workflows/a2q_candidate.yml: -------------------------------------------------------------------------------- 1 | name: A2Q Candidate Build 2 | permissions: 3 | contents: read 4 | on: 5 | schedule: 6 | - cron: "0 3 * * *" 7 | push: 8 | branches: 9 | - master 10 | - main 11 | 12 | jobs: 13 | nightly: 14 | uses: newrelic/coreint-automation/.github/workflows/reusable_nightly.yaml@v3 15 | secrets: 16 | docker_username: ${{ secrets.OHAI_DOCKER_HUB_ID }} 17 | docker_password: ${{ secrets.OHAI_DOCKER_HUB_PASSWORD }} 18 | slack_channel: ${{ secrets.COREINT_SLACK_CHANNEL }} 19 | slack_token: ${{ secrets.COREINT_SLACK_TOKEN }} 20 | with: 21 | docker_image: newrelic/infrastructure-bundle 22 | docker_tag: a2q-candidate 23 | target_branches: "master,main" 24 | build_command: | 25 | export AGENT_VERSION=`go run ./downloader.go -agent-version-latest` 26 | go run downloader.go -staging -override-latest 27 | export DOCKER_IMAGE_TAG=a2q-candidate 28 | ./docker-build.sh . --push 29 | setup_qemu: true 30 | setup_buildx: true 31 | setup_go: true 32 | go_version_file: go.mod 33 | trivy_scan: false -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature-request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature Request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: 'feature request' 6 | assignees: '' 7 | priority: '' 8 | --- 9 | ### Description 10 | _A clear and concise description of the feature you want or need_ 11 | 12 | ### Acceptance Criteria 13 | _What tasks need to be accomplished to achieve the goal?_ 14 | 15 | ### Describe Alternatives 16 | _A clear and concise description of any alternative solutions or features you've considered_ 17 | _Are there examples you could link us to?_ 18 | 19 | ### Dependencies 20 | _Do any other teams or parts of the New Relic product need to be considered?_ 21 | _Some common areas: UI, collector, documentation_ 22 | 23 | ### Additional context 24 | _What else should we know about this story that might not fit into the other categories?_ 25 | 26 | ### Estimates 27 | _Please provide initial t-shirt size. S = 1-3 days, M = 3-5 days (1 week), L = 1-2 weeks (1 sprint)_ 28 | 29 | ## For Maintainers Only or Hero Triaging this bug 30 | *Suggested Priority (P1,P2,P3,P4,P5):* 31 | *Suggested T-Shirt size (S, M, L, XL, Unknown):* 32 | -------------------------------------------------------------------------------- /docker-build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # Wrapper script for docker buildx build setting default values 4 | 5 | DOCKER_PLATFORMS=${DOCKER_PLATFORMS:-linux/amd64,linux/arm64,linux/arm} 6 | JRE_VERSION=${JRE_VERSION:-} # Blank will pull default version for alpine image 7 | DOCKER_IMAGE=${DOCKER_IMAGE:-newrelic/infrastructure-bundle} 8 | DOCKER_IMAGE_TAG=${DOCKER_IMAGE_TAG:-dev} # Overwritten by CI from the release tag 9 | OUTDIR=${OUTDIR:-out} 10 | BASE_IMAGE_NAME=${BASE_IMAGE_NAME:-newrelic/infrastructure} 11 | 12 | echo "base_image_name $BASE_IMAGE_NAME\n" 13 | 14 | # Get default AGENT_VERSION from downloader.go 15 | if [ -z "$AGENT_VERSION" ]; then 16 | AGENT_VERSION=$(go run ./downloader.go -agent-version) 17 | if [ -z "$AGENT_VERSION" ]; then 18 | echo "Could not get agent version from downloader.go" >&2 19 | exit 1 20 | fi 21 | fi 22 | 23 | echo Building the image leveraging agent_version=$AGENT_VERSION 24 | 25 | docker buildx build \ 26 | --platform="${DOCKER_PLATFORMS}" \ 27 | --build-arg agent_version="$AGENT_VERSION" \ 28 | --build-arg jre_version="$JRE_VERSION" \ 29 | --build-arg out_dir="$OUTDIR"\ 30 | --build-arg base_image_name="$BASE_IMAGE_NAME" \ 31 | -t "${DOCKER_IMAGE}:${DOCKER_IMAGE_TAG}" \ 32 | "$@" 33 | -------------------------------------------------------------------------------- /go.sum: -------------------------------------------------------------------------------- 1 | github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 2 | github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= 3 | github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= 4 | github.com/google/go-github/v66 v66.0.0 h1:ADJsaXj9UotwdgK8/iFZtv7MLc8E8WBl62WLd/D/9+M= 5 | github.com/google/go-github/v66 v66.0.0/go.mod h1:+4SO9Zkuyf8ytMj0csN1NR/5OTR+MfqPp8P8dVlcvY4= 6 | github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= 7 | github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= 8 | golang.org/x/oauth2 v0.27.0 h1:da9Vo7/tDv5RH/7nZDz1eMGS/q1Vv1N/7FCrBhI9I3M= 9 | golang.org/x/oauth2 v0.27.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8= 10 | golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 11 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= 12 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 13 | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= 14 | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 15 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug-report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: bug 6 | assignees: '' 7 | 8 | --- 9 | 10 | ^^ Provide a general summary of the issue in the title above. ^^ 11 | 12 | ## Description 13 | Describe the problem you're encountering. 14 | TIP: Do NOT share sensitive information, whether personal, proprietary, or otherwise! 15 | 16 | ## Expected Behavior 17 | Tell us what you expected to happen. 18 | 19 | ## [Troubleshooting](https://discuss.newrelic.com/t/troubleshooting-frameworks/108787) or [NR Diag](https://docs.newrelic.com/docs/using-new-relic/cross-product-functions/troubleshooting/new-relic-diagnostics) results 20 | Provide any other relevant log data. 21 | TIP: Scrub logs and diagnostic information for sensitive information 22 | 23 | ## Steps to Reproduce 24 | Please be as specific as possible. 25 | TIP: Link a sample application that demonstrates the issue. 26 | 27 | ## Your Environment 28 | Include as many relevant details about your environment as possible including the running version of New Relic software and any relevant configurations. 29 | 30 | ## Additional context 31 | Add any other context about the problem here. For example, relevant community posts or support tickets. 32 | 33 | ## For Maintainers Only or Hero Triaging this bug 34 | *Suggested Priority (P1,P2,P3,P4,P5):* 35 | *Suggested T-Shirt size (S, M, L, XL, Unknown):* 36 | -------------------------------------------------------------------------------- /run-ci-locally.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -e 4 | 5 | # This scripts runs something analogous to the CI locally, for reproducibility. 6 | # If $1 is set to release, it will run the release job with the docker account currently logged in 7 | 8 | echo "Downloading integrations..." 9 | rm -rf out/ 2> /dev/null || true 10 | go run downloader.go 11 | 12 | echo "Building image..." 13 | # Test build, but not load, for all archs 14 | ./docker-build.sh . 15 | # Build and load for amd64 only (for snyk) 16 | DOCKER_PLATFORMS=linux/amd64 ./docker-build.sh . --load 17 | 18 | if [[ -n "$SNYK_TOKEN" ]]; then 19 | echo "Scanning Docker image ${DOCKER_IMAGE}:${DOCKER_TAG}..." 20 | docker run -t -e "SNYK_TOKEN=${SNYK_TOKEN}" -v ${PWD}/workspace:/project -v "/var/run/docker.sock:/var/run/docker.sock" snyk/snyk-cli:docker monitor --docker "${DOCKER_IMAGE}:${DOCKER_TAG}" --severity-threshold=high --org=ohai --project-name="${DOCKER_IMAGE}" 21 | else 22 | echo "SNYK_TOKEN not defined, skipping snyk check" 23 | fi 24 | 25 | if [[ $1 == "release" ]]; then 26 | if [[ -z ${DOCKER_IMAGE_TAG} ]]; then 27 | echo "Refusing to push image with default tag. Please set the DOCKER_IMAGE_TAG env var." 28 | exit 1 29 | fi 30 | 31 | echo 32 | echo "Will now build and push ${DOCKER_IMAGE}:${DOCKER_IMAGE_TAG} as the user currently logged in in the docker CLI." 33 | echo "If this is not what you want, press ^C within 5 seconds..." 34 | echo 35 | sleep 5 36 | ./docker-build.sh . --push 37 | fi 38 | -------------------------------------------------------------------------------- /.github/workflows/security.yml: -------------------------------------------------------------------------------- 1 | name: Security scan 2 | on: 3 | push: 4 | branches: 5 | - renovate/** 6 | pull_request: 7 | 8 | jobs: 9 | build: 10 | name: Build and scan image 11 | runs-on: ubuntu-latest 12 | env: # Variables as understood by docker-build.sh 13 | DOCKER_IMAGE: newrelic/infrastructure-bundle 14 | DOCKER_IMAGE_TAG: ci 15 | steps: 16 | - uses: actions/checkout@v4 17 | - name: Set up QEMU 18 | uses: docker/setup-qemu-action@v3 19 | - name: Set up Docker Buildx 20 | uses: docker/setup-buildx-action@v3 21 | - uses: actions/setup-go@v5 22 | with: 23 | go-version-file: go.mod 24 | - name: Download integrations 25 | run: go run downloader.go 26 | 27 | - name: Build and load docker image for linux/amd64 28 | run: | 29 | DOCKER_PLATFORMS=linux/amd64 ./docker-build.sh . --load 30 | 31 | - name: Run Trivy in table mode 32 | # Table output is only useful when running on a pull request or push. 33 | if: contains(fromJSON('["push", "pull_request"]'), github.event_name) 34 | uses: aquasecurity/trivy-action@0.29.0 35 | with: 36 | image-ref: ${{ env.DOCKER_IMAGE }}:${{ env.DOCKER_IMAGE_TAG }} 37 | format: table 38 | exit-code: 1 39 | ignore-unfixed: true 40 | severity: "CRITICAL,HIGH" 41 | env: 42 | TRIVY_DB_REPOSITORY: public.ecr.aws/aquasecurity/trivy-db 43 | TRIVY_JAVA_DB_REPOSITORY: public.ecr.aws/aquasecurity/trivy-java-db -------------------------------------------------------------------------------- /run-fips-ci-locally.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -e 4 | 5 | # This scripts runs something analogous to the CI locally, for reproducibility. 6 | # If $1 is set to release, it will run the release job with the docker account currently logged in 7 | 8 | echo "Downloading integrations..." 9 | rm -rf out-fips/ 2> /dev/null || true 10 | go run downloader.go -bundle=bundle-fips.yml -outdir=out-fips 11 | 12 | echo "Building image..." 13 | # Test build, but not load, for all archs 14 | OUTDIR=out-fips DOCKER_IMAGE=newrelic/infrastructure-bundle-fips BASE_IMAGE_NAME=newrelic/infrastructure-fips DOCKER_PLATFORMS=linux/amd64,linux/arm64 ./docker-build.sh . 15 | # Build and load for amd64 only (for snyk) 16 | OUTDIR=out-fips DOCKER_IMAGE=newrelic/infrastructure-bundle-fips BASE_IMAGE_NAME=newrelic/infrastructure-fips DOCKER_PLATFORMS=linux/amd64 ./docker-build.sh . --load 17 | 18 | if [[ -n "$SNYK_TOKEN" ]]; then 19 | echo "Scanning Docker image ${DOCKER_IMAGE}:${DOCKER_IMAGE_TAG}..." 20 | docker run -t -e "SNYK_TOKEN=${SNYK_TOKEN}" -v ${PWD}/workspace:/project -v "/var/run/docker.sock:/var/run/docker.sock" snyk/snyk-cli:docker monitor --docker "${DOCKER_IMAGE}:${DOCKER_IMAGE_TAG}" --severity-threshold=high --org=ohai --project-name="${DOCKER_IMAGE}" 21 | else 22 | echo "SNYK_TOKEN not defined, skipping snyk check" 23 | fi 24 | 25 | if [[ $1 == "release" ]]; then 26 | if [[ -z ${DOCKER_IMAGE_TAG} ]]; then 27 | echo "Refusing to push image with default tag. Please set the DOCKER_IMAGE_TAG env var." 28 | exit 1 29 | fi 30 | 31 | echo 32 | echo "Will now build and push ${DOCKER_IMAGE}:${DOCKER_IMAGE_TAG} as the user currently logged in in the docker CLI." 33 | echo "If this is not what you want, press ^C within 5 seconds..." 34 | echo 35 | sleep 5 36 | ./docker-build.sh . --push 37 | fi 38 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Container release 2 | on: 3 | release: 4 | types: [ prereleased, released ] 5 | 6 | jobs: 7 | container-release: 8 | uses: newrelic/coreint-automation/.github/workflows/reusable_image_release.yaml@v3 9 | with: 10 | original_repo_name: 'newrelic/infrastructure-bundle' 11 | docker_image_name: 'newrelic/infrastructure-bundle' 12 | 13 | release_command_sh: | 14 | go run downloader.go 15 | ./docker-build.sh . --push 16 | if [[ "${{ github.event.release.prerelease }}" == "false" ]]; then 17 | export DOCKER_IMAGE_TAG=latest 18 | ./docker-build.sh . --push 19 | fi 20 | 21 | secrets: 22 | docker_username: ${{ secrets.OHAI_DOCKER_HUB_ID }} 23 | docker_password: ${{ secrets.OHAI_DOCKER_HUB_PASSWORD }} 24 | bot_token: ${{ secrets.COREINT_BOT_TOKEN }} 25 | slack_channel: ${{ secrets.COREINT_SLACK_CHANNEL }} 26 | slack_token: ${{ secrets.COREINT_SLACK_TOKEN }} 27 | 28 | container-release-fips: 29 | uses: newrelic/coreint-automation/.github/workflows/reusable_image_release.yaml@v3 30 | with: 31 | original_repo_name: 'newrelic/infrastructure-bundle' 32 | docker_image_name: 'newrelic/infrastructure-bundle-fips' 33 | 34 | release_command_sh: | 35 | go run downloader.go -bundle=bundle-fips.yml -outdir=out-fips 36 | export DOCKER_PLATFORMS=linux/amd64,linux/arm64 37 | export OUTDIR=out-fips 38 | export BASE_IMAGE_NAME=newrelic/infrastructure-fips 39 | export DOCKER_IMAGE=newrelic/infrastructure-bundle-fips 40 | ./docker-build.sh . --push 41 | if [[ "${{ github.event.release.prerelease }}" == "false" ]]; then 42 | export DOCKER_IMAGE_TAG=latest 43 | ./docker-build.sh . --push 44 | fi 45 | 46 | secrets: 47 | docker_username: ${{ secrets.OHAI_DOCKER_HUB_ID }} 48 | docker_password: ${{ secrets.OHAI_DOCKER_HUB_PASSWORD }} 49 | bot_token: ${{ secrets.COREINT_BOT_TOKEN }} 50 | slack_channel: ${{ secrets.COREINT_SLACK_CHANNEL }} 51 | slack_token: ${{ secrets.COREINT_SLACK_TOKEN }} -------------------------------------------------------------------------------- /assets/LICENSE.linux.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2010-2020 New Relic, Inc. All rights reserved. 2 | 3 | Certain inventions disclosed in this file may be claimed within 4 | patents owned or patent applications filed by New Relic, Inc. or third 5 | parties. 6 | 7 | Subject to the terms of this notice, New Relic grants you a 8 | nonexclusive, nontransferable license, without the right to 9 | sublicense, to (a) install and execute one copy of these files on any 10 | number of workstations owned or controlled by you and (b) distribute 11 | verbatim copies of these files to third parties. As a condition to the 12 | foregoing grant, you must provide this notice along with each copy you 13 | distribute and you must not remove, alter, or obscure this notice. All 14 | other use, reproduction, modification, distribution, or other 15 | exploitation of these files is strictly prohibited, except as may be set 16 | forth in a separate written license agreement between you and New 17 | Relic. The terms of any such license agreement will control over this 18 | notice. The license stated above will be automatically terminated and 19 | revoked if you exceed its scope or violate any of the terms of this 20 | notice. 21 | 22 | This License does not grant permission to use the trade names, 23 | trademarks, service marks, or product names of New Relic, except as 24 | required for reasonable and customary use in describing the origin of 25 | this file and reproducing the content of this notice. You may not 26 | mark or brand this file with any trade name, trademarks, service 27 | marks, or product names other than the original brand (if any) 28 | provided by New Relic. 29 | 30 | Unless otherwise expressly agreed by New Relic in a separate written 31 | license agreement, these files are provided AS IS, WITHOUT WARRANTY OF 32 | ANY KIND, including without any implied warranties of MERCHANTABILITY, 33 | FITNESS FOR A PARTICULAR PURPOSE, TITLE, or NON-INFRINGEMENT. As a 34 | condition to your use of these files, you are solely responsible for 35 | such use. New Relic will have no liability to you for direct, 36 | indirect, consequential, incidental, special, or punitive damages or 37 | for lost profits or data. 38 | -------------------------------------------------------------------------------- /.github/renovate.json5: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "github>newrelic/coreint-automation:renovate-base.json5" 4 | ], 5 | // Label PRs with `dependencies`. 6 | "labels": ["dependencies"], 7 | // By default, assign the coreint team as reviewers. 8 | // PRs related to the infra agent will be assigned to CAOS as per a packageRule below. 9 | "reviewers": ["team:coreint"], 10 | // RegexManagers will match patterns and extract dependencies from bundle.yaml. 11 | "regexManagers": [ 12 | { 13 | // Extract base agent image from bundle.yml. 14 | "fileMatch": [ 15 | "^bundle.yml$", 16 | "^bundle-fips.yml$" 17 | ], 18 | "depNameTemplate": "newrelic/infrastructure", // Defined directly since we only capture the version in the regex. 19 | "datasourceTemplate": "docker", 20 | "matchStrings": [ 21 | "agentVersion: (?[0-9.]+)" 22 | ] 23 | }, 24 | { 25 | // Extract dependency name and version for integrations. 26 | "fileMatch": [ 27 | "^bundle.yml$", 28 | "^bundle-fips.yml$" 29 | ], 30 | // Dependency name (org/repo format) is created from the `integrationName` named capture group in the regex below. 31 | "depNameTemplate": "newrelic/{{{integrationName}}}", 32 | "datasourceTemplate": "github-releases", // Version info is fetched from GitHub. 33 | "matchStrings": [ 34 | // Capture integration name (without `newrelic/`) and version from bundle.yaml. 35 | " *- name: (?.+)\n *version: (?.+)" 36 | ] 37 | } 38 | ], 39 | "packageRules": [ 40 | { 41 | // Assign PRs related to the agent to the caos team. 42 | "matchPackageNames": [ 43 | "newrelic/infrastructure" 44 | ], 45 | "reviewers": ["team:caos"] 46 | }, 47 | { 48 | // NRJMX 1.6.x is known to be broken, so we skip 1.6.x. 49 | "matchPackageNames": [ 50 | "newrelic/nrjmx" 51 | ], 52 | "allowedVersions": ">=1.7" 53 | }, 54 | { 55 | // nri-ecs moved to newrelic/nri-ecs image since 1.4.0. 56 | "matchPackageNames": [ 57 | "newrelic/nri-ecs" 58 | ], 59 | "allowedVersions": "<=1.3.1" 60 | } 61 | ] 62 | } 63 | -------------------------------------------------------------------------------- /.github/workflows/nightly.yml: -------------------------------------------------------------------------------- 1 | name: Nightly build 2 | on: 3 | schedule: 4 | - cron: "0 3 * * *" 5 | push: 6 | branches: 7 | - master 8 | - main 9 | 10 | jobs: 11 | nightly: 12 | name: Nightly standard build 13 | uses: newrelic/coreint-automation/.github/workflows/reusable_nightly.yaml@v3 14 | secrets: 15 | docker_username: ${{ secrets.OHAI_DOCKER_HUB_ID }} 16 | docker_password: ${{ secrets.OHAI_DOCKER_HUB_PASSWORD }} 17 | slack_channel: ${{ secrets.COREINT_SLACK_CHANNEL }} 18 | slack_token: ${{ secrets.COREINT_SLACK_TOKEN }} 19 | with: 20 | docker_image: newrelic/infrastructure-bundle 21 | docker_tag: nightly 22 | target_branches: "master,main" 23 | build_command: | 24 | export AGENT_VERSION=$(go run ./downloader.go -agent-version-latest -staging) 25 | go run downloader.go -staging -override-latest 26 | export DOCKER_IMAGE_TAG=nightly 27 | ./docker-build.sh . --push 28 | setup_qemu: true 29 | setup_buildx: true 30 | setup_go: true 31 | go_version_file: go.mod 32 | trivy_scan: true 33 | 34 | nightly-fips: 35 | name: Nightly FIPS build 36 | uses: newrelic/coreint-automation/.github/workflows/reusable_nightly.yaml@v3 37 | secrets: 38 | docker_username: ${{ secrets.OHAI_DOCKER_HUB_ID }} 39 | docker_password: ${{ secrets.OHAI_DOCKER_HUB_PASSWORD }} 40 | slack_channel: ${{ secrets.COREINT_SLACK_CHANNEL }} 41 | slack_token: ${{ secrets.COREINT_SLACK_TOKEN }} 42 | with: 43 | docker_image: newrelic/infrastructure-bundle-fips 44 | docker_tag: nightly 45 | target_branches: "master,main" 46 | build_command: | 47 | export AGENT_VERSION=$(go run ./downloader.go -agent-version-latest -staging) 48 | go run downloader.go -staging -override-latest -bundle=bundle-fips.yml -outdir=out-fips 49 | export DOCKER_PLATFORMS=linux/amd64,linux/arm64 50 | export DOCKER_IMAGE_TAG=nightly 51 | export OUTDIR=out-fips 52 | export BASE_IMAGE_NAME=newrelic/infrastructure-fips 53 | ./docker-build.sh . --push 54 | setup_qemu: true 55 | setup_buildx: true 56 | setup_go: true 57 | go_version_file: go.mod 58 | trivy_scan: true 59 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | Contributions are always welcome. Before contributing please read the 4 | [code of conduct](https://opensource.newrelic.com/code-of-conduct/) and [search the issue tracker](issues); your issue may have already been discussed or fixed in `main`. To contribute, 5 | [fork](https://help.github.com/articles/fork-a-repo/) this repository, commit your changes, and [send a Pull Request](https://help.github.com/articles/using-pull-requests/). 6 | 7 | Note that our [code of conduct](./CODE_OF_CONDUCT.md) applies to all platforms and venues related to this project; please follow it in all your interactions with the project and its participants. 8 | 9 | ## Feature Requests 10 | 11 | Feature requests should be submitted in the [Issue tracker](../../issues), with a description of the expected behavior & use case, where they’ll remain closed until sufficient interest, [e.g. :+1: reactions](https://help.github.com/articles/about-discussions-in-issues-and-pull-requests/), has been [shown by the community](../../issues?q=label%3A%22votes+needed%22+sort%3Areactions-%2B1-desc). 12 | Before submitting an Issue, please search for similar ones in the 13 | [closed issues](../../issues?q=is%3Aissue+is%3Aclosed+label%3Aenhancement). 14 | 15 | ## Pull Requests 16 | 17 | 1. Ensure any install or build dependencies are removed before the end of the layer when doing a build. 18 | 2. Increase the version numbers in any examples files and the README.md to the new version that this Pull Request would represent. The versioning scheme we use is [SemVer](http://semver.org/). 19 | 3. You may merge the Pull Request in once you have the sign-off of two other developers, or if you do not have permission to do that, you may request the second reviewer to merge it for you. 20 | 21 | ## Contributor License Agreement 22 | 23 | Keep in mind that when you submit your Pull Request, you'll need to sign the CLA via the click-through using CLA-Assistant. If you'd like to execute our corporate CLA, or if you have any questions, please drop us an email at opensource@newrelic.com. 24 | 25 | For more information about CLAs, please check out Alex Russell’s excellent post, 26 | [“Why Do I Need to Sign This?”](https://infrequently.org/2008/06/why-do-i-need-to-sign-this/). 27 | 28 | ## Slack 29 | 30 | We host a public Slack with a dedicated channel for contributors and maintainers of open source projects hosted by New Relic. If you are contributing to this project, you're welcome to request access to the #oss-contributors channel in the newrelicusers.slack.com workspace. To request access, please use this [link](https://join.slack.com/t/newrelicusers/shared_invite/zt-1ayj69rzm-~go~Eo1whIQGYnu3qi15ng). 31 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | --- 2 | name: Container build 3 | on: 4 | push: 5 | branches: 6 | - master 7 | - main 8 | - renovate/** 9 | pull_request: 10 | 11 | jobs: 12 | build: 13 | name: Build and scan image 14 | runs-on: ubuntu-latest 15 | env: # Variables as understood by docker-build.sh 16 | DOCKER_IMAGE: newrelic/infrastructure-bundle 17 | DOCKER_IMAGE_TAG: ci 18 | steps: 19 | - uses: actions/checkout@v4 20 | - name: Set up QEMU 21 | uses: docker/setup-qemu-action@v3 22 | - name: Set up Docker Buildx 23 | uses: docker/setup-buildx-action@v3 24 | - uses: actions/setup-go@v5 25 | with: 26 | go-version-file: go.mod 27 | - name: Download integrations 28 | run: go run downloader.go 29 | 30 | # Due to a limitation of buildx, multiarch images cannot be `--load`ed to the host 31 | # Therefore, to test vulnerabilities, we also re-build (fast with cache) for amd64 only and load it 32 | - name: Build docker image for all platforms 33 | run: | 34 | # Test build, but not load, for all archs 35 | ./docker-build.sh . 36 | # Build and load for amd64 only (for snyk) 37 | DOCKER_PLATFORMS=linux/amd64 ./docker-build.sh . --load 38 | 39 | - name: Check if CHANGELOG is valid 40 | uses: newrelic/release-toolkit/validate-markdown@v1 41 | 42 | build-fips: 43 | name: Build fips and scan image 44 | runs-on: ubuntu-latest 45 | env: # Variables as understood by docker-build.sh 46 | DOCKER_IMAGE: newrelic/infrastructure-bundle-fips 47 | DOCKER_IMAGE_TAG: ci 48 | OUTDIR: out-fips 49 | BASE_IMAGE_NAME: newrelic/infrastructure-fips 50 | DOCKER_PLATFORMS: linux/amd64,linux/arm64 51 | steps: 52 | - uses: actions/checkout@v4 53 | - name: Set up QEMU 54 | uses: docker/setup-qemu-action@v3 55 | - name: Set up Docker Buildx 56 | uses: docker/setup-buildx-action@v3 57 | - uses: actions/setup-go@v5 58 | with: 59 | go-version-file: go.mod 60 | - name: Download integrations 61 | run: go run downloader.go -bundle=bundle-fips.yml -outdir=out-fips 62 | 63 | # Due to a limitation of buildx, multiarch images cannot be `--load`ed to the host 64 | # Therefore, to test vulnerabilities, we also re-build (fast with cache) for amd64 only and load it 65 | - name: Build docker image for all platforms 66 | run: | 67 | # Test build, but not load, for all archs 68 | ./docker-build.sh . 69 | # Build and load for amd64 only (for snyk) 70 | DOCKER_PLATFORMS=linux/amd64 ./docker-build.sh . --load 71 | 72 | - name: Check if CHANGELOG is valid 73 | uses: newrelic/release-toolkit/validate-markdown@v1 74 | -------------------------------------------------------------------------------- /.github/workflows/on-demand.yml: -------------------------------------------------------------------------------- 1 | name: On demand build 2 | on: 3 | workflow_dispatch: 4 | inputs: 5 | agent_version: 6 | description: "Agent version" 7 | required: true 8 | jobs: 9 | build: 10 | name: Build and push image 11 | runs-on: ubuntu-latest 12 | env: 13 | DOCKER_IMAGE: newrelic/infrastructure-bundle 14 | DOCKER_IMAGE_TAG: dev 15 | AGENT_VERSION: ${{ github.event.inputs.agent_version }} 16 | steps: 17 | - uses: actions/checkout@v4 18 | - name: Set up QEMU 19 | uses: docker/setup-qemu-action@v3 20 | - name: Set up Docker Buildx 21 | uses: docker/setup-buildx-action@v3 22 | - uses: actions/setup-go@v5 23 | with: 24 | go-version-file: go.mod 25 | - name: Download integrations 26 | env: 27 | # GITHUB_TOKEN is needed when -override-latest is used so we don't reach GH API rate limit 28 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 29 | run: go run downloader.go -staging -override-latest 30 | 31 | - name: Run Trivy vulnerability scanner 32 | continue-on-error: true 33 | uses: aquasecurity/trivy-action@0.29.0 34 | with: 35 | image-ref: ${{ env.DOCKER_IMAGE }}:${{ env.DOCKER_IMAGE_TAG }} 36 | format: table 37 | exit-code: 1 38 | ignore-unfixed: true 39 | severity: CRITICAL,HIGH 40 | env: 41 | TRIVY_DB_REPOSITORY: public.ecr.aws/aquasecurity/trivy-db 42 | TRIVY_JAVA_DB_REPOSITORY: public.ecr.aws/aquasecurity/trivy-java-db 43 | 44 | - uses: docker/login-action@v3 45 | with: 46 | username: ${{ secrets.OHAI_DOCKER_HUB_ID }} 47 | password: ${{ secrets.OHAI_DOCKER_HUB_PASSWORD }} 48 | - name: Build and push docker image 49 | run: ./docker-build.sh . --push 50 | 51 | build-fips: 52 | name: Build fips and push image 53 | runs-on: ubuntu-latest 54 | env: 55 | DOCKER_IMAGE: newrelic/infrastructure-bundle-fips 56 | DOCKER_IMAGE_TAG: dev 57 | AGENT_VERSION: ${{ github.event.inputs.agent_version }} 58 | OUTDIR: out-fips 59 | BASE_IMAGE_NAME: newrelic/infrastructure-fips 60 | DOCKER_PLATFORMS: linux/amd64,linux/arm64 61 | steps: 62 | - uses: actions/checkout@v4 63 | - name: Set up QEMU 64 | uses: docker/setup-qemu-action@v3 65 | - name: Set up Docker Buildx 66 | uses: docker/setup-buildx-action@v3 67 | - uses: actions/setup-go@v5 68 | with: 69 | go-version-file: go.mod 70 | - name: Download integrations 71 | env: 72 | # GITHUB_TOKEN is needed when -override-latest is used so we don't reach GH API rate limit 73 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 74 | run: go run downloader.go -staging -override-latest -bundle=bundle-fips.yml -outdir=out-fips 75 | 76 | - name: Run Trivy vulnerability scanner 77 | continue-on-error: true 78 | uses: aquasecurity/trivy-action@0.29.0 79 | with: 80 | image-ref: ${{ env.DOCKER_IMAGE }}:${{ env.DOCKER_IMAGE_TAG }} 81 | format: table 82 | exit-code: 1 83 | ignore-unfixed: true 84 | severity: CRITICAL,HIGH 85 | env: 86 | TRIVY_DB_REPOSITORY: public.ecr.aws/aquasecurity/trivy-db 87 | TRIVY_JAVA_DB_REPOSITORY: public.ecr.aws/aquasecurity/trivy-java-db 88 | 89 | - uses: docker/login-action@v3 90 | with: 91 | username: ${{ secrets.OHAI_DOCKER_HUB_ID }} 92 | password: ${{ secrets.OHAI_DOCKER_HUB_PASSWORD }} 93 | - name: Build and push docker image 94 | run: ./docker-build.sh . --push 95 | -------------------------------------------------------------------------------- /bundle.yml: -------------------------------------------------------------------------------- 1 | # Version of the base agent image to use (`newrelic/infrastructure). 2 | # This is used by the `docker-build.sh` wrapper if AGENT_VERSION is not set 3 | agentVersion: 1.71.3 4 | 5 | # url, stagingUrl, and repo fields are compiled as templates. The `trimv` helper function can be used to remove the leading v 6 | # from a version string. 7 | 8 | # Used as defaults for all integrations below, can be overridden. Template. 9 | url: https://download.newrelic.com/infrastructure_agent/binaries/linux/{{.Arch}}/{{.Name}}_linux_{{.Version | trimv}}_{{.Arch}}.tar.gz 10 | # stagingUrl will be used if the download is invoked with -staging. Template. 11 | stagingUrl: https://github.com/newrelic/{{.Name}}/releases/download/{{.Version}}/{{.Name}}_linux_{{.Version | trimv}}_{{.Arch}}.tar.gz 12 | 13 | # List of architectures to fetch. 14 | archs: [ amd64, arm, arm64 ] 15 | # GitHub repo hosting the integration. Used to fetch the latest available version when using -latest. Template. 16 | repo: newrelic/{{.Name}} 17 | 18 | # List of files to check for existence after integration has been unpacked. Template. 19 | testFiles: 20 | # Test for existence of the main integation binary 21 | - /var/db/newrelic-infra/newrelic-integrations/bin/{{.Name}} 22 | 23 | # List of integrations to download. 24 | # Individual entries may override any of the values defined above. 25 | integrations: 26 | # - name: nri-apache 27 | # version: 1.5.0 28 | # 29 | # subpath: "" # Custom path to extract archive into. By default, it is assumed that the integration tarball is structured to be extracted in `/`. 30 | # archReplacements: # Used as a key->value replacement when making the current arch from []archs available in {{.Arch}}. Useful for sketchy naming schemes. 31 | # amd64: x86_64 32 | # 33 | # # Overrides: 34 | # archs: [] # Bundle this integration only in the specified architectures. 35 | # url: "" # Defaults to global `url`, useful if tarballs have odd naming schemes. 36 | # stagingUrl: "" # Defaults to global `stagingUrl`. 37 | # repo: "" # Defaults to global `repo`. 38 | - name: nri-apache 39 | version: v1.15.4 40 | - name: nri-cassandra 41 | version: v2.16.1 42 | - name: nri-consul 43 | version: v2.9.5 44 | - name: nri-couchbase 45 | version: v2.8.4 46 | - name: nri-elasticsearch 47 | version: v5.4.6 48 | - name: nri-f5 49 | version: v2.9.2 50 | - name: nri-haproxy 51 | version: v3.2.4 52 | - name: nri-jmx 53 | version: v3.11.2 54 | testFiles: 55 | - /opt/newrelic-infra/newrelic-integrations/bin/nri-jmx 56 | - name: nri-kafka 57 | version: v3.15.2 58 | - name: nri-memcached 59 | version: v2.7.4 60 | - name: nri-mongodb 61 | version: v2.10.2 62 | - name: nri-mysql 63 | version: v1.18.2 64 | - name: nri-nagios 65 | version: v2.11.4 66 | - name: nri-nginx 67 | version: v3.6.4 68 | - name: nri-postgresql 69 | version: v2.23.0 70 | - name: nri-rabbitmq 71 | version: v2.15.4 72 | - name: nri-redis 73 | version: v1.12.7 74 | - name: nrjmx 75 | version: v2.10.2 76 | url: https://download.newrelic.com/infrastructure_agent/binaries/linux/noarch/nrjmx_linux_{{.Version | trimv}}_noarch.tar.gz 77 | stagingUrl: https://github.com/newrelic/{{.Name}}/releases/download/{{.Version}}/nrjmx_linux_{{.Version | trimv}}_noarch.tar.gz 78 | testFiles: 79 | - /usr/bin/nrjmx 80 | - name: nri-discovery-kubernetes 81 | version: v1.13.7 82 | url: https://github.com/newrelic/{{.Name}}/releases/download/{{.Version}}/{{.Name}}_{{.Version | trimv}}_Linux_{{.Arch}}.tar.gz 83 | stagingUrl: https://github.com/newrelic/{{.Name}}/releases/download/{{.Version}}/{{.Name}}_{{.Version | trimv}}_Linux_{{.Arch}}.tar.gz 84 | subpath: var/db/newrelic-infra 85 | archReplacements: 86 | amd64: x86_64 87 | testFiles: 88 | - /var/db/newrelic-infra/nri-discovery-kubernetes 89 | - name: nri-mssql 90 | version: v2.25.2 91 | -------------------------------------------------------------------------------- /bundle-fips.yml: -------------------------------------------------------------------------------- 1 | # Version of the base agent image to use (`newrelic/infrastructure). 2 | # This is used by the `docker-build.sh` wrapper if AGENT_VERSION is not set 3 | agentVersion: 1.71.3 4 | 5 | # url, stagingUrl, and repo fields are compiled as templates. The `trimv` helper function can be used to remove the leading v 6 | # from a version string. 7 | 8 | # Used as defaults for all integrations below, can be overridden. Template. 9 | url: https://download.newrelic.com/infrastructure_agent/binaries/linux/{{.Arch}}/{{.Name}}-fips_linux_{{.Version | trimv}}_{{.Arch}}.tar.gz 10 | # stagingUrl will be used if the download is invoked with -staging. Template. 11 | stagingUrl: https://github.com/newrelic/{{.Name}}/releases/download/{{.Version}}/{{.Name}}-fips_linux_{{.Version | trimv}}_{{.Arch}}.tar.gz 12 | 13 | # List of architectures to fetch. 14 | archs: [ amd64, arm64 ] 15 | # GitHub repo hosting the integration. Used to fetch the latest available version when using -latest. Template. 16 | repo: newrelic/{{.Name}} 17 | 18 | # List of files to check for existence after integration has been unpacked. Template. 19 | testFiles: 20 | # Test for existence of the main integation binary 21 | - /var/db/newrelic-infra/newrelic-integrations/bin/{{.Name}} 22 | 23 | # List of integrations to download. 24 | # Individual entries may override any of the values defined above. 25 | integrations: 26 | # - name: nri-apache 27 | # version: 1.5.0 28 | # 29 | # subpath: "" # Custom path to extract archive into. By default, it is assumed that the integration tarball is structured to be extracted in `/`. 30 | # archReplacements: # Used as a key->value replacement when making the current arch from []archs available in {{.Arch}}. Useful for sketchy naming schemes. 31 | # amd64: x86_64 32 | # 33 | # # Overrides: 34 | # archs: [] # Bundle this integration only in the specified architectures. 35 | # url: "" # Defaults to global `url`, useful if tarballs have odd naming schemes. 36 | # stagingUrl: "" # Defaults to global `stagingUrl`. 37 | # repo: "" # Defaults to global `repo`. 38 | - name: nri-apache 39 | version: v1.15.4 40 | - name: nri-cassandra 41 | version: v2.16.1 42 | - name: nri-consul 43 | version: v2.9.5 44 | - name: nri-couchbase 45 | version: v2.8.4 46 | - name: nri-elasticsearch 47 | version: v5.4.6 48 | - name: nri-f5 49 | version: v2.9.2 50 | - name: nri-haproxy 51 | version: v3.2.4 52 | - name: nri-jmx 53 | version: v3.11.2 54 | testFiles: 55 | - /opt/newrelic-infra/newrelic-integrations/bin/nri-jmx 56 | - name: nri-kafka 57 | version: v3.15.2 58 | - name: nri-memcached 59 | version: v2.7.4 60 | - name: nri-mongodb 61 | version: v2.10.2 62 | - name: nri-mysql 63 | version: v1.18.2 64 | - name: nri-nagios 65 | version: v2.11.4 66 | - name: nri-nginx 67 | version: v3.6.4 68 | - name: nri-postgresql 69 | version: v2.23.0 70 | - name: nri-rabbitmq 71 | version: v2.15.4 72 | - name: nri-redis 73 | version: v1.12.7 74 | - name: nrjmx 75 | version: v2.10.2 76 | url: https://download.newrelic.com/infrastructure_agent/binaries/linux/noarch/nrjmx-fips_linux_{{.Version | trimv}}_noarch.tar.gz 77 | stagingUrl: https://github.com/newrelic/{{.Name}}/releases/download/{{.Version}}/nrjmx-fips_linux_{{.Version | trimv}}_noarch.tar.gz 78 | testFiles: 79 | - /usr/bin/nrjmx 80 | - name: nri-discovery-kubernetes 81 | version: v1.13.7 82 | url: https://github.com/newrelic/{{.Name}}/releases/download/{{.Version}}/{{.Name}}-fips_{{.Version | trimv}}_Linux_{{.Arch}}.tar.gz 83 | stagingUrl: https://github.com/newrelic/{{.Name}}/releases/download/{{.Version}}/{{.Name}}-fips_{{.Version | trimv}}_Linux_{{.Arch}}.tar.gz 84 | subpath: var/db/newrelic-infra 85 | archReplacements: 86 | amd64: x86_64 87 | testFiles: 88 | - /var/db/newrelic-infra/nri-discovery-kubernetes 89 | - name: nri-mssql 90 | version: v2.25.2 91 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Community Plus header](https://github.com/newrelic/opensource-website/raw/master/src/images/categories/Community_Plus.png)](https://opensource.newrelic.com/oss-category/#community-plus) 2 | 3 | # New Relic infrastructure monitoring bundle 4 | 5 | Build tooling to generate and release New Relic's containerised **bundle** for infrastructure monitoring, including the on-host agent, service integrations, and discovery tools. 6 | 7 | ## Requirements 8 | 9 | - Docker (with buildx set up if multiarch building is desired) 10 | - Go (for the downloader) 11 | - *nix compatible shell (verified to work on Linux and OSX) 12 | 13 | ## Installation and usage 14 | 15 | For install instructions, see [Docker container for infrastructure monitoring](https://docs.newrelic.com/docs/infrastructure/install-infrastructure-agent/linux-installation/docker-container-infrastructure-monitoring). 16 | 17 | ## Configuration 18 | 19 | New Relic will keep latest stable agent and integrations versions in the [`bundle.yml` file](https://github.com/newrelic/infrastructure-bundle/blob/master/bundle.yml). 20 | 21 | > You can edit the file and set your desired versions, at your own risk. 22 | 23 | ## Building 24 | 25 | Building multiarch images requires a working setup of [docker buildx](https://docs.docker.com/buildx/working-with-buildx/). 26 | A working installation of Go is also needed for running the downloader program. 27 | 28 | ```bash 29 | DOCKER_PLATFORMS=linux/amd64 ./run-ci-locally.sh 30 | ``` 31 | 32 | ### Without `docker buildx` 33 | 34 | A single-arch image can also be built without `buildx`. However, setting `DOCKER_BUILDKIT=1` might be required for older versions of docker, otherwise the `TARGETOS` and `TARGETARCH` variables won't be populated and docker will fail to copy the integrations from the host. 35 | 36 | ```bash 37 | # Run downloader script 38 | go run downloader.go 39 | 40 | # Build image 41 | DOCKER_BUILDKIT=1 docker build . -t newrelic/infrastructure-bundle:dev 42 | ``` 43 | 44 | ## Release 45 | 46 | Follow this [guide](https://github.com/newrelic/coreint-automation/blob/main/docs/release_runbook.md) to create a release. 47 | 48 | ### Released Images 49 | CI workflow pushes the multiarch image to [dockerhub](https://hub.docker.com/repository/docker/newrelic/infrastructure-bundle/tags) by running `docker buildx` with `--push` whenever a release or prerelease is published in Github. The tag is generated from the release tag (after stripping the leading `v`). Additionally, prereleases will have an `-rc` suffix automatically appended to the tag. 50 | 51 | Locally, this can be also be done with the `./run-ci-locally.sh` script: 52 | 53 | ```bash 54 | DOCKER_IMAGE_TAG=0.0.1-rc ./run-ci-locally.sh release 55 | ``` 56 | 57 | 58 | ## Bumping versions 59 | 60 | **Note** Renovate should take care of bumping versions, and auto-merge them when all checks passes. If so automatically releases will pick that versions bumps without needed to add any changelog. 61 | 62 | Versions, urls, and architectures of the bundled integrations are defined in `bundle.yml`. 63 | 64 | The version of the [base agent image](https://hub.docker.com/repository/docker/newrelic/infrastructure/tags) is also defined in `bundle.yml`, and is collected by the `docker-build.sh` wrapper script. 65 | 66 | ## Support 67 | 68 | Should you need assistance with New Relic products, you are in good hands with several support diagnostic tools and support channels. 69 | 70 | If the issue has been confirmed as a bug or is a feature request, file a GitHub issue. 71 | 72 | **Support Channels** 73 | 74 | * [New Relic Documentation](https://docs.newrelic.com): Comprehensive guidance for using our platform 75 | * [New Relic Community](https://discuss.newrelic.com/c/support-products-agents/new-relic-infrastructure): The best place to engage in troubleshooting questions 76 | * [New Relic Developer](https://developer.newrelic.com/): Resources for building a custom observability applications 77 | * [New Relic University](https://learn.newrelic.com/): A range of online training for New Relic users of every level 78 | * [New Relic Technical Support](https://support.newrelic.com/) 24/7/365 ticketed support. Read more about our [Technical Support Offerings](https://docs.newrelic.com/docs/licenses/license-information/general-usage-licenses/support-plan). 79 | 80 | ## Privacy 81 | 82 | At New Relic we take your privacy and the security of your information seriously, and are committed to protecting your information. We must emphasize the importance of not sharing personal data in public forums, and ask all users to scrub logs and diagnostic information for sensitive information, whether personal, proprietary, or otherwise. 83 | 84 | We define “Personal Data” as any information relating to an identified or identifiable individual, including, for example, your name, phone number, post code or zip code, Device ID, IP address, and email address. 85 | 86 | For more information, review [New Relic’s General Data Privacy Notice](https://newrelic.com/termsandconditions/privacy). 87 | 88 | ## Contribute 89 | 90 | We encourage your contributions to improve this project! Keep in mind that when you submit your pull request, you'll need to sign the CLA via the click-through using CLA-Assistant. You only have to sign the CLA one time per project. 91 | 92 | If you have any questions, or to execute our corporate CLA (which is required if your contribution is on behalf of a company), drop us an email at opensource@newrelic.com. 93 | 94 | **A note about vulnerabilities** 95 | 96 | As noted in our [security policy](../../security/policy), New Relic is committed to the privacy and security of our customers and their data. We believe that providing coordinated disclosure by security researchers and engaging with the security community are important means to achieve our security goals. 97 | 98 | If you believe you have found a security vulnerability in this project or any of New Relic's products or websites, we welcome and greatly appreciate you reporting it to New Relic through [HackerOne](https://hackerone.com/newrelic). 99 | 100 | If you would like to contribute to this project, review [these guidelines](./CONTRIBUTING.md). 101 | 102 | To all contributors, we thank you! Without your contribution, this project would not be what it is today. 103 | 104 | ## License 105 | 106 | infrastructure-bundle is licensed under the [Apache 2.0](http://apache.org/licenses/LICENSE-2.0.txt) License. 107 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright 2020 New Relic 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /downloader.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "bytes" 5 | "context" 6 | "flag" 7 | "fmt" 8 | "io/fs" 9 | "log" 10 | "net/http" 11 | "os" 12 | "os/exec" 13 | "path" 14 | "path/filepath" 15 | "sort" 16 | "strings" 17 | "sync" 18 | "text/template" 19 | 20 | "github.com/google/go-github/v66/github" 21 | "golang.org/x/oauth2" 22 | "gopkg.in/yaml.v3" 23 | ) 24 | 25 | // config is the in-memory representation of the bundle.yml file 26 | type config struct { 27 | AgentVersion string `yaml:"agentVersion"` 28 | Integrations []integration `yaml:"integrations"` 29 | 30 | integrationConfig `yaml:",inline"` // Default fields for integrations 31 | } 32 | 33 | type integration struct { 34 | Name string `yaml:"name"` 35 | Version string `yaml:"version"` 36 | oldVersion string // Will be set to the old version if a new one is found 37 | integrationConfig `yaml:",inline"` // Per-integration overrides 38 | Arch string `yaml:"-"` // Used for convenience evaluating the template 39 | ArchReplacements map[string]string `yaml:"archReplacements"` 40 | 41 | Subpath string `yaml:"subpath"` // Extract to this subfolder, rather than the virtual root 42 | } 43 | 44 | type integrationConfig struct { 45 | URL string `yaml:"url"` 46 | StagingUrl string `yaml:"stagingUrl"` 47 | Repo string `yaml:"repo"` 48 | Archs []string `yaml:"archs"` 49 | TestFiles []string `yaml:"testFiles"` 50 | 51 | urlTemplate *template.Template // used to store the compiled URL template 52 | repoTemplate *template.Template // used to store the compiled Repo template 53 | testFilesTemplate []*template.Template // used to store the compiled TestFiles templates 54 | } 55 | 56 | func main() { 57 | bfname := flag.String("bundle", "bundle.yml", "path to bundle.yml") 58 | outdir := flag.String("outdir", "out", "path to output directory") 59 | workers := flag.Int("workers", 4, "number of download threads") 60 | agentonly := flag.Bool("agent-version", false, "print agent version and exit") 61 | agentlatest := flag.Bool("agent-version-latest", false, "print latest agent version and exit") 62 | staging := flag.Bool("staging", false, "use stagingUrl and pre-releases") 63 | overrideLatest := flag.Bool("override-latest", false, "ignore version and download latest from GitHub") 64 | checkLatest := flag.Bool("check-latest", false, "check for new versions and exit") 65 | flag.Parse() 66 | 67 | bundleFile, err := os.Open(*bfname) 68 | if err != nil { 69 | log.Fatal(err) 70 | } 71 | 72 | conf := config{} 73 | err = yaml.NewDecoder(bundleFile).Decode(&conf) 74 | if err != nil { 75 | log.Fatal(err) 76 | } 77 | 78 | // Print agent version and exit 79 | if *agentonly { 80 | fmt.Print(conf.AgentVersion) 81 | return 82 | } 83 | 84 | // Print agent version and exit 85 | if *agentlatest { 86 | gh := github.NewClient(oauthClientFromEnv()) 87 | v, err := getLatestAgent(gh, conf.AgentVersion, *staging) 88 | if err != nil { 89 | log.Fatal(err) 90 | } 91 | fmt.Print(v) 92 | return 93 | } 94 | 95 | // Validate and expand config 96 | if err := conf.expand(*staging, *overrideLatest || *checkLatest); err != nil { 97 | log.Fatal(err) 98 | } 99 | 100 | // Print new versions and exit. 101 | if *checkLatest { 102 | conf.printUpdates() 103 | 104 | return 105 | } 106 | 107 | // Scan all archs defined in the integration list and create subfolders for them 108 | // This is done separately from the concurrent download step to avoid concurrency issues 109 | if err := mkdirArchs(*outdir, conf.Integrations); err != nil { 110 | log.Fatal(err) 111 | } 112 | 113 | // Concurrently download and extract integrations in the yaml file 114 | ichan := make(chan *integration, len(conf.Integrations)) 115 | wg := &sync.WaitGroup{} 116 | for i := 0; i < *workers; i++ { 117 | wg.Add(1) 118 | go func() { 119 | for i := range ichan { 120 | err := i.download(*outdir) 121 | if err != nil { 122 | log.Fatalf("Error downloading integration: %v", err) 123 | } 124 | } 125 | wg.Done() 126 | }() 127 | } 128 | 129 | // Send integration specs to the workers 130 | for i := range conf.Integrations { 131 | ichan <- &conf.Integrations[i] 132 | } 133 | close(ichan) 134 | wg.Wait() 135 | 136 | log.Printf("Preparing tree for install...") 137 | if err := prepareTree(*outdir); err != nil { 138 | log.Fatal(err) 139 | } 140 | 141 | log.Printf("Checking files for existence...") 142 | if err := conf.testFiles(*outdir); err != nil { 143 | log.Fatal(err) 144 | } 145 | 146 | log.Printf("All done, integrations installed to '%s'", *outdir) 147 | } 148 | 149 | // getLatestAgent fetches the image name of the latest agent release (or prerelease) 150 | func getLatestAgent(gh *github.Client, curentVersion string, useStaging bool) (string, error) { 151 | org := "newrelic" 152 | repo := "infrastructure-agent" 153 | newVersion, err := findLatestRelease(gh, useStaging, org, repo) 154 | if err != nil { 155 | return "", fmt.Errorf("failed to retrieve latest release: %w", err) 156 | } 157 | 158 | if curentVersion != newVersion { 159 | log.Printf("%s %s -> %s", repo, curentVersion, newVersion) 160 | } 161 | 162 | if useStaging { 163 | return newVersion + "-rc", nil 164 | } 165 | 166 | return newVersion, nil 167 | } 168 | 169 | // expand compiles templates, extends defaults to integrations and performs basic validation 170 | func (conf *config) expand(useStaging, overrideLatest bool) error { 171 | if useStaging { 172 | conf.URL = conf.StagingUrl 173 | } 174 | 175 | if conf.URL == "" { 176 | return fmt.Errorf("global download URL template is empty") 177 | } 178 | 179 | if conf.Repo == "" { 180 | return fmt.Errorf("global repo name template is empty") 181 | } 182 | 183 | if err := conf.compileTemplates(); err != nil { 184 | return fmt.Errorf("compiling global templates: %w", err) 185 | } 186 | 187 | // Build GithubClient and fetch releases 188 | // oauthClientFromEnv will return an authenticated client if `$GITHUB_TOKEN` is present, or the default otherwise 189 | gh := github.NewClient(oauthClientFromEnv()) 190 | 191 | // Iterate over integrations expanding their configs as well 192 | for i := range conf.Integrations { 193 | integration := &conf.Integrations[i] 194 | 195 | if err := integration.expand(useStaging, &conf.integrationConfig); err != nil { 196 | return fmt.Errorf("expanding config for %q: %w", integration.Name, err) 197 | } 198 | 199 | // Skip version override if flag is not present 200 | if !overrideLatest { 201 | continue 202 | } 203 | 204 | // Fetch latest version from GitHub and override the one present in the original config. 205 | if err := integration.overrideVersion(gh, useStaging); err != nil { 206 | return fmt.Errorf("overrding version for %q: %w", integration.Name, err) 207 | } 208 | } 209 | 210 | return nil 211 | } 212 | 213 | // printUpdates prints the integrations that have an update available. 214 | func (conf *config) printUpdates() { 215 | for _, i := range conf.Integrations { 216 | if i.oldVersion == "" { 217 | continue 218 | } 219 | 220 | fmt.Printf(" - name: %s\n version: %s\n", i.Name, i.Version) 221 | } 222 | } 223 | 224 | // testFiles checks for existence of all the testFiles defined in the config. 225 | func (conf *config) testFiles(outdir string) error { 226 | for _, i := range conf.Integrations { 227 | for tn, tmpl := range i.testFilesTemplate { 228 | for _, arch := range i.Archs { 229 | pathBuf := &bytes.Buffer{} 230 | if err := tmpl.Execute(pathBuf, &i); err != nil { 231 | return fmt.Errorf("evaluating testFiles[%d] for integration %q: %w", tn, i.Name, err) 232 | } 233 | 234 | _, err := os.Stat(filepath.Join(outdir, arch, pathBuf.String())) 235 | if err != nil { 236 | return fmt.Errorf("existence chech for %q for integration %q failed: %w", pathBuf.String(), i.Name, err) 237 | } 238 | } 239 | } 240 | } 241 | 242 | return nil 243 | } 244 | 245 | func (ic *integrationConfig) compileTemplates() error { 246 | // URL template 247 | urlTemplate, err := newTemplate("url").Parse(ic.URL) 248 | if err != nil { 249 | return fmt.Errorf("evaluating global URL template: %v", err) 250 | } 251 | ic.urlTemplate = urlTemplate 252 | 253 | // Repo templates 254 | repoTemplate, err := newTemplate("repo").Parse(ic.Repo) 255 | if err != nil { 256 | return fmt.Errorf("evaluating global URL template: %v", err) 257 | } 258 | ic.repoTemplate = repoTemplate 259 | 260 | // TestFiles templates 261 | testFilesTemplates := make([]*template.Template, len(ic.TestFiles)) 262 | for i, templateText := range ic.TestFiles { 263 | testFilesTemplate, err := newTemplate("testFiles").Parse(templateText) 264 | if err != nil { 265 | return fmt.Errorf("evaluating global URL template: %v", err) 266 | } 267 | 268 | testFilesTemplates[i] = testFilesTemplate 269 | } 270 | ic.testFilesTemplate = testFilesTemplates 271 | 272 | return nil 273 | } 274 | 275 | // expand performs validation and fills empty values with those defined in the integration config. 276 | func (i *integration) expand(useStaging bool, defaults *integrationConfig) error { 277 | if i.Name == "" { 278 | return fmt.Errorf("cannot process integration with an empty name") 279 | } 280 | 281 | // Copy global arch list if not defined 282 | if len(i.Archs) == 0 { 283 | i.Archs = defaults.Archs 284 | } 285 | 286 | if i.StagingUrl != "" && useStaging { 287 | i.URL = i.StagingUrl 288 | } 289 | 290 | // Compile local templates 291 | if err := i.compileTemplates(); err != nil { 292 | return fmt.Errorf("compiling templates for integration %q: %w", i.Name, err) 293 | } 294 | 295 | // Inherit global templates if local are empty 296 | if i.URL == "" { 297 | i.urlTemplate = defaults.urlTemplate 298 | } 299 | 300 | if i.Repo == "" { 301 | i.repoTemplate = defaults.repoTemplate 302 | } 303 | 304 | if len(i.testFilesTemplate) == 0 { 305 | i.testFilesTemplate = defaults.testFilesTemplate 306 | } 307 | 308 | return nil 309 | } 310 | 311 | // download expands the URL template for each integration arch and extracts it to outdir 312 | func (i *integration) download(outdir string) error { 313 | // Check for empty version here rather than when expanding config since version may also come from Github 314 | if i.Version == "" { 315 | return fmt.Errorf("cannot download '%s' with an empty version", i.Name) 316 | } 317 | 318 | // Different archs for the same integration are processed sequentially 319 | for _, arch := range i.Archs { 320 | // Process arch replacements in URL 321 | if replArch, hasReplacement := i.ArchReplacements[arch]; hasReplacement { 322 | i.Arch = replArch 323 | } else { 324 | i.Arch = arch 325 | } 326 | 327 | urlbuf := &bytes.Buffer{} 328 | err := i.urlTemplate.Execute(urlbuf, i) 329 | if err != nil { 330 | return fmt.Errorf("error evaluating template: %v", err) 331 | } 332 | url := urlbuf.String() 333 | 334 | if !strings.HasPrefix(url, "https://") { 335 | return fmt.Errorf("refusing to download using insecure non-https url: %s", url) 336 | } 337 | 338 | log.Printf("Downloading %s", url) 339 | response, err := http.Get(url) 340 | if err != nil { 341 | return fmt.Errorf("downloading %s (%s): %w", i.Name, arch, err) 342 | } 343 | 344 | defer response.Body.Close() 345 | 346 | if response.StatusCode >= 300 { 347 | return fmt.Errorf("got status %d when fetching %s", response.StatusCode, url) 348 | } 349 | 350 | // Prepare path to extract, outdir/$arch 351 | destination := path.Join(outdir, arch) 352 | // Append subpath if defined. Usually not required since tarballs are structured to be extracted in /. 353 | if i.Subpath != "" { 354 | destination = path.Join(destination, i.Subpath) 355 | } 356 | 357 | log.Printf("Downloading and extracting %s (%s)", i.Name, arch) 358 | // Invoke tar externally with pipe (simplifies code). 359 | cmd := exec.Command("tar", "-xz") 360 | cmd.Dir = destination 361 | cmd.Stdin = response.Body 362 | cmd.Stdout = os.Stderr 363 | cmd.Stderr = os.Stderr 364 | 365 | if err := cmd.Run(); err != nil { 366 | return fmt.Errorf("error running tar: %v", err) 367 | } 368 | } 369 | 370 | return nil 371 | } 372 | 373 | // overrideVersion fetches the tag name of the latest release (or prerelease) from Github 374 | func (i *integration) overrideVersion(gh *github.Client, includePrereleases bool) error { 375 | // Evaluate repo template 376 | repobuf := &bytes.Buffer{} 377 | 378 | if err := i.repoTemplate.Execute(repobuf, i); err != nil { 379 | return fmt.Errorf("could not evaluate repo template: %w", err) 380 | } 381 | 382 | // Split in user/repo 383 | orgRepo := strings.Split(repobuf.String(), "/") 384 | if len(orgRepo) != 2 { 385 | return fmt.Errorf("bad format for org/repo: %s", i.Repo) 386 | } 387 | 388 | newVersion, err := findLatestRelease(gh, includePrereleases, orgRepo[0], orgRepo[1]) 389 | if err != nil { 390 | return err 391 | } 392 | 393 | if i.Version != newVersion { 394 | log.Printf("%s %s -> %s", i.Name, i.Version, newVersion) 395 | i.oldVersion = i.Version 396 | i.Version = newVersion 397 | } 398 | 399 | return nil 400 | } 401 | 402 | func findLatestRelease(gh *github.Client, includePrereleases bool, org string, repo string) (string, error) { 403 | 404 | log.Printf("Fetching releases for %s...", repo) 405 | 406 | allReleases := make([]*github.RepositoryRelease, 0, 30) // GH returns max 30 releases per page 407 | for page := 1; page != 0; { 408 | releases, response, err := gh.Repositories.ListReleases(context.Background(), org, repo, &github.ListOptions{ 409 | Page: page, 410 | }) 411 | if err != nil { 412 | return "", fmt.Errorf("could not get releases for %s: %w", repo, err) 413 | } 414 | 415 | allReleases = append(allReleases, releases...) 416 | page = response.NextPage 417 | } 418 | 419 | releases := make([]*github.RepositoryRelease, 0, len(allReleases)) 420 | for _, r := range allReleases { 421 | // Filter out pre-releases if `includePrereleases` is not set. 422 | if !includePrereleases && r.GetPrerelease() { 423 | log.Printf("skipping pre-release %s %s", repo, r.GetTagName()) 424 | continue 425 | } 426 | 427 | releases = append(releases, r) 428 | } 429 | 430 | if len(releases) == 0 { 431 | return "", fmt.Errorf("repo %s does not have any acceptable release", repo) 432 | } 433 | 434 | // Sort most recent first 435 | // TODO: Implement semver comparison instead of sorting by release date 436 | sort.Slice(releases, func(i, j int) bool { 437 | return releases[i].GetPublishedAt().After(releases[j].GetPublishedAt().Time) 438 | }) 439 | 440 | newVersion := releases[0].GetTagName() 441 | if newVersion == "" { 442 | return "", fmt.Errorf("tagName for latest release of %s is empty", repo) 443 | } 444 | return newVersion, nil 445 | } 446 | 447 | // oauthClientFromEnv returns an OAuth client using the GITHUB_TOKEN env var if it's present, or http.DefaultClient otherwise 448 | func oauthClientFromEnv() *http.Client { 449 | ghtoken := os.Getenv("GITHUB_TOKEN") 450 | if ghtoken == "" { 451 | return http.DefaultClient 452 | } 453 | 454 | ts := oauth2.StaticTokenSource( 455 | &oauth2.Token{AccessToken: ghtoken}, 456 | ) 457 | return oauth2.NewClient(context.Background(), ts) 458 | } 459 | 460 | // prepareTree cleans up *.sample and windows-related files 461 | func prepareTree(outdir string) error { 462 | return filepath.Walk(outdir, func(path string, info fs.FileInfo, err error) error { 463 | if info.IsDir() { 464 | return nil // Continue 465 | } 466 | 467 | if strings.HasSuffix(info.Name(), ".sample") { 468 | return os.Remove(path) 469 | } 470 | 471 | for _, pattern := range []string{"-win-", "README", "CHANGELOG", "LICENSE"} { 472 | if strings.Contains(info.Name(), pattern) { 473 | return os.Remove(path) 474 | } 475 | } 476 | return nil 477 | }) 478 | } 479 | 480 | // mkdirArchs scans all archs present in the integrations list and creates subfolders for them 481 | func mkdirArchs(outdir string, integrations []integration) error { 482 | // Collect all archs defined in all integrations 483 | paths := map[string]struct{}{} 484 | for _, i := range integrations { 485 | for _, arch := range i.Archs { 486 | paths[arch] = struct{}{} 487 | // If a subpath is defined, we need to create it as well 488 | if i.Subpath != "" { 489 | paths[path.Join(arch, i.Subpath)] = struct{}{} 490 | } 491 | } 492 | } 493 | 494 | for arch := range paths { 495 | if err := os.MkdirAll(path.Join(outdir, arch), 0o755); err != nil { 496 | return fmt.Errorf("cannot create %s/%s: %v", outdir, arch, err) 497 | } 498 | } 499 | 500 | return nil 501 | } 502 | 503 | // newTemplate creates a new template and adds the helper trimv function 504 | func newTemplate(name string) *template.Template { 505 | return template.New(name).Funcs( 506 | template.FuncMap{ 507 | // trimv is a helper template function that removes leading v from the input string, typically a version 508 | "trimv": func(str string) string { 509 | return strings.TrimPrefix(str, "v") 510 | }, 511 | }, 512 | ) 513 | } 514 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | All notable changes to this project will be documented in this file. 4 | 5 | The format is based on [Keep a Changelog](http://keepachangelog.com/) 6 | and this project adheres to [Semantic Versioning](http://semver.org/). 7 | 8 | Unreleased section should follow [Release Toolkit](https://github.com/newrelic/release-toolkit#render-markdown-and-update-markdown) 9 | 10 | ## Unreleased 11 | 12 | ## v3.3.8 - 2025-12-18 13 | 14 | ### ⛓️ Dependencies 15 | - Updated newrelic/nri-f5 to v2.9.2 - [Changelog 🔗](https://github.com/newrelic/nri-f5/releases/tag/v2.9.2) 16 | - Updated newrelic/nri-mongodb to v2.10.2 - [Changelog 🔗](https://github.com/newrelic/nri-mongodb/releases/tag/v2.10.2) 17 | - Updated newrelic/nri-discovery-kubernetes to v1.13.7 - [Changelog 🔗](https://github.com/newrelic/nri-discovery-kubernetes/releases/tag/v1.13.7) 18 | - Updated newrelic/nri-jmx to v3.11.2 - [Changelog 🔗](https://github.com/newrelic/nri-jmx/releases/tag/v3.11.2) 19 | 20 | ## v3.3.7 - 2025-12-18 21 | 22 | ### ⛓️ Dependencies 23 | - Updated newrelic/infrastructure to v1.71.3 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.71.3) 24 | - Updated newrelic/nri-consul to v2.9.5 - [Changelog 🔗](https://github.com/newrelic/nri-consul/releases/tag/v2.9.5) 25 | - Updated newrelic/nri-mysql to v1.18.2 - [Changelog 🔗](https://github.com/newrelic/nri-mysql/releases/tag/v1.18.2) 26 | - Updated newrelic/nri-memcached to v2.7.4 - [Changelog 🔗](https://github.com/newrelic/nri-memcached/releases/tag/v2.7.4) 27 | - Updated newrelic/nri-redis to v1.12.7 - [Changelog 🔗](https://github.com/newrelic/nri-redis/releases/tag/v1.12.7) 28 | - Updated newrelic/nri-apache to v1.15.4 - [Changelog 🔗](https://github.com/newrelic/nri-apache/releases/tag/v1.15.4) 29 | - Updated newrelic/nri-postgresql to v2.23.0 - [Changelog 🔗](https://github.com/newrelic/nri-postgresql/releases/tag/v2.23.0) 30 | - Updated newrelic/nri-haproxy to v3.2.4 - [Changelog 🔗](https://github.com/newrelic/nri-haproxy/releases/tag/v3.2.4) 31 | - Updated newrelic/nri-nagios to v2.11.4 - [Changelog 🔗](https://github.com/newrelic/nri-nagios/releases/tag/v2.11.4) 32 | - Updated newrelic/nri-elasticsearch to v5.4.6 - [Changelog 🔗](https://github.com/newrelic/nri-elasticsearch/releases/tag/v5.4.6) 33 | - Updated newrelic/nri-couchbase to v2.8.4 - [Changelog 🔗](https://github.com/newrelic/nri-couchbase/releases/tag/v2.8.4) 34 | - Updated newrelic/nri-rabbitmq to v2.15.4 - [Changelog 🔗](https://github.com/newrelic/nri-rabbitmq/releases/tag/v2.15.4) 35 | - Updated newrelic/nri-mssql to v2.25.2 - [Changelog 🔗](https://github.com/newrelic/nri-mssql/releases/tag/v2.25.2) 36 | - Updated newrelic/nri-kafka to v3.15.2 - [Changelog 🔗](https://github.com/newrelic/nri-kafka/releases/tag/v3.15.2) 37 | - Updated newrelic/nri-cassandra to v2.16.1 - [Changelog 🔗](https://github.com/newrelic/nri-cassandra/releases/tag/v2.16.1) 38 | - Updated newrelic/nri-nginx to v3.6.4 - [Changelog 🔗](https://github.com/newrelic/nri-nginx/releases/tag/v3.6.4) 39 | 40 | ## v3.3.6 - 2025-10-30 41 | 42 | ### ⛓️ Dependencies 43 | - Updated newrelic/nrjmx to v2.10.2 - [Changelog 🔗](https://github.com/newrelic/nrjmx/releases/tag/v2.10.2) 44 | - Updated newrelic/nri-mssql to v2.22.0 - [Changelog 🔗](https://github.com/newrelic/nri-mssql/releases/tag/v2.22.0) 45 | - Updated newrelic/infrastructure to v1.71.0 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.71.0) 46 | 47 | ## v3.3.5 - 2025-10-07 48 | 49 | ### ⛓️ Dependencies 50 | - Updated newrelic/nri-mssql to v2.21.1 - [Changelog 🔗](https://github.com/newrelic/nri-mssql/releases/tag/v2.21.1) 51 | - Updated newrelic/nri-redis to v1.12.4 - [Changelog 🔗](https://github.com/newrelic/nri-redis/releases/tag/v1.12.4) 52 | 53 | ## v3.3.4 - 2025-10-02 54 | 55 | ### ⛓️ Dependencies 56 | - Updated newrelic/infrastructure to v1.69.0 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.69.0) 57 | - Updated newrelic/nri-elasticsearch to v5.4.4 - [Changelog 🔗](https://github.com/newrelic/nri-elasticsearch/releases/tag/v5.4.4) 58 | 59 | ## v3.3.3 - 2025-09-25 60 | 61 | ### ⛓️ Dependencies 62 | - Updated newrelic/nri-discovery-kubernetes to v1.13.4 - [Changelog 🔗](https://github.com/newrelic/nri-discovery-kubernetes/releases/tag/v1.13.4) 63 | - Updated newrelic/nri-postgresql to v2.21.0 - [Changelog 🔗](https://github.com/newrelic/nri-postgresql/releases/tag/v2.21.0) 64 | 65 | ## v3.3.2 - 2025-09-19 66 | 67 | ### 🐞 Bug fixes 68 | - Fixed publishing for FIPS pre releases and releases 69 | 70 | ## v3.3.1 - 2025-09-18 71 | 72 | ### ⛓️ Dependencies 73 | - Updated newrelic/nri-discovery-kubernetes to v1.13.3 - [Changelog 🔗](https://github.com/newrelic/nri-discovery-kubernetes/releases/tag/v1.13.3) 74 | - Updated newrelic/nri-mssql to v2.21.0 - [Changelog 🔗](https://github.com/newrelic/nri-mssql/releases/tag/v2.21.0) 75 | - Updated newrelic/infrastructure to v1.68.0 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.68.0) 76 | 77 | ## v3.3.0 - 2025-09-16 78 | 79 | ### 🚀 Enhancements 80 | - Added support for a FIPS compatible infrastructure bundle image 81 | 82 | ## v3.2.86 - 2025-09-11 83 | 84 | ### ⛓️ Dependencies 85 | - Updated newrelic/nri-cassandra to v2.15.0 - [Changelog 🔗](https://github.com/newrelic/nri-cassandra/releases/tag/v2.15.0) 86 | - Updated newrelic/nri-discovery-kubernetes to v1.13.2 - [Changelog 🔗](https://github.com/newrelic/nri-discovery-kubernetes/releases/tag/v1.13.2) 87 | - Updated newrelic/nri-kafka to v3.14.0 - [Changelog 🔗](https://github.com/newrelic/nri-kafka/releases/tag/v3.14.0) 88 | - Updated newrelic/nri-jmx to v3.10.0 - [Changelog 🔗](https://github.com/newrelic/nri-jmx/releases/tag/v3.10.0) 89 | 90 | ## v3.2.85 - 2025-09-02 91 | 92 | ### ⛓️ Dependencies 93 | - Updated newrelic/nri-postgresql to v2.20.1 - [Changelog 🔗](https://github.com/newrelic/nri-postgresql/releases/tag/v2.20.1) 94 | - Updated newrelic/nri-mysql to v1.17.0 - [Changelog 🔗](https://github.com/newrelic/nri-mysql/releases/tag/v1.17.0) 95 | - Updated newrelic/nri-redis to v1.12.3 - [Changelog 🔗](https://github.com/newrelic/nri-redis/releases/tag/v1.12.3) 96 | - Updated newrelic/nri-nagios to v2.11.2 - [Changelog 🔗](https://github.com/newrelic/nri-nagios/releases/tag/v2.11.2) 97 | - Updated newrelic/nri-memcached to v2.7.2 - [Changelog 🔗](https://github.com/newrelic/nri-memcached/releases/tag/v2.7.2) 98 | - Updated newrelic/nri-haproxy to v3.2.2 - [Changelog 🔗](https://github.com/newrelic/nri-haproxy/releases/tag/v3.2.2) 99 | - Updated newrelic/nri-elasticsearch to v5.4.3 - [Changelog 🔗](https://github.com/newrelic/nri-elasticsearch/releases/tag/v5.4.3) 100 | - Updated newrelic/nri-consul to v2.9.3 - [Changelog 🔗](https://github.com/newrelic/nri-consul/releases/tag/v2.9.3) 101 | - Updated newrelic/nri-discovery-kubernetes to v1.13.1 - [Changelog 🔗](https://github.com/newrelic/nri-discovery-kubernetes/releases/tag/v1.13.1) 102 | - Updated newrelic/nri-apache to v1.15.2 - [Changelog 🔗](https://github.com/newrelic/nri-apache/releases/tag/v1.15.2) 103 | - Updated newrelic/nri-nginx to v3.6.2 - [Changelog 🔗](https://github.com/newrelic/nri-nginx/releases/tag/v3.6.2) 104 | - Updated newrelic/nri-kafka to v3.13.3 - [Changelog 🔗](https://github.com/newrelic/nri-kafka/releases/tag/v3.13.3) 105 | - Updated newrelic/nri-cassandra to v2.14.7 - [Changelog 🔗](https://github.com/newrelic/nri-cassandra/releases/tag/v2.14.7) 106 | - Updated newrelic/nri-couchbase to v2.8.2 - [Changelog 🔗](https://github.com/newrelic/nri-couchbase/releases/tag/v2.8.2) 107 | - Updated newrelic/nri-f5 to v2.9.0 - [Changelog 🔗](https://github.com/newrelic/nri-f5/releases/tag/v2.9.0) 108 | - Updated newrelic/nri-mssql to v2.20.3 - [Changelog 🔗](https://github.com/newrelic/nri-mssql/releases/tag/v2.20.3) 109 | - Updated newrelic/nri-rabbitmq to v2.15.2 - [Changelog 🔗](https://github.com/newrelic/nri-rabbitmq/releases/tag/v2.15.2) 110 | - Updated newrelic/infrastructure to v1.67.3 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.67.3) 111 | - Updated newrelic/nri-mongodb to v2.9.4 - [Changelog 🔗](https://github.com/newrelic/nri-mongodb/releases/tag/v2.9.4) 112 | - Updated newrelic/nri-jmx to v3.9.0 - [Changelog 🔗](https://github.com/newrelic/nri-jmx/releases/tag/v3.9.0) 113 | - Updated newrelic/nrjmx to v2.10.1 - [Changelog 🔗](https://github.com/newrelic/nrjmx/releases/tag/v2.10.1) 114 | 115 | ## v3.2.84 - 2025-08-14 116 | 117 | ### ⛓️ Dependencies 118 | - Updated newrelic/infrastructure to v1.66.1 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.66.1) 119 | 120 | ## v3.2.83 - 2025-08-07 121 | 122 | ### ⛓️ Dependencies 123 | - Updated newrelic/nri-discovery-kubernetes to v1.13.0 - [Changelog 🔗](https://github.com/newrelic/nri-discovery-kubernetes/releases/tag/v1.13.0) 124 | - Updated newrelic/nri-f5 to v2.8.6 - [Changelog 🔗](https://github.com/newrelic/nri-f5/releases/tag/v2.8.6) 125 | - Updated newrelic/nri-kafka to v3.13.2 - [Changelog 🔗](https://github.com/newrelic/nri-kafka/releases/tag/v3.13.2) 126 | - Updated newrelic/nri-cassandra to v2.14.6 - [Changelog 🔗](https://github.com/newrelic/nri-cassandra/releases/tag/v2.14.6) 127 | - Updated newrelic/nri-postgresql to v2.20.0 - [Changelog 🔗](https://github.com/newrelic/nri-postgresql/releases/tag/v2.20.0) 128 | 129 | ## v3.2.82 - 2025-07-31 130 | 131 | ### ⛓️ Dependencies 132 | - Updated newrelic/nri-f5 to v2.8.5 - [Changelog 🔗](https://github.com/newrelic/nri-f5/releases/tag/v2.8.5) 133 | 134 | ## v3.2.81 - 2025-07-17 135 | 136 | ### ⛓️ Dependencies 137 | - Updated newrelic/nri-cassandra to v2.14.5 - [Changelog 🔗](https://github.com/newrelic/nri-cassandra/releases/tag/v2.14.5) 138 | - Updated newrelic/nri-kafka to v3.13.1 - [Changelog 🔗](https://github.com/newrelic/nri-kafka/releases/tag/v3.13.1) 139 | 140 | ## v3.2.80 - 2025-07-16 141 | 142 | ### ⛓️ Dependencies 143 | - Updated newrelic/nri-f5 to v2.8.4 - [Changelog 🔗](https://github.com/newrelic/nri-f5/releases/tag/v2.8.4) 144 | - Updated newrelic/nri-rabbitmq to v2.15.1 - [Changelog 🔗](https://github.com/newrelic/nri-rabbitmq/releases/tag/v2.15.1) 145 | - Updated newrelic/nri-redis to v1.12.2 - [Changelog 🔗](https://github.com/newrelic/nri-redis/releases/tag/v1.12.2) 146 | - Updated newrelic/nri-discovery-kubernetes to v1.12.0 - [Changelog 🔗](https://github.com/newrelic/nri-discovery-kubernetes/releases/tag/v1.12.0) 147 | - Updated newrelic/nri-kafka to v3.13.0 - [Changelog 🔗](https://github.com/newrelic/nri-kafka/releases/tag/v3.13.0) 148 | - Updated newrelic/infrastructure to v1.65.4 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.65.4) 149 | - Updated newrelic/nri-mssql to v2.20.0 - [Changelog 🔗](https://github.com/newrelic/nri-mssql/releases/tag/v2.20.0) 150 | 151 | ## v3.2.79 - 2025-07-10 152 | 153 | ### ⛓️ Dependencies 154 | - Updated newrelic/nri-jmx to v3.8.2 - [Changelog 🔗](https://github.com/newrelic/nri-jmx/releases/tag/v3.8.2) 155 | - Updated newrelic/nri-consul to v2.9.2 - [Changelog 🔗](https://github.com/newrelic/nri-consul/releases/tag/v2.9.2) 156 | - Updated newrelic/nri-apache to v1.15.1 - [Changelog 🔗](https://github.com/newrelic/nri-apache/releases/tag/v1.15.1) 157 | - Updated newrelic/nri-discovery-kubernetes to v1.11.3 - [Changelog 🔗](https://github.com/newrelic/nri-discovery-kubernetes/releases/tag/v1.11.3) 158 | - Updated newrelic/nri-haproxy to v3.2.1 - [Changelog 🔗](https://github.com/newrelic/nri-haproxy/releases/tag/v3.2.1) 159 | - Updated newrelic/nri-elasticsearch to v5.4.1 - [Changelog 🔗](https://github.com/newrelic/nri-elasticsearch/releases/tag/v5.4.1) 160 | - Updated newrelic/nri-memcached to v2.7.1 - [Changelog 🔗](https://github.com/newrelic/nri-memcached/releases/tag/v2.7.1) 161 | - Updated newrelic/nri-mysql to v1.16.1 - [Changelog 🔗](https://github.com/newrelic/nri-mysql/releases/tag/v1.16.1) 162 | - Updated newrelic/nri-nagios to v2.11.1 - [Changelog 🔗](https://github.com/newrelic/nri-nagios/releases/tag/v2.11.1) 163 | - Updated newrelic/nri-couchbase to v2.8.1 - [Changelog 🔗](https://github.com/newrelic/nri-couchbase/releases/tag/v2.8.1) 164 | - Updated newrelic/nri-kafka to v3.12.1 - [Changelog 🔗](https://github.com/newrelic/nri-kafka/releases/tag/v3.12.1) 165 | - Updated newrelic/nri-mssql to v2.19.1 - [Changelog 🔗](https://github.com/newrelic/nri-mssql/releases/tag/v2.19.1) 166 | - Updated newrelic/nri-nginx to v3.6.1 - [Changelog 🔗](https://github.com/newrelic/nri-nginx/releases/tag/v3.6.1) 167 | - Updated newrelic/nri-postgresql to v2.19.2 - [Changelog 🔗](https://github.com/newrelic/nri-postgresql/releases/tag/v2.19.2) 168 | - Updated newrelic/nri-cassandra to v2.14.4 - [Changelog 🔗](https://github.com/newrelic/nri-cassandra/releases/tag/v2.14.4) 169 | - Updated newrelic/nri-mongodb to v2.9.3 - [Changelog 🔗](https://github.com/newrelic/nri-mongodb/releases/tag/v2.9.3) 170 | 171 | ## v3.2.78 - 2025-07-03 172 | 173 | ### ⛓️ Dependencies 174 | - Updated newrelic/nri-mssql to v2.19.0 - [Changelog 🔗](https://github.com/newrelic/nri-mssql/releases/tag/v2.19.0) 175 | 176 | ## v3.2.77 - 2025-07-01 177 | 178 | ### ⛓️ Dependencies 179 | - Updated newrelic/nri-postgresql to v2.19.1 - [Changelog 🔗](https://github.com/newrelic/nri-postgresql/releases/tag/v2.19.1) 180 | 181 | ## v3.2.76 - 2025-06-30 182 | 183 | ### ⛓️ Dependencies 184 | - Updated newrelic/infrastructure to v1.65.1 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.65.1) 185 | - Updated newrelic/nri-mssql to v2.18.2 - [Changelog 🔗](https://github.com/newrelic/nri-mssql/releases/tag/v2.18.2) 186 | - Updated newrelic/nri-kafka to v3.12.0 - [Changelog 🔗](https://github.com/newrelic/nri-kafka/releases/tag/v3.12.0) 187 | - Updated newrelic/nri-mysql to v1.16.0 - [Changelog 🔗](https://github.com/newrelic/nri-mysql/releases/tag/v1.16.0) 188 | - Updated newrelic/nri-postgresql to v2.19.0 - [Changelog 🔗](https://github.com/newrelic/nri-postgresql/releases/tag/v2.19.0) 189 | 190 | ## v3.2.75 - 2025-06-12 191 | 192 | ### ⛓️ Dependencies 193 | - Updated newrelic/nri-apache to v1.15.0 - [Changelog 🔗](https://github.com/newrelic/nri-apache/releases/tag/v1.15.0) 194 | 195 | ## v3.2.74 - 2025-06-05 196 | 197 | ### ⛓️ Dependencies 198 | - Updated newrelic/nri-consul to v2.9.1 - [Changelog 🔗](https://github.com/newrelic/nri-consul/releases/tag/v2.9.1) 199 | 200 | ## v3.2.73 - 2025-05-23 201 | 202 | ### ⛓️ Dependencies 203 | - Updated newrelic/infrastructure to v1.64.0 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.64.0) 204 | - Updated newrelic/nri-discovery-kubernetes to v1.11.2 - [Changelog 🔗](https://github.com/newrelic/nri-discovery-kubernetes/releases/tag/v1.11.2) 205 | - Updated newrelic/nri-mssql to v2.18.1 - [Changelog 🔗](https://github.com/newrelic/nri-mssql/releases/tag/v2.18.1) 206 | - Updated newrelic/nri-mysql to v1.15.0 - [Changelog 🔗](https://github.com/newrelic/nri-mysql/releases/tag/v1.15.0) 207 | - Updated newrelic/nri-postgresql to v2.18.0 - [Changelog 🔗](https://github.com/newrelic/nri-postgresql/releases/tag/v2.18.0) 208 | 209 | ## v3.2.72 - 2025-05-08 210 | 211 | ### ⛓️ Dependencies 212 | - Updated newrelic/nri-kafka to v3.11.0 - [Changelog 🔗](https://github.com/newrelic/nri-kafka/releases/tag/v3.11.0) 213 | - Updated newrelic/nri-mssql to v2.18.0 - [Changelog 🔗](https://github.com/newrelic/nri-mssql/releases/tag/v2.18.0) 214 | 215 | ## v3.2.71 - 2025-04-03 216 | 217 | ### ⛓️ Dependencies 218 | - Updated newrelic/infrastructure to v1.63.1 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.63.1) 219 | - Updated newrelic/nri-discovery-kubernetes to v1.11.1 - [Changelog 🔗](https://github.com/newrelic/nri-discovery-kubernetes/releases/tag/v1.11.1) 220 | - Updated newrelic/nri-mssql to v2.17.2 - [Changelog 🔗](https://github.com/newrelic/nri-mssql/releases/tag/v2.17.2) 221 | - Updated newrelic/nri-apache to v1.14.0 - [Changelog 🔗](https://github.com/newrelic/nri-apache/releases/tag/v1.14.0) 222 | - Updated newrelic/nri-consul to v2.9.0 - [Changelog 🔗](https://github.com/newrelic/nri-consul/releases/tag/v2.9.0) 223 | - Updated newrelic/nri-couchbase to v2.8.0 - [Changelog 🔗](https://github.com/newrelic/nri-couchbase/releases/tag/v2.8.0) 224 | - Updated newrelic/nri-haproxy to v3.2.0 - [Changelog 🔗](https://github.com/newrelic/nri-haproxy/releases/tag/v3.2.0) 225 | - Updated newrelic/nri-nagios to v2.11.0 - [Changelog 🔗](https://github.com/newrelic/nri-nagios/releases/tag/v2.11.0) 226 | - Updated newrelic/nri-nginx to v3.6.0 - [Changelog 🔗](https://github.com/newrelic/nri-nginx/releases/tag/v3.6.0) 227 | - Updated newrelic/nri-rabbitmq to v2.15.0 - [Changelog 🔗](https://github.com/newrelic/nri-rabbitmq/releases/tag/v2.15.0) 228 | - Updated newrelic/nri-mysql to v1.14.1 - [Changelog 🔗](https://github.com/newrelic/nri-mysql/releases/tag/v1.14.1) 229 | 230 | ## v3.2.70 - 2025-03-20 231 | 232 | ### ⛓️ Dependencies 233 | - Updated newrelic/nri-consul to v2.8.4 - [Changelog 🔗](https://github.com/newrelic/nri-consul/releases/tag/v2.8.4) 234 | - Updated newrelic/nri-memcached to v2.7.0 - [Changelog 🔗](https://github.com/newrelic/nri-memcached/releases/tag/v2.7.0) 235 | - Updated newrelic/nri-apache to v1.13.3 - [Changelog 🔗](https://github.com/newrelic/nri-apache/releases/tag/v1.13.3) 236 | - Updated newrelic/nri-discovery-kubernetes to v1.11.0 - [Changelog 🔗](https://github.com/newrelic/nri-discovery-kubernetes/releases/tag/v1.11.0) 237 | - Updated newrelic/nri-mysql to v1.14.0 - [Changelog 🔗](https://github.com/newrelic/nri-mysql/releases/tag/v1.14.0) 238 | 239 | ## v3.2.69 - 2025-03-13 240 | 241 | ### ⛓️ Dependencies 242 | - Updated newrelic/nri-haproxy to v3.1.2 - [Changelog 🔗](https://github.com/newrelic/nri-haproxy/releases/tag/v3.1.2) 243 | 244 | ## v3.2.68 - 2025-03-06 245 | 246 | ### ⛓️ Dependencies 247 | - Updated newrelic/infrastructure to v1.62.0 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.62.0) 248 | - Updated newrelic/nri-mssql to v2.17.0 - [Changelog 🔗](https://github.com/newrelic/nri-mssql/releases/tag/v2.17.0) 249 | - Updated newrelic/nri-postgresql to v2.17.1 - [Changelog 🔗](https://github.com/newrelic/nri-postgresql/releases/tag/v2.17.1) 250 | - Updated newrelic/nrjmx to v2.7.0 - [Changelog 🔗](https://github.com/newrelic/nrjmx/releases/tag/v2.7.0) 251 | - Updated newrelic/nri-nginx to v3.5.3 - [Changelog 🔗](https://github.com/newrelic/nri-nginx/releases/tag/v3.5.3) 252 | - Updated newrelic/nri-f5 to v2.8.3 - [Changelog 🔗](https://github.com/newrelic/nri-f5/releases/tag/v2.8.3) 253 | - Updated newrelic/nri-jmx to v3.8.1 - [Changelog 🔗](https://github.com/newrelic/nri-jmx/releases/tag/v3.8.1) 254 | - Updated newrelic/nri-kafka to v3.10.2 - [Changelog 🔗](https://github.com/newrelic/nri-kafka/releases/tag/v3.10.2) 255 | 256 | ## v3.2.67 - 2025-02-20 257 | 258 | ### ⛓️ Dependencies 259 | - Updated newrelic/nri-f5 to v2.8.2 - [Changelog 🔗](https://github.com/newrelic/nri-f5/releases/tag/v2.8.2) 260 | - Updated newrelic/nri-jmx to v3.8.0 - [Changelog 🔗](https://github.com/newrelic/nri-jmx/releases/tag/v3.8.0) 261 | - Updated newrelic/nri-cassandra to v2.14.3 - [Changelog 🔗](https://github.com/newrelic/nri-cassandra/releases/tag/v2.14.3) 262 | - Updated newrelic/nri-discovery-kubernetes to v1.10.1 - [Changelog 🔗](https://github.com/newrelic/nri-discovery-kubernetes/releases/tag/v1.10.1) 263 | 264 | ## v3.2.66 - 2025-02-06 265 | 266 | ### ⛓️ Dependencies 267 | - Updated newrelic/nri-couchbase to v2.7.3 - [Changelog 🔗](https://github.com/newrelic/nri-couchbase/releases/tag/v2.7.3) 268 | - Updated newrelic/nri-rabbitmq to v2.14.2 - [Changelog 🔗](https://github.com/newrelic/nri-rabbitmq/releases/tag/v2.14.2) 269 | - Updated newrelic/nri-cassandra to v2.14.2 - [Changelog 🔗](https://github.com/newrelic/nri-cassandra/releases/tag/v2.14.2) 270 | - Updated newrelic/nri-nginx to v3.5.2 - [Changelog 🔗](https://github.com/newrelic/nri-nginx/releases/tag/v3.5.2) 271 | - Updated newrelic/nri-mysql to v1.13.0 - [Changelog 🔗](https://github.com/newrelic/nri-mysql/releases/tag/v1.13.0) 272 | 273 | ## v3.2.65 - 2025-01-30 274 | 275 | ### ⛓️ Dependencies 276 | - Updated newrelic/nri-kafka to v3.10.1 - [Changelog 🔗](https://github.com/newrelic/nri-kafka/releases/tag/v3.10.1) 277 | 278 | ## v3.2.64 - 2025-01-28 279 | 280 | ### ⛓️ Dependencies 281 | - Updated newrelic/nri-jmx to v3.7.2 - [Changelog 🔗](https://github.com/newrelic/nri-jmx/releases/tag/v3.7.2) 282 | - Updated newrelic/infrastructure to v1.60.1 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.60.1) 283 | - Updated newrelic/nri-redis to v1.12.1 - [Changelog 🔗](https://github.com/newrelic/nri-redis/releases/tag/v1.12.1) 284 | - Updated newrelic/nri-elasticsearch to v5.4.0 - [Changelog 🔗](https://github.com/newrelic/nri-elasticsearch/releases/tag/v5.4.0) 285 | - Updated newrelic/nri-apache to v1.13.2 - [Changelog 🔗](https://github.com/newrelic/nri-apache/releases/tag/v1.13.2) 286 | - Updated newrelic/nri-memcached to v2.6.2 - [Changelog 🔗](https://github.com/newrelic/nri-memcached/releases/tag/v2.6.2) 287 | - Updated newrelic/nri-mongodb to v2.9.2 - [Changelog 🔗](https://github.com/newrelic/nri-mongodb/releases/tag/v2.9.2) 288 | - Updated newrelic/nri-postgresql to v2.16.1 - [Changelog 🔗](https://github.com/newrelic/nri-postgresql/releases/tag/v2.16.1) 289 | - Updated newrelic/nri-mysql to v1.12.0 - [Changelog 🔗](https://github.com/newrelic/nri-mysql/releases/tag/v1.12.0) 290 | - Updated newrelic/nri-consul to v2.8.3 - [Changelog 🔗](https://github.com/newrelic/nri-consul/releases/tag/v2.8.3) 291 | - Updated newrelic/nri-haproxy to v3.1.1 - [Changelog 🔗](https://github.com/newrelic/nri-haproxy/releases/tag/v3.1.1) 292 | - Updated newrelic/nri-nagios to v2.10.2 - [Changelog 🔗](https://github.com/newrelic/nri-nagios/releases/tag/v2.10.2) 293 | 294 | ## v3.2.63 - 2025-01-16 295 | 296 | ### ⛓️ Dependencies 297 | - Updated newrelic/nri-mssql to v2.16.0 - [Changelog 🔗](https://github.com/newrelic/nri-mssql/releases/tag/v2.16.0) 298 | - Updated newrelic/nri-discovery-kubernetes to v1.10.0 - [Changelog 🔗](https://github.com/newrelic/nri-discovery-kubernetes/releases/tag/v1.10.0) 299 | - Updated newrelic/nri-kafka to v3.10.0 - [Changelog 🔗](https://github.com/newrelic/nri-kafka/releases/tag/v3.10.0) 300 | - Updated newrelic/infrastructure to v1.59.2 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.59.2) 301 | - Updated newrelic/nri-apache to v1.13.1 - [Changelog 🔗](https://github.com/newrelic/nri-apache/releases/tag/v1.13.1) 302 | - Updated newrelic/nri-cassandra to v2.14.1 - [Changelog 🔗](https://github.com/newrelic/nri-cassandra/releases/tag/v2.14.1) 303 | - Updated newrelic/nri-consul to v2.8.2 - [Changelog 🔗](https://github.com/newrelic/nri-consul/releases/tag/v2.8.2) 304 | - Updated newrelic/nri-couchbase to v2.7.2 - [Changelog 🔗](https://github.com/newrelic/nri-couchbase/releases/tag/v2.7.2) 305 | - Updated newrelic/nri-f5 to v2.8.1 - [Changelog 🔗](https://github.com/newrelic/nri-f5/releases/tag/v2.8.1) 306 | - Updated newrelic/nri-memcached to v2.6.1 - [Changelog 🔗](https://github.com/newrelic/nri-memcached/releases/tag/v2.6.1) 307 | - Updated newrelic/nri-mongodb to v2.9.1 - [Changelog 🔗](https://github.com/newrelic/nri-mongodb/releases/tag/v2.9.1) 308 | - Updated newrelic/nri-mysql to v1.11.1 - [Changelog 🔗](https://github.com/newrelic/nri-mysql/releases/tag/v1.11.1) 309 | - Updated newrelic/nri-nginx to v3.5.1 - [Changelog 🔗](https://github.com/newrelic/nri-nginx/releases/tag/v3.5.1) 310 | - Updated newrelic/nri-rabbitmq to v2.14.1 - [Changelog 🔗](https://github.com/newrelic/nri-rabbitmq/releases/tag/v2.14.1) 311 | 312 | ## v3.2.62 - 2024-12-05 313 | 314 | ### ⛓️ Dependencies 315 | - Updated newrelic/nri-postgresql to v2.16.0 - [Changelog 🔗](https://github.com/newrelic/nri-postgresql/releases/tag/v2.16.0) 316 | - Updated newrelic/nri-nagios to v2.10.1 - [Changelog 🔗](https://github.com/newrelic/nri-nagios/releases/tag/v2.10.1) 317 | 318 | ## v3.2.61 - 2024-11-14 319 | 320 | ### ⛓️ Dependencies 321 | - Updated newrelic/infrastructure to v1.58.0 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.58.0) 322 | 323 | ## v3.2.60 - 2024-10-31 324 | 325 | ### ⛓️ Dependencies 326 | - Updated newrelic/nri-consul to v2.8.1 - [Changelog 🔗](https://github.com/newrelic/nri-consul/releases/tag/v2.8.1) 327 | 328 | ## v3.2.59 - 2024-10-24 329 | 330 | ### ⛓️ Dependencies 331 | - Updated newrelic/nri-mongodb to v2.9.0 - [Changelog 🔗](https://github.com/newrelic/nri-mongodb/releases/tag/v2.9.0) 332 | 333 | ## v3.2.58 - 2024-10-22 334 | 335 | ### ⛓️ Dependencies 336 | - Updated newrelic/nri-apache to v1.13.0 - [Changelog 🔗](https://github.com/newrelic/nri-apache/releases/tag/v1.13.0) 337 | - Updated newrelic/nri-nagios to v2.10.0 - [Changelog 🔗](https://github.com/newrelic/nri-nagios/releases/tag/v2.10.0) 338 | 339 | ## v3.2.57 - 2024-10-21 340 | 341 | ### ⛓️ Dependencies 342 | - Updated newrelic/nri-elasticsearch to v5.3.0 - [Changelog 🔗](https://github.com/newrelic/nri-elasticsearch/releases/tag/v5.3.0) 343 | - Updated newrelic/nri-couchbase to v2.7.0 - [Changelog 🔗](https://github.com/newrelic/nri-couchbase/releases/tag/v2.7.0) 344 | - Updated newrelic/nri-rabbitmq to v2.14.0 - [Changelog 🔗](https://github.com/newrelic/nri-rabbitmq/releases/tag/v2.14.0) 345 | - Updated newrelic/nri-f5 to v2.8.0 - [Changelog 🔗](https://github.com/newrelic/nri-f5/releases/tag/v2.8.0) 346 | - Updated newrelic/nri-cassandra to v2.14.0 - [Changelog 🔗](https://github.com/newrelic/nri-cassandra/releases/tag/v2.14.0) 347 | - Updated newrelic/nri-kafka to v3.8.0 - [Changelog 🔗](https://github.com/newrelic/nri-kafka/releases/tag/v3.8.0) 348 | - Updated newrelic/nri-consul to v2.8.0 - [Changelog 🔗](https://github.com/newrelic/nri-consul/releases/tag/v2.8.0) 349 | - Updated newrelic/nri-memcached to v2.6.0 - [Changelog 🔗](https://github.com/newrelic/nri-memcached/releases/tag/v2.6.0) 350 | - Updated newrelic/nri-nginx to v3.5.0 - [Changelog 🔗](https://github.com/newrelic/nri-nginx/releases/tag/v3.5.0) 351 | - Updated newrelic/nri-mysql to v1.11.0 - [Changelog 🔗](https://github.com/newrelic/nri-mysql/releases/tag/v1.11.0) 352 | - Updated newrelic/nri-redis to v1.12.0 - [Changelog 🔗](https://github.com/newrelic/nri-redis/releases/tag/v1.12.0) 353 | 354 | ## v3.2.56 - 2024-10-17 355 | 356 | ### ⛓️ Dependencies 357 | - Updated newrelic/nri-postgresql to v2.15.0 - [Changelog 🔗](https://github.com/newrelic/nri-postgresql/releases/tag/v2.15.0) 358 | - Updated newrelic/nri-haproxy to v3.1.0 - [Changelog 🔗](https://github.com/newrelic/nri-haproxy/releases/tag/v3.1.0) 359 | - Updated newrelic/nri-mssql to v2.13.0 - [Changelog 🔗](https://github.com/newrelic/nri-mssql/releases/tag/v2.13.0) 360 | 361 | ## v3.2.55 - 2024-09-25 362 | 363 | ### ⛓️ Dependencies 364 | - Updated newrelic/nri-consul to v2.7.15 - [Changelog 🔗](https://github.com/newrelic/nri-consul/releases/tag/v2.7.15) 365 | - Updated newrelic/nri-f5 to v2.7.7 - [Changelog 🔗](https://github.com/newrelic/nri-f5/releases/tag/v2.7.7) 366 | - Updated newrelic/nri-mssql to v2.12.8 - [Changelog 🔗](https://github.com/newrelic/nri-mssql/releases/tag/v2.12.8) 367 | - Updated newrelic/nri-discovery-kubernetes to v1.9.3 - [Changelog 🔗](https://github.com/newrelic/nri-discovery-kubernetes/releases/tag/v1.9.3) 368 | - Updated newrelic/nri-memcached to v2.5.8 - [Changelog 🔗](https://github.com/newrelic/nri-memcached/releases/tag/v2.5.8) 369 | - Updated newrelic/nri-mysql to v1.10.11 - [Changelog 🔗](https://github.com/newrelic/nri-mysql/releases/tag/v1.10.11) 370 | - Updated newrelic/nri-nginx to v3.4.10 - [Changelog 🔗](https://github.com/newrelic/nri-nginx/releases/tag/v3.4.10) 371 | - Updated newrelic/infrastructure to v1.57.2 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.57.2) 372 | 373 | ## v3.2.54 - 2024-09-19 374 | 375 | ### ⛓️ Dependencies 376 | - Updated newrelic/nri-redis to v1.11.9 - [Changelog 🔗](https://github.com/newrelic/nri-redis/releases/tag/v1.11.9) 377 | - Updated newrelic/nri-apache to v1.12.7 - [Changelog 🔗](https://github.com/newrelic/nri-apache/releases/tag/v1.12.7) 378 | - Updated newrelic/nri-postgresql to v2.14.0 - [Changelog 🔗](https://github.com/newrelic/nri-postgresql/releases/tag/v2.14.0) 379 | - Updated newrelic/nri-nagios to v2.9.7 - [Changelog 🔗](https://github.com/newrelic/nri-nagios/releases/tag/v2.9.7) 380 | - Updated newrelic/nri-mongodb to v2.8.7 - [Changelog 🔗](https://github.com/newrelic/nri-mongodb/releases/tag/v2.8.7) 381 | - Updated newrelic/nri-couchbase to v2.6.8 - [Changelog 🔗](https://github.com/newrelic/nri-couchbase/releases/tag/v2.6.8) 382 | - Updated newrelic/nri-mssql to v2.12.7 - [Changelog 🔗](https://github.com/newrelic/nri-mssql/releases/tag/v2.12.7) 383 | - Updated newrelic/nri-kafka to v3.7.5 - [Changelog 🔗](https://github.com/newrelic/nri-kafka/releases/tag/v3.7.5) 384 | - Updated newrelic/nri-cassandra to v2.13.10 - [Changelog 🔗](https://github.com/newrelic/nri-cassandra/releases/tag/v2.13.10) 385 | - Updated newrelic/nri-rabbitmq to v2.13.9 - [Changelog 🔗](https://github.com/newrelic/nri-rabbitmq/releases/tag/v2.13.9) 386 | - Updated newrelic/nri-nginx to v3.4.9 - [Changelog 🔗](https://github.com/newrelic/nri-nginx/releases/tag/v3.4.9) 387 | 388 | ## v3.2.53 - 2024-09-16 389 | 390 | ### ⛓️ Dependencies 391 | - Updated newrelic/infrastructure to v1.57.1 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.57.1) 392 | - Updated newrelic/nri-consul to v2.7.14 - [Changelog 🔗](https://github.com/newrelic/nri-consul/releases/tag/v2.7.14) 393 | 394 | ## v3.2.52 - 2024-09-05 395 | 396 | ### ⛓️ Dependencies 397 | - Updated newrelic/infrastructure to v1.57.0 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.57.0) 398 | 399 | ## v3.2.51 - 2024-08-20 400 | 401 | ### ⛓️ Dependencies 402 | - Updated newrelic/infrastructure to v1.56.1 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.56.1) 403 | - Updated newrelic/nri-cassandra to v2.13.9 - [Changelog 🔗](https://github.com/newrelic/nri-cassandra/releases/tag/v2.13.9) 404 | - Updated newrelic/nri-mysql to v1.10.10 - [Changelog 🔗](https://github.com/newrelic/nri-mysql/releases/tag/v1.10.10) 405 | - Updated newrelic/nri-nginx to v3.4.8 - [Changelog 🔗](https://github.com/newrelic/nri-nginx/releases/tag/v3.4.8) 406 | - Updated newrelic/nri-postgresql to v2.13.7 - [Changelog 🔗](https://github.com/newrelic/nri-postgresql/releases/tag/v2.13.7) 407 | - Updated newrelic/nri-redis to v1.11.8 - [Changelog 🔗](https://github.com/newrelic/nri-redis/releases/tag/v1.11.8) 408 | 409 | ## v3.2.50 - 2024-08-08 410 | 411 | ### ⛓️ Dependencies 412 | - Updated newrelic/nri-mongodb to v2.8.6 - [Changelog 🔗](https://github.com/newrelic/nri-mongodb/releases/tag/v2.8.6) 413 | - Updated newrelic/infrastructure to v1.55.2 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.55.2) 414 | 415 | ## v3.2.49 - 2024-07-25 416 | 417 | ### ⛓️ Dependencies 418 | - Updated newrelic/infrastructure to v1.55.1 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.55.1) 419 | - Updated newrelic/nri-mssql to v2.12.6 - [Changelog 🔗](https://github.com/newrelic/nri-mssql/releases/tag/v2.12.6) 420 | - Updated newrelic/nri-nagios to v2.9.6 - [Changelog 🔗](https://github.com/newrelic/nri-nagios/releases/tag/v2.9.6) 421 | - Updated newrelic/nri-redis to v1.11.7 - [Changelog 🔗](https://github.com/newrelic/nri-redis/releases/tag/v1.11.7) 422 | - Updated newrelic/nri-haproxy to v3.0.2 - [Changelog 🔗](https://github.com/newrelic/nri-haproxy/releases/tag/v3.0.2) 423 | - Updated newrelic/nri-elasticsearch to v5.2.6 - [Changelog 🔗](https://github.com/newrelic/nri-elasticsearch/releases/tag/v5.2.6) 424 | - Updated newrelic/nri-consul to v2.7.13 - [Changelog 🔗](https://github.com/newrelic/nri-consul/releases/tag/v2.7.13) 425 | - Updated newrelic/nri-discovery-kubernetes to v1.9.2 - [Changelog 🔗](https://github.com/newrelic/nri-discovery-kubernetes/releases/tag/v1.9.2) 426 | - Updated newrelic/nri-apache to v1.12.6 - [Changelog 🔗](https://github.com/newrelic/nri-apache/releases/tag/v1.12.6) 427 | - Updated newrelic/nri-memcached to v2.5.7 - [Changelog 🔗](https://github.com/newrelic/nri-memcached/releases/tag/v2.5.7) 428 | - Updated newrelic/nri-cassandra to v2.13.8 - [Changelog 🔗](https://github.com/newrelic/nri-cassandra/releases/tag/v2.13.8) 429 | - Updated newrelic/nri-f5 to v2.7.6 - [Changelog 🔗](https://github.com/newrelic/nri-f5/releases/tag/v2.7.6) 430 | - Updated newrelic/nri-kafka to v3.7.4 - [Changelog 🔗](https://github.com/newrelic/nri-kafka/releases/tag/v3.7.4) 431 | - Updated newrelic/nri-mysql to v1.10.9 - [Changelog 🔗](https://github.com/newrelic/nri-mysql/releases/tag/v1.10.9) 432 | - Updated newrelic/nri-couchbase to v2.6.7 - [Changelog 🔗](https://github.com/newrelic/nri-couchbase/releases/tag/v2.6.7) 433 | - Updated newrelic/nri-rabbitmq to v2.13.8 - [Changelog 🔗](https://github.com/newrelic/nri-rabbitmq/releases/tag/v2.13.8) 434 | - Updated newrelic/nri-nginx to v3.4.7 - [Changelog 🔗](https://github.com/newrelic/nri-nginx/releases/tag/v3.4.7) 435 | - Updated newrelic/nri-postgresql to v2.13.6 - [Changelog 🔗](https://github.com/newrelic/nri-postgresql/releases/tag/v2.13.6) 436 | 437 | ## v3.2.48 - 2024-07-04 438 | 439 | ### ⛓️ Dependencies 440 | - Updated newrelic/nri-cassandra to v2.13.7 - [Changelog 🔗](https://github.com/newrelic/nri-cassandra/releases/tag/v2.13.7) 441 | - Updated newrelic/nri-couchbase to v2.6.6 - [Changelog 🔗](https://github.com/newrelic/nri-couchbase/releases/tag/v2.6.6) 442 | - Updated newrelic/nri-rabbitmq to v2.13.7 - [Changelog 🔗](https://github.com/newrelic/nri-rabbitmq/releases/tag/v2.13.7) 443 | 444 | ## v3.2.47 - 2024-06-27 445 | 446 | ### ⛓️ Dependencies 447 | - Updated newrelic/nri-mssql to v2.12.5 - [Changelog 🔗](https://github.com/newrelic/nri-mssql/releases/tag/v2.12.5) 448 | 449 | ## v3.2.46 - 2024-06-20 450 | 451 | ### ⛓️ Dependencies 452 | - Updated newrelic/nri-consul to v2.7.12 - [Changelog 🔗](https://github.com/newrelic/nri-consul/releases/tag/v2.7.12) 453 | - Updated newrelic/infrastructure to v1.53.0 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.53.0) 454 | 455 | ## v3.2.45 - 2024-05-30 456 | 457 | ### ⛓️ Dependencies 458 | - Updated newrelic/nri-jmx to v3.7.0 - [Changelog 🔗](https://github.com/newrelic/nri-jmx/releases/tag/v3.7.0) 459 | - Updated newrelic/nri-mssql to v2.12.4 - [Changelog 🔗](https://github.com/newrelic/nri-mssql/releases/tag/v2.12.4) 460 | 461 | ## v3.2.44 - 2024-05-23 462 | 463 | ### ⛓️ Dependencies 464 | - Updated newrelic/nri-f5 to v2.7.5 - [Changelog 🔗](https://github.com/newrelic/nri-f5/releases/tag/v2.7.5) 465 | - Updated newrelic/nri-consul to v2.7.11 - [Changelog 🔗](https://github.com/newrelic/nri-consul/releases/tag/v2.7.11) 466 | - Updated newrelic/nri-apache to v1.12.5 - [Changelog 🔗](https://github.com/newrelic/nri-apache/releases/tag/v1.12.5) 467 | - Updated newrelic/nri-discovery-kubernetes to v1.9.1 - [Changelog 🔗](https://github.com/newrelic/nri-discovery-kubernetes/releases/tag/v1.9.1) 468 | - Updated newrelic/infrastructure to v1.52.3 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.52.3) 469 | - Updated newrelic/nri-couchbase to v2.6.5 - [Changelog 🔗](https://github.com/newrelic/nri-couchbase/releases/tag/v2.6.5) 470 | - Updated newrelic/nri-elasticsearch to v5.2.5 - [Changelog 🔗](https://github.com/newrelic/nri-elasticsearch/releases/tag/v5.2.5) 471 | - Updated newrelic/nri-memcached to v2.5.6 - [Changelog 🔗](https://github.com/newrelic/nri-memcached/releases/tag/v2.5.6) 472 | - Updated newrelic/nri-mongodb to v2.8.5 - [Changelog 🔗](https://github.com/newrelic/nri-mongodb/releases/tag/v2.8.5) 473 | - Updated newrelic/nri-mysql to v1.10.8 - [Changelog 🔗](https://github.com/newrelic/nri-mysql/releases/tag/v1.10.8) 474 | - Updated newrelic/nri-nagios to v2.9.5 - [Changelog 🔗](https://github.com/newrelic/nri-nagios/releases/tag/v2.9.5) 475 | - Updated newrelic/nri-postgresql to v2.13.5 - [Changelog 🔗](https://github.com/newrelic/nri-postgresql/releases/tag/v2.13.5) 476 | - Updated newrelic/nri-rabbitmq to v2.13.6 - [Changelog 🔗](https://github.com/newrelic/nri-rabbitmq/releases/tag/v2.13.6) 477 | - Updated newrelic/nri-redis to v1.11.6 - [Changelog 🔗](https://github.com/newrelic/nri-redis/releases/tag/v1.11.6) 478 | 479 | ## v3.2.43 - 2024-05-16 480 | 481 | ### ⛓️ Dependencies 482 | - Updated newrelic/nri-mongodb to v2.8.4 - [Changelog 🔗](https://github.com/newrelic/nri-mongodb/releases/tag/v2.8.4) 483 | - Updated newrelic/nri-cassandra to v2.13.6 - [Changelog 🔗](https://github.com/newrelic/nri-cassandra/releases/tag/v2.13.6) 484 | - Updated newrelic/nri-nginx to v3.4.6 - [Changelog 🔗](https://github.com/newrelic/nri-nginx/releases/tag/v3.4.6) 485 | 486 | ## v3.2.42 - 2024-05-14 487 | 488 | ### ⛓️ Dependencies 489 | - Updated newrelic/infrastructure to v1.52.2 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.52.2) 490 | - Updated newrelic/nri-discovery-kubernetes to v1.9.0 - [Changelog 🔗](https://github.com/newrelic/nri-discovery-kubernetes/releases/tag/v1.9.0) 491 | 492 | ## v3.2.41 - 2024-05-09 493 | 494 | ### ⛓️ Dependencies 495 | - Updated newrelic/nri-couchbase to v2.6.4 - [Changelog 🔗](https://github.com/newrelic/nri-couchbase/releases/tag/v2.6.4) 496 | - Updated newrelic/nri-kafka to v3.7.3 - [Changelog 🔗](https://github.com/newrelic/nri-kafka/releases/tag/v3.7.3) 497 | - Updated newrelic/infrastructure to v1.52.1 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.52.1) 498 | - Updated newrelic/nri-discovery-kubernetes to v1.8.0 - [Changelog 🔗](https://github.com/newrelic/nri-discovery-kubernetes/releases/tag/v1.8.0) 499 | - Updated newrelic/nri-postgresql to v2.13.4 - [Changelog 🔗](https://github.com/newrelic/nri-postgresql/releases/tag/v2.13.4) 500 | - Updated newrelic/nri-mongodb to v2.8.3 - [Changelog 🔗](https://github.com/newrelic/nri-mongodb/releases/tag/v2.8.3) 501 | - Updated newrelic/nri-mssql to v2.12.2 - [Changelog 🔗](https://github.com/newrelic/nri-mssql/releases/tag/v2.12.2) 502 | 503 | ## v3.2.40 - 2024-05-02 504 | 505 | ### ⛓️ Dependencies 506 | - Updated newrelic/nri-mongodb to v2.8.2 - [Changelog 🔗](https://github.com/newrelic/nri-mongodb/releases/tag/v2.8.2) 507 | 508 | ## v3.2.39 - 2024-04-25 509 | 510 | ### ⛓️ Dependencies 511 | - Updated newrelic/nri-f5 to v2.7.4 - [Changelog 🔗](https://github.com/newrelic/nri-f5/releases/tag/v2.7.4) 512 | - Updated newrelic/nri-consul to v2.7.9 - [Changelog 🔗](https://github.com/newrelic/nri-consul/releases/tag/v2.7.9) 513 | - Updated newrelic/nri-mysql to v1.10.7 - [Changelog 🔗](https://github.com/newrelic/nri-mysql/releases/tag/v1.10.7) 514 | - Updated newrelic/nri-memcached to v2.5.5 - [Changelog 🔗](https://github.com/newrelic/nri-memcached/releases/tag/v2.5.5) 515 | - Updated newrelic/nri-redis to v1.11.5 - [Changelog 🔗](https://github.com/newrelic/nri-redis/releases/tag/v1.11.5) 516 | - Updated newrelic/nri-apache to v1.12.4 - [Changelog 🔗](https://github.com/newrelic/nri-apache/releases/tag/v1.12.4) 517 | - Updated newrelic/nri-postgresql to v2.13.3 - [Changelog 🔗](https://github.com/newrelic/nri-postgresql/releases/tag/v2.13.3) 518 | - Updated newrelic/nri-nagios to v2.9.4 - [Changelog 🔗](https://github.com/newrelic/nri-nagios/releases/tag/v2.9.4) 519 | - Updated newrelic/nri-elasticsearch to v5.2.4 - [Changelog 🔗](https://github.com/newrelic/nri-elasticsearch/releases/tag/v5.2.4) 520 | - Updated newrelic/nri-mssql to v2.12.1 - [Changelog 🔗](https://github.com/newrelic/nri-mssql/releases/tag/v2.12.1) 521 | - Updated newrelic/nri-couchbase to v2.6.3 - [Changelog 🔗](https://github.com/newrelic/nri-couchbase/releases/tag/v2.6.3) 522 | - Updated newrelic/nri-rabbitmq to v2.13.5 - [Changelog 🔗](https://github.com/newrelic/nri-rabbitmq/releases/tag/v2.13.5) 523 | - Updated newrelic/nri-kafka to v3.7.2 - [Changelog 🔗](https://github.com/newrelic/nri-kafka/releases/tag/v3.7.2) 524 | 525 | ## v3.2.38 - 2024-04-18 526 | 527 | ### ⛓️ Dependencies 528 | - Updated newrelic/nri-haproxy to v3.0.1 - [Changelog 🔗](https://github.com/newrelic/nri-haproxy/releases/tag/v3.0.1) 529 | - Updated newrelic/nri-cassandra to v2.13.5 - [Changelog 🔗](https://github.com/newrelic/nri-cassandra/releases/tag/v2.13.5) 530 | - Updated newrelic/nri-nginx to v3.4.5 - [Changelog 🔗](https://github.com/newrelic/nri-nginx/releases/tag/v3.4.5) 531 | 532 | ## v3.2.37 - 2024-04-04 533 | 534 | ### ⛓️ Dependencies 535 | - Updated newrelic/infrastructure to v1.52.0 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.52.0) 536 | - Updated newrelic/nri-mysql to v1.10.6 - [Changelog 🔗](https://github.com/newrelic/nri-mysql/releases/tag/v1.10.6) 537 | 538 | ## v3.2.36 - 2024-03-25 539 | 540 | ### ⛓️ Dependencies 541 | - Updated newrelic/infrastructure to v1.51.0 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.51.0) 542 | 543 | ## v3.2.35 - 2024-03-21 544 | 545 | ### ⛓️ Dependencies 546 | - Updated newrelic/nri-nginx to v3.4.4 - [Changelog 🔗](https://github.com/newrelic/nri-nginx/releases/tag/v3.4.4) 547 | 548 | ## v3.2.34 - 2024-03-14 549 | 550 | ### ⛓️ Dependencies 551 | - Updated newrelic/nri-haproxy to v3 - [Changelog 🔗](https://github.com/newrelic/nri-haproxy/releases/tag/v3.0.0) 552 | - Updated newrelic/nri-nagios to v2.9.3 - [Changelog 🔗](https://github.com/newrelic/nri-nagios/releases/tag/v2.9.3) 553 | - Updated newrelic/nri-memcached to v2.5.4 - [Changelog 🔗](https://github.com/newrelic/nri-memcached/releases/tag/v2.5.4) 554 | - Updated newrelic/nri-mysql to v1.10.5 - [Changelog 🔗](https://github.com/newrelic/nri-mysql/releases/tag/v1.10.5) 555 | - Updated newrelic/nri-rabbitmq to v2.13.4 - [Changelog 🔗](https://github.com/newrelic/nri-rabbitmq/releases/tag/v2.13.4) 556 | 557 | ## v3.2.33 - 2024-03-07 558 | 559 | ### 🐞 Bug fixes 560 | - Updated newrelic/nri-consul to v2.7.8 - [Changelog 🔗](https://github.com/newrelic/nri-consul/releases/tag/v2.7.8) 561 | - Updated newrelic/nri-postgresql to v2.13.2 - [Changelog 🔗](https://github.com/newrelic/nri-postgresql/releases/tag/v2.13.2) 562 | 563 | ## v3.2.32 - 2024-03-07 564 | 565 | ### ⛓️ Dependencies 566 | - Updated newrelic/nrjmx to v2.6.0 - [Changelog 🔗](https://github.com/newrelic/nrjmx/releases/tag/v2.6.0) 567 | - Updated newrelic/nri-jmx to v3.6.0 - [Changelog 🔗](https://github.com/newrelic/nri-jmx/releases/tag/v3.6.0) 568 | 569 | ## v3.2.31 - 2024-02-29 570 | 571 | ### ⛓️ Dependencies 572 | - Updated newrelic/nri-mssql to v2.12.0 - [Changelog 🔗](https://github.com/newrelic/nri-mssql/releases/tag/v2.12.0) 573 | - Updated newrelic/infrastructure to v1.50.0 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.50.0) 574 | - Updated newrelic/nri-apache to v1.12.3 - [Changelog 🔗](https://github.com/newrelic/nri-apache/releases/tag/v1.12.3) 575 | - Updated newrelic/nri-cassandra to v2.13.4 - [Changelog 🔗](https://github.com/newrelic/nri-cassandra/releases/tag/v2.13.4) 576 | - Updated newrelic/nri-mysql to v1.10.4 - [Changelog 🔗](https://github.com/newrelic/nri-mysql/releases/tag/v1.10.4) 577 | - Updated newrelic/nri-postgresql to v2.13.1 - [Changelog 🔗](https://github.com/newrelic/nri-postgresql/releases/tag/v2.13.1) 578 | - Updated newrelic/nri-elasticsearch to v5.2.3 - [Changelog 🔗](https://github.com/newrelic/nri-elasticsearch/releases/tag/v5.2.3) 579 | - Updated newrelic/nri-f5 to v2.7.3 - [Changelog 🔗](https://github.com/newrelic/nri-f5/releases/tag/v2.7.3) 580 | - Updated newrelic/nri-kafka to v3.7.1 - [Changelog 🔗](https://github.com/newrelic/nri-kafka/releases/tag/v3.7.1) 581 | - Updated newrelic/nri-memcached to v2.5.3 - [Changelog 🔗](https://github.com/newrelic/nri-memcached/releases/tag/v2.5.3) 582 | - Updated newrelic/nri-nagios to v2.9.2 - [Changelog 🔗](https://github.com/newrelic/nri-nagios/releases/tag/v2.9.2) 583 | - Updated newrelic/nri-nginx to v3.4.3 - [Changelog 🔗](https://github.com/newrelic/nri-nginx/releases/tag/v3.4.3) 584 | - Updated newrelic/nri-rabbitmq to v2.13.3 - [Changelog 🔗](https://github.com/newrelic/nri-rabbitmq/releases/tag/v2.13.3) 585 | - Updated newrelic/nri-redis to v1.11.4 - [Changelog 🔗](https://github.com/newrelic/nri-redis/releases/tag/v1.11.4) 586 | 587 | ## v3.2.30 - 2024-02-20 588 | 589 | ### ⛓️ Dependencies 590 | - Updated newrelic/infrastructure to v1.49.1 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.49.1) 591 | - Updated newrelic/nri-jmx to v3.5.1 - [Changelog 🔗](https://github.com/newrelic/nri-jmx/releases/tag/v3.5.1) 592 | - Updated newrelic/nri-mssql to v2.11.0 - [Changelog 🔗](https://github.com/newrelic/nri-mssql/releases/tag/v2.11.0) 593 | 594 | ## v3.2.29 - 2024-02-01 595 | 596 | ### ⛓️ Dependencies 597 | - Updated newrelic/nri-apache to v1.12.2 - [Changelog 🔗](https://github.com/newrelic/nri-apache/releases/tag/v1.12.2) 598 | - Updated newrelic/nri-mssql to v2.10.3 - [Changelog 🔗](https://github.com/newrelic/nri-mssql/releases/tag/v2.10.3) 599 | - Updated newrelic/nri-kafka to v3.7.0 - [Changelog 🔗](https://github.com/newrelic/nri-kafka/releases/tag/v3.7.0) 600 | 601 | ## v3.2.28 - 2024-01-25 602 | 603 | ### ⛓️ Dependencies 604 | - Updated newrelic/infrastructure to v1.48.4 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.48.4) 605 | - Updated newrelic/nri-consul to v2.7.4 - [Changelog 🔗](https://github.com/newrelic/nri-consul/releases/tag/v2.7.4) 606 | 607 | ## v3.2.27 - 2024-01-18 608 | 609 | ### ⛓️ Dependencies 610 | - Updated newrelic/infrastructure to v1.48.3 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.48.3) 611 | 612 | ## v3.2.26 - 2023-12-14 613 | 614 | ### ⛓️ Dependencies 615 | - Updated newrelic/nri-discovery-kubernetes to v1.7.2 - [Changelog 🔗](https://github.com/newrelic/nri-discovery-kubernetes/releases/tag/v1.7.2) 616 | - Updated newrelic/nri-kafka to v3.6.0 - [Changelog 🔗](https://github.com/newrelic/nri-kafka/releases/tag/v3.6.0) 617 | - Updated newrelic/nri-consul to v2.7.3 - [Changelog 🔗](https://github.com/newrelic/nri-consul/releases/tag/v2.7.3) 618 | - Updated newrelic/nri-mssql to v2.10.2 - [Changelog 🔗](https://github.com/newrelic/nri-mssql/releases/tag/v2.10.2) 619 | - Updated newrelic/nri-rabbitmq to v2.13.2 - [Changelog 🔗](https://github.com/newrelic/nri-rabbitmq/releases/tag/v2.13.2) 620 | 621 | ## v3.2.25 - 2023-11-15 622 | 623 | ### ⛓️ Dependencies 624 | - Updated newrelic/infrastructure to v1.48.1 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.48.1) 625 | 626 | ## v3.2.24 - 2023-11-02 627 | 628 | ### ⛓️ Dependencies 629 | - Updated newrelic/nri-kafka to v3.4.9 - [Changelog 🔗](https://github.com/newrelic/nri-kafka/releases/tag/3.4.9) 630 | - Updated newrelic/nri-f5 to v2.7.2 - [Changelog 🔗](https://github.com/newrelic/nri-f5/releases/tag/2.7.2) 631 | - Updated newrelic/nri-memcached to v2.5.1 - [Changelog 🔗](https://github.com/newrelic/nri-memcached/releases/tag/2.5.1) 632 | - Updated newrelic/nri-mysql to v1.10.2 - [Changelog 🔗](https://github.com/newrelic/nri-mysql/releases/tag/1.10.2) 633 | - Updated newrelic/nri-mongodb to v2.8.1 - [Changelog 🔗](https://github.com/newrelic/nri-mongodb/releases/tag/2.8.1) 634 | - Updated newrelic/nri-redis to v1.11.2 - [Changelog 🔗](https://github.com/newrelic/nri-redis/releases/tag/1.11.2) 635 | - Updated newrelic/nri-elasticsearch to v5.2.2 - [Changelog 🔗](https://github.com/newrelic/nri-elasticsearch/releases/tag/5.2.2) 636 | - Updated newrelic/nri-haproxy to v2.5.1 - [Changelog 🔗](https://github.com/newrelic/nri-haproxy/releases/tag/2.5.1) 637 | - Updated newrelic/nri-nagios to v2.9.1 - [Changelog 🔗](https://github.com/newrelic/nri-nagios/releases/tag/2.9.1) 638 | 639 | ## v3.2.23 - 2023-10-26 640 | 641 | ### ⛓️ Dependencies 642 | - Updated newrelic/infrastructure to v1.48.0 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.48.0) 643 | - Updated newrelic/nri-cassandra to v2.13.2 - [Changelog 🔗](https://github.com/newrelic/nri-cassandra/releases/tag/2.13.2) 644 | - Updated newrelic/nri-couchbase to v2.6.1 - [Changelog 🔗](https://github.com/newrelic/nri-couchbase/releases/tag/2.6.1) 645 | 646 | ## v3.2.22 - 2023-10-19 647 | 648 | ### ⛓️ Dependencies 649 | - Updated newrelic/nri-apache to v1.12.1 - [Changelog 🔗](https://github.com/newrelic/nri-apache/releases/tag/1.12.1) 650 | 651 | ## v3.2.21 - 2023-09-29 652 | 653 | ### ⛓️ Dependencies 654 | - Updated newrelic/infrastructure to v1.47.2 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.47.2) 655 | 656 | ## v3.2.20 - 2023-09-28 657 | 658 | ### ⛓️ Dependencies 659 | - Updated newrelic/nri-consul to v2.7.2 - [Changelog 🔗](https://github.com/newrelic/nri-consul/releases/tag/2.7.2) 660 | - Updated newrelic/nri-apache to v1.12.0 - [Changelog 🔗](https://github.com/newrelic/nri-apache/releases/tag/1.12.0) 661 | 662 | ## v3.2.19 - 2023-09-21 663 | 664 | ### ⛓️ Dependencies 665 | - Updated newrelic/infrastructure to v1.47.1 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.47.1) 666 | - Updated newrelic/nri-postgresql to v2.13.0 - [Changelog 🔗](https://github.com/newrelic/nri-postgresql/releases/tag/2.13.0) 667 | 668 | ## v3.2.18 - 2023-09-07 669 | 670 | ### ⛓️ Dependencies 671 | - Updated newrelic/nri-jmx to v3.4.0 - [Changelog 🔗](https://github.com/newrelic/nri-jmx/releases/tag/3.4.0) 672 | 673 | ## v3.2.17 - 2023-08-31 674 | 675 | ### ⛓️ Dependencies 676 | - Updated newrelic/infrastructure to v1.47.0 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.47.0) 677 | - Updated newrelic/nrjmx to v2.5.0 - [Changelog 🔗](https://github.com/newrelic/nrjmx/releases/tag/2.5.0) 678 | 679 | ## v3.2.16 - 2023-08-25 680 | 681 | ### ⛓️ Dependencies 682 | - Updated newrelic/infrastructure to v1.46.0 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.46.0) 683 | 684 | ## v3.2.15 - 2023-08-24 685 | 686 | ### ⛓️ Dependencies 687 | - Updated newrelic/nri-nginx to v3.4.1 - [Changelog 🔗](https://github.com/newrelic/nri-nginx/releases/tag/3.4.1) 688 | - Updated newrelic/nri-rabbitmq to v2.13.1 - [Changelog 🔗](https://github.com/newrelic/nri-rabbitmq/releases/tag/2.13.1) 689 | - Updated newrelic/nri-f5 to v2.7.1 - [Changelog 🔗](https://github.com/newrelic/nri-f5/releases/tag/2.7.1) 690 | 691 | ## v3.2.14 - 2023-08-10 692 | 693 | ### ⛓️ Dependencies 694 | - Updated newrelic/nri-redis to v1.11.1 - [Changelog 🔗](https://github.com/newrelic/nri-redis/releases/tag/1.11.1) 695 | - Updated newrelic/nri-consul to v2.7.1 - [Changelog 🔗](https://github.com/newrelic/nri-consul/releases/tag/2.7.1) 696 | - Updated newrelic/nri-mysql to v1.10.1 - [Changelog 🔗](https://github.com/newrelic/nri-mysql/releases/tag/1.10.1) 697 | - Updated newrelic/nri-postgresql to v2.12.2 - [Changelog 🔗](https://github.com/newrelic/nri-postgresql/releases/tag/2.12.2) 698 | - Updated newrelic/nri-elasticsearch to v5.2.1 - [Changelog 🔗](https://github.com/newrelic/nri-elasticsearch/releases/tag/5.2.1) 699 | - Updated newrelic/nri-mssql to v2.10.1 - [Changelog 🔗](https://github.com/newrelic/nri-mssql/releases/tag/2.10.1) 700 | 701 | ## v3.2.13 - 2023-08-03 702 | 703 | ### ⛓️ Dependencies 704 | - Updated newrelic/nri-postgresql to v2.12.1 - [Changelog 🔗](https://github.com/newrelic/nri-postgresql/releases/tag/2.12.1) 705 | - Updated newrelic/nri-consul to v2.7.0 - [Changelog 🔗](https://github.com/newrelic/nri-consul/releases/tag/2.7.0) 706 | - Updated newrelic/nri-elasticsearch to v5.2.0 - [Changelog 🔗](https://github.com/newrelic/nri-elasticsearch/releases/tag/5.2.0) 707 | - Updated newrelic/nri-mssql to v2.10.0 - [Changelog 🔗](https://github.com/newrelic/nri-mssql/releases/tag/2.10.0) 708 | - Updated newrelic/nri-mysql to v1.10.0 - [Changelog 🔗](https://github.com/newrelic/nri-mysql/releases/tag/1.10.0) 709 | - Updated newrelic/nri-rabbitmq to v2.13.0 - [Changelog 🔗](https://github.com/newrelic/nri-rabbitmq/releases/tag/2.13.0) 710 | 711 | ## v3.2.12 - 2023-07-25 712 | 713 | ### ⛓️ Dependencies 714 | - Updated newrelic/infrastructure to v1.45.0 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.45.0) 715 | 716 | ## v3.2.11 - 2023-07-20 717 | 718 | ### ⛓️ Dependencies 719 | - Updated newrelic/infrastructure to v1.44.0 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.44.0) 720 | - Updated newrelic/nri-redis to v1.11.0 - [Changelog 🔗](https://github.com/newrelic/nri-redis/releases/tag/1.11.0) 721 | - Updated newrelic/nri-kafka to v3.4.7 - [Changelog 🔗](https://github.com/newrelic/nri-kafka/releases/tag/3.4.7) 722 | - Updated newrelic/nri-cassandra to v2.13.1 - [Changelog 🔗](https://github.com/newrelic/nri-cassandra/releases/tag/2.13.1) 723 | - Updated newrelic/nri-nginx to v3.4.0 - [Changelog 🔗](https://github.com/newrelic/nri-nginx/releases/tag/3.4.0) 724 | 725 | ## v3.2.10 - 2023-07-13 726 | 727 | ### ⛓️ Dependencies 728 | - Updated newrelic/infrastructure to v1.43.2 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.43.2) 729 | - Updated newrelic/nri-kafka to v3.4.6 - [Changelog 🔗](https://github.com/newrelic/nri-kafka/releases/tag/3.4.6) 730 | - Updated newrelic/nri-postgresql to v2.12.0 - [Changelog 🔗](https://github.com/newrelic/nri-postgresql/releases/tag/2.12.0) 731 | 732 | ## v3.2.9 - 2023-06-23 733 | 734 | ### ⛓️ Dependencies 735 | - Updated newrelic/infrastructure to v1.43.1 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.43.1) 736 | 737 | ## v3.2.8 - 2023-06-22 738 | 739 | ### ⛓️ Dependencies 740 | - Updated newrelic/infrastructure to v1.43.0 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.43.0) 741 | 742 | ## v3.2.7 - 2023-06-09 743 | 744 | ### ⛓️ Dependencies 745 | - Updated newrelic/infrastructure to v1.42.5 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.42.5) 746 | 747 | ## v3.2.6 - 2023-06-08 748 | 749 | ### ⛓️ Dependencies 750 | - Updated newrelic/nri-rabbitmq to v2.12.0 - [Changelog 🔗](https://github.com/newrelic/nri-rabbitmq/releases/tag/2.12.0) 751 | 752 | ## v3.2.5 - 2023-06-07 753 | 754 | ### ⛓️ Dependencies 755 | - Updated newrelic/infrastructure to v1.42.4 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.42.4) 756 | - Updated newrelic/nri-discovery-kubernetes to v1.7.0 - [Changelog 🔗](https://github.com/newrelic/nri-discovery-kubernetes/releases/tag/1.7.0) 757 | - Updated newrelic/nri-apache to v1.11.0 - [Changelog 🔗](https://github.com/newrelic/nri-apache/releases/tag/1.11.0) 758 | - Updated newrelic/nri-nagios to v2.9.0 - [Changelog 🔗](https://github.com/newrelic/nri-nagios/releases/tag/2.9.0) 759 | - Updated newrelic/nri-mongodb to v2.8.0 - [Changelog 🔗](https://github.com/newrelic/nri-mongodb/releases/tag/2.8.0) 760 | - Updated newrelic/nri-couchbase to v2.6.0 - [Changelog 🔗](https://github.com/newrelic/nri-couchbase/releases/tag/2.6.0) 761 | - Updated newrelic/nri-consul to v2.6.0 - [Changelog 🔗](https://github.com/newrelic/nri-consul/releases/tag/2.6.0) 762 | - Updated newrelic/nri-memcached to v2.5.0 - [Changelog 🔗](https://github.com/newrelic/nri-memcached/releases/tag/2.5.0) 763 | - Updated newrelic/nri-elasticsearch to v5.1.0 - [Changelog 🔗](https://github.com/newrelic/nri-elasticsearch/releases/tag/5.1.0) 764 | - Updated newrelic/nri-kafka to v3.4.4 - [Changelog 🔗](https://github.com/newrelic/nri-kafka/releases/tag/3.4.4) 765 | - Updated newrelic/nri-jmx to v3.3.1 - [Changelog 🔗](https://github.com/newrelic/nri-jmx/releases/tag/3.3.1) 766 | - Updated newrelic/nri-f5 to v2.7.0 - [Changelog 🔗](https://github.com/newrelic/nri-f5/releases/tag/2.7.0) 767 | - Updated newrelic/nri-haproxy to v2.5.0 - [Changelog 🔗](https://github.com/newrelic/nri-haproxy/releases/tag/2.5.0) 768 | - Updated newrelic/nri-mssql to v2.9.0 - [Changelog 🔗](https://github.com/newrelic/nri-mssql/releases/tag/2.9.0) 769 | - Updated newrelic/nri-redis to v1.10.0 - [Changelog 🔗](https://github.com/newrelic/nri-redis/releases/tag/1.10.0) 770 | - Updated newrelic/nri-postgresql to v2.11.0 - [Changelog 🔗](https://github.com/newrelic/nri-postgresql/releases/tag/2.11.0) 771 | - Updated newrelic/nri-nginx to v3.3.0 - [Changelog 🔗](https://github.com/newrelic/nri-nginx/releases/tag/3.3.0) 772 | - Updated newrelic/nri-mysql to v1.9.0 - [Changelog 🔗](https://github.com/newrelic/nri-mysql/releases/tag/1.9.0) 773 | - Updated newrelic/nri-discovery-kubernetes to v1.7.1 - [Changelog 🔗](https://github.com/newrelic/nri-discovery-kubernetes/releases/tag/1.7.1) 774 | 775 | ## v3.2.4 - 2023-06-01 776 | 777 | ### ⛓️ Dependencies 778 | - Updated newrelic/infrastructure to v1.42.3 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.42.3) 779 | 780 | ## v3.2.3 - 2023-06-01 781 | 782 | ### ⛓️ Dependencies 783 | - Updated newrelic/infrastructure to v1.42.2 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.42.2) 784 | 785 | ## v3.2.2 - 2023-05-25 786 | 787 | ### ⛓️ Dependencies 788 | - Updated newrelic/infrastructure to v1.42.1 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.42.1) 789 | - Updated newrelic/nri-cassandra to v2.13.0 - [Changelog 🔗](https://github.com/newrelic/nri-cassandra/releases/tag/2.13.0) 790 | 791 | ## v3.2.1 - 2023-05-22 792 | 793 | ### ⛓️ Dependencies 794 | - Updated newrelic/infrastructure to v1.42.0 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.42.0) 795 | 796 | ## v3.2.0 - 2023-05-11 797 | 798 | ### 🚀 Enhancements 799 | - The integration releases are now triggered automatically. 800 | 801 | ### ⛓️ Dependencies 802 | - Updated newrelic/infrastructure to v1.41.0 - [Changelog 🔗](https://github.com/newrelic/infrastructure-agent/releases/tag/1.41.0) 803 | - Updated newrelic/nri-rabbitmq to v2.11.0 - [Changelog 🔗](https://github.com/newrelic/nri-rabbitmq/releases/tag/2.11.0) 804 | - Updated newrelic/nrjmx to v2.4.0 - [Changelog 🔗](https://github.com/newrelic/nrjmx/releases/tag/2.4.0) 805 | - Updated newrelic/nri-kafka to v3.4.3 - [Changelog 🔗](https://github.com/newrelic/nri-kafka/releases/tag/3.4.3) 806 | --------------------------------------------------------------------------------