Skip to content

Commit

Permalink
Merge pull request #133 from dlumbrer/integration-6.8.6
Browse files Browse the repository at this point in the history
Add docker image for secured version and README with the details
  • Loading branch information
dlumbrer authored Mar 18, 2020
2 parents 3a98c27 + 57941c9 commit 737231a
Show file tree
Hide file tree
Showing 3 changed files with 269 additions and 38 deletions.
121 changes: 83 additions & 38 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,54 +1,96 @@
# Kibana
# Kibiter 6.8.6

Kibana is your window into the [Elastic Stack](https://www.elastic.co/products). Specifically, it's a browser-based analytics and search dashboard for Elasticsearch.
Kibiter is a custom soft fork of [Kibana](https://github.com/elastic/kibana) which empowers [GrimoireLab](https://chaoss.github.io/grimoirelab/) Panels with metrics & data visualizations.

- [Getting Started](#getting-started)
- [Using a Kibana Release](#using-a-kibana-release)
- [Building and Running Kibana, and/or Contributing Code](#building-and-running-kibana-andor-contributing-code)
- [Documentation](#documentation)
- [Version Compatibility with Elasticsearch](#version-compatibility-with-elasticsearch)
- [Questions? Problems? Suggestions?](#questions-problems-suggestions)
- [Installation](#installation)
- [Features](#features)
- [Compatibility with Elasticsearch](#compatibility-with-elasticsearch)
- [Contributing](#contributing)
- [License](#license)

## Getting Started
## Installation

If you just want to try Kibana out, check out the [Elastic Stack Getting Started Page](https://www.elastic.co/start) to give it a whirl.
There are several ways for installing Kibiter on your system: from releases, Docker images or source code.

If you're interested in diving a bit deeper and getting a taste of Kibana's capabilities, head over to the [Kibana Getting Started Page](https://www.elastic.co/guide/en/kibana/current/getting-started.html).
### Releases

### Using a Kibana Release
- Go to [release tab](https://github.com/chaoss/grimoirelab-kibiter/releases) and download the version you want.

If you want to use a Kibana release in production, give it a test run, or just play around:
### Docker images

- Download the latest version on the [Kibana Download Page](https://www.elastic.co/downloads/kibana).
- Learn more about Kibana's features and capabilities on the
[Kibana Product Page](https://www.elastic.co/products/kibana).
- We also offer a hosted version of Kibana on our
[Cloud Service](https://www.elastic.co/cloud/as-a-service).
There are four Docker images of Kibiter, they have the following tags:

### Building and Running Kibana, and/or Contributing Code
- `bitergia/kibiter:community-v6.8.6-X` (being X the version of the release), the image that corresponds to the community version of Kibiter.
- `bitergia/kibiter:optimized-v6.8.6-X` (being X the version of the release), the image that corresponds to the optimized version of Kibiter.
- `bitergia/kibiter:secured-v6.8.6-X` (being X the version of the release), the image that corresponds to the secured (with Search Guard) version of Kibiter.

You may want to build Kibana locally to contribute some code, test out the latest features, or try
out an open PR:
#### Docker env variables for the secured version

- [CONTRIBUTING.md](CONTRIBUTING.md) will help you get Kibana up and running.
- If you would like to contribute code, please follow our [STYLEGUIDE.md](STYLEGUIDE.md).
- Learn more about our UI code with [UI_SYSTEMS.md](src/ui/public/UI_SYSTEMS.md).
- For all other questions, check out the [FAQ.md](FAQ.md) and
[wiki](https://github.com/elastic/kibana/wiki).
There are docker env variables for the secured image (`bitergia/kibiter:secured-v6.8.6-X`) that should be defined:

## Documentation
- `ELASTICSEARCH_URL`: This env variable defines the URL of the ElasticSearch that Kibiter will connect.
- `BASE_PATH`: Enables you to specify a path to mount Kibiter at if you are running behind a proxy.
- `PROJECT_NAME`: The name of the project that will be in the menu top bar and the page title.
- `ELASTICSEARCH_USER`: Username that will use Kibiter to connect to ElasticSearch.
- `ELASTICSEARCH_PASSWORD`: Password of the username that will use Kibiter to connect to ElasticSearch.
- `ANONYMOUS_USER`: If true, the anonymous user will be activated. If not defined or false, the anonymous user will be deactivated. ElasticSearch with SearchGuard plugin must have activated the anonymous authentication (`ANONYMOUS_USER` if using [Bitergia](https://github.com/Bitergia/elasticsearch) ElasticSearch image).
- `LOGIN_BRANDIMAGE`: This env variable must be an URL to an image, this image will be the logo of the login form. If not defined, the Bitergia logo will appear.
- `LOGIN_TITLE`: A string (or HTML) that will define the title of the login. If not defined, the title will be: `Please login to Bitergia Analytics Dashboard`.
- `LOGIN_SUBTITLE`: A string (or HTML) that will define the subtitle of the login. If not defined, the subtitle will be: `If you have forgotten your username or password, please contact the <a href="mailto:[email protected]?Subject=Credentials" target="_top">Bitergia staff</a>`.

Visit [Elastic.co](http://www.elastic.co/guide/en/kibana/current/index.html) for the full Kibana documentation.
### Source code

For information about building the documentation, see the README in [elastic/docs](https://github.com/elastic/docs).
Clone the repository from the branch `integration-6.8.6-<version>`, where version can be empty or //community//.
```
git clone https://github.com/chaoss/grimoirelab-kibiter -b integration-6.8.6-<version>
```

## Version Compatibility with Elasticsearch
Install the npm dependencies

Ideally, you should be running Elasticsearch and Kibana with matching version numbers. If your Elasticsearch has an older version number or a newer _major_ number than Kibana, then Kibana will fail to run. If Elasticsearch has a newer minor or patch number than Kibana, then the Kibana Server will log a warning.
```
cd grimoirelab-kibiter
yarn kbn bootstrap
```

_Note: The version numbers below are only examples, meant to illustrate the relationships between different types of version numbers._
Launch Kibiter
```
./bin/kibana --oss
```

| Situation | Example Kibana version | Example ES version | Outcome |
## Features

Kibiter provides several features, not present in Kibana, that have been developed for GrimoireLab. The most important ones are described below.

### Panel menu

If you are using Kibiter with the [GrimoireLab](https://chaoss.github.io/grimoirelab/) tools, you will see a quick menu at the top of the page, like the one below:

<img alt="Panel menu" src="https://i.imgur.com/6hO4aEV.png">


This menu allows you to navigate through the GrimoireLab panels, see its structure below:

<img alt="Panel menu opened" src="https://i.imgur.com/9yimD9m.png">

### New visualization plugins

Kibiter has several plugins installed by default, they improve the user customization and add more information to the dashboards. Clearly, they are all open source. The plugins are listed below:

- [Network plugin](https://github.com/dlumbrer/kbn_network) supports data visualization in a graph-style way.
- [Searchtables plugin](https://github.com/dlumbrer/kbn_searchtables) improves Kibiter tables by adding a search box to perform searches without applying filters.
- [Radar plugin](https://github.com/dlumbrer/kbn_radar) allows to explore the data using radar visualizations.
- [Dot plot plugin](https://github.com/dlumbrer/kbn_dotplot) empowers Kibiter with dot-plot visualizations, granting to add metrics in both X and Y axis.
- [Polar plugin](https://github.com/dlumbrer/kbn_network) enhances Kibiter with polar visualizations for your data.
- [Enhanced table](https://github.com/fbaligand/kibana-enhanced-table) This Kibtier visualization plugin uses the Data Table, but with enhanced features like computed columns, filter bar and pivot table.

## Version compatibility with Elasticsearch

Following the Kibana docs, you should be running Elasticsearch and Kibiter with matching version numbers. However, Kibiter will run (and log a warning) in case your Elasticsearch has a newer minor or patch number.
Note that Kibiter won't be able to run, if your Elasticsearch has an older version number or a newer _major_ number.

The table below shows some examples to illustrate the relationships between different types of version numbers.

| Situation | Example Kibiter version | Example ES version | Outcome |
| ------------------------- | -------------------------- |------------------- | ------- |
| Versions are the same. | 5.1.2 | 5.1.2 | 💚 OK |
| ES patch number is newer. | 5.1.__2__ | 5.1.__5__ | ⚠️ Logged warning |
Expand All @@ -58,9 +100,12 @@ _Note: The version numbers below are only examples, meant to illustrate the rela
| ES minor number is older. | 5.__1__.2 | 5.__0__.0 | 🚫 Fatal error |
| ES major number is older. | __5__.1.2 | __4__.0.0 | 🚫 Fatal error |

## Questions? Problems? Suggestions?
## Contributing

We happily accept contributions, and we will help you in case you need. We follow the same contribution process that Kibana provides, thus have a look at:

- [CONTRIBUTING.md](CONTRIBUTING.md) if you want to get Kibiter up and running.
- [STYLEGUIDE.md](STYLEGUIDE.md) if you plan to submit a pull request.
- [GitHub issue tracker](https://github.com/chaoss/grimoirelab-kibiter/issues) for all other questions, we will answer you as soon as possible.

- If you've found a bug or want to request a feature, please create a [GitHub Issue](https://github.com/elastic/kibana/issues/new).
Please check to make sure someone else hasn't already created an issue for the same topic.
- Need help using Kibana? Ask away on our [Kibana Discuss Forum](https://discuss.elastic.co/c/kibana) and a fellow community member or
Elastic engineer will be glad to help you out.
If you find a bug or want to request a new feature, please open a issue on [GitHub](https://github.com/chaoss/grimoirelab-kibiter/issues). To avoid duplicated issues, check the existing issues to make sure someone else hasn't already created a similar one.
120 changes: 120 additions & 0 deletions docker/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
FROM debian:stable

MAINTAINER David Moreno <[email protected]>
# Image for developing Kibiter/Kibana

# nvm environment variables
ENV NVM_DIR /usr/local/nvm
ENV NODE_VERSION 10.15.2

# add our user and group first to make sure their IDs get assigned consistently
RUN groupadd --system kibana && \
useradd --system --create-home --gid kibana kibana

# backports used to install java 8 needed by elasticsearch 5
# ruby gems are used for building binary packages
RUN apt-get update && \
apt-get install -y --no-install-recommends \
ca-certificates dirmngr gnupg \
curl \
wget \
unzip \
git \
python \
zip \
make \
g++ \
ruby-dev rpm rubygems \
libffi-dev
# Install nvm and npm
RUN curl -o /tmp/nvm-install.sh -sSL https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh && \
chmod +x /tmp/nvm-install.sh && \
bash -c /tmp/nvm-install.sh && \
. /root/.bashrc && \
nvm install $NODE_VERSION
# add node and npm to path so the commands are available
ENV NODE_PATH $NVM_DIR/v$NODE_VERSION/lib/node_modules
ENV PATH $NVM_DIR/versions/node/v$NODE_VERSION/bin:$PATH
# Install kibiter
# gems needed in Kibana > 5.x to build binary packages
RUN gem install rake && \
gem install ffi && \
gem install fpm -v 1.5.0 && \
gem install pleaserun -v 0.0.24
# Download Kibiter release
RUN curl -o /tmp/kibiter-6.8.6-linux-x86_64-1.tar.gz -sSL https://github.com/chaoss/grimoirelab-kibiter/releases/download/secured-v6.8.6-1/kibiter-6.8.6-linux-x86_64-1.tar.gz && \
tar xfz /tmp/kibiter-6.8.6-linux-x86_64-1.tar.gz --directory /opt && \
mv /opt/kibiter-6.8.6-linux-x86_64 /opt/kibana && \
chown -R kibana:kibana /opt/kibana
# Install dotplot plugin: https://github.com/dlumbrer/kbn_dotplot
RUN cd /opt/kibana/plugins && \
git clone https://github.com/dlumbrer/kbn_dotplot.git -b 6-dev && \
cd kbn_dotplot && \
npm install
# Install polar plugin: https://github.com/dlumbrer/kbn_polar
RUN cd /opt/kibana/plugins && \
git clone https://github.com/dlumbrer/kbn_polar.git -b 6-dev && \
cd kbn_polar && \
npm install
# Install radar plugin: https://github.com/dlumbrer/kbn_radar
RUN cd /opt/kibana/plugins && \
git clone https://github.com/dlumbrer/kbn_radar.git -b 6-dev && \
cd kbn_radar && \
npm install
# Install network plugin: https://dlumbrer.github.io/kbn_network/
RUN cd /opt/kibana/plugins && \
git clone https://github.com/dlumbrer/kbn_network.git network_vis -b 6-dev && \
cd network_vis && \
npm install
# Install kibana-enchanced table plugin: https://github.com/fbaligand/kibana-enhanced-table
RUN cd /opt/kibana && \
./bin/kibana-plugin install https://github.com/fbaligand/kibana-enhanced-table/releases/download/v1.8.0/enhanced-table-1.8.0_6.8.6.zip
# Install Search-Guard Custom Bitergia plugin: https://github.com/Bitergia/search-guard-kibana-plugin
RUN cd /opt/kibana && \
./bin/kibana-plugin install https://releases.floragunn.com/search-guard-kibana-plugin-6/6.8.6-19.0/search-guard-kibana-plugin-6-6.8.6-19.0.zip
# Add Search-Guard configuration to kibana.yml
RUN echo 'elasticsearch.ssl.verificationMode: none' >> /opt/kibana/config/kibana.yml && \
echo 'searchguard.auth.type: "basicauth"' >> /opt/kibana/config/kibana.yml && \
echo '#searchguard.auth.anonymous_auth_enabled:' >> /opt/kibana/config/kibana.yml && \
echo '#searchguard.basicauth.login.brandimage:' >> /opt/kibana/config/kibana.yml && \
echo '#searchguard.basicauth.login.title:' >> /opt/kibana/config/kibana.yml && \
echo '#searchguard.basicauth.login.subtitle:' >> /opt/kibana/config/kibana.yml && \
cd /root
# cleanup to thin the final image
RUN rm -rf /kibiter && \
apt-get purge -y g++ git make python zip wget && \
apt-get autoremove --purge -y && \
apt-get clean && \
find /var/lib/apt/lists -type f -delete && \
rm -rf /root/.npm /root/.node-gyp /root/.nvm /tmp/* /var/tmp/* && \
bash -c 'find /usr/share/locale -maxdepth 1 -mindepth 1 -type d | grep -v -e "en_US" | xargs rm -rfv' && \
bash -c 'localedef --list-archive | grep -v -e "en_US" | xargs localedef --delete-from-archive' && \
rm -rf /usr/share/doc/*

# grab gosu for easy step-down from root
RUN ( gpg --batch --keyserver hkps://hkps.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \
|| gpg --batch --keyserver pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \
|| gpg --batch --keyserver hkp://keys.gnupg.net:80 --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 )
RUN arch="$(dpkg --print-architecture)" \
&& set -x \
&& curl -o /usr/local/bin/gosu -sSL "https://github.com/tianon/gosu/releases/download/1.3/gosu-$arch" \
&& curl -o /usr/local/bin/gosu.asc -sSL "https://github.com/tianon/gosu/releases/download/1.3/gosu-$arch.asc" \
&& gpg --verify /usr/local/bin/gosu.asc \
&& rm /usr/local/bin/gosu.asc \
&& chmod +x /usr/local/bin/gosu

ENV PATH /opt/kibana/bin:$PATH

# Remove kibana optimize so it is regenerated when we modify src files in containers
# Don't delete because we don't modify anymore src in docker-entrypoint.sh
RUN rm -rf /opt/kibana/optimize/*
RUN cat /opt/kibana/config/kibana.yml

RUN ./opt/kibana/bin/kibana | sleep 200 > /tmp/run_kibana_log.txt

COPY ./docker_entrypoint.sh /
RUN ["chmod", "+x", "/docker_entrypoint.sh"]

EXPOSE 5601
ENTRYPOINT ["/docker_entrypoint.sh"]
CMD ["kibana"]
66 changes: 66 additions & 0 deletions docker/docker_entrypoint.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
#!/bin/bash

set -e

# Add kibana as command if needed
if [[ "$1" == -* ]]; then
set -- kibana "$@"
fi

# Run as user "kibana" if the command is "kibana"
if [ "$1" = 'kibana' ]; then
if [ "$ELASTICSEARCH_URL" -o "$ELASTICSEARCH_PORT_9200_TCP" ]; then
: ${ELASTICSEARCH_URL:='http://elasticsearch:9200'}
sed -ri "s!^(\#\s*)?(elasticsearch\.hosts:).*!\2 ['$ELASTICSEARCH_URL']!" /opt/kibana/config/kibana.yml
else
echo >&2 'warning: missing ELASTICSEARCH_PORT_9200_TCP or ELASTICSEARCH_URL'
echo >&2 ' Did you forget to --link some-elasticsearch:elasticsearch'
echo >&2 ' or -e ELASTICSEARCH_URL=http://some-elasticsearch:9200 ?'
echo >&2
fi
sed -e "s|^#server.host: .*$|server.host: 0.0.0.0|" -i /opt/kibana/config/kibana.yml

if [ "$BASE_PATH" != "" ]; then
sed -e "s|^#server.basePath: \"\".*$|server.basePath: \"$BASE_PATH\"|" -i /opt/kibana/config/kibana.yml
fi

if [ "$PROJECT_NAME" != "" ]; then
sed -e "s/title: 'Kibana',$/title: '$PROJECT_NAME',/" -i /opt/kibana/src/legacy/core_plugins/kibana/index.js
sed -e "s|__PROJECT__|$PROJECT_NAME|" -i /opt/kibana/src/ui/ui_render/views/chrome.pug
fi

if [ "$ELASTICSEARCH_USER" != "" -a "$ELASTICSEARCH_PASSWORD" != "" ]; then
sed -e "s|^#elasticsearch.username:.*$|elasticsearch.username: \"$ELASTICSEARCH_USER\"|" -i /opt/kibana/config/kibana.yml
sed -e "s|^#elasticsearch.password:.*$|elasticsearch.password: \"$ELASTICSEARCH_PASSWORD\"|" -i /opt/kibana/config/kibana.yml
else
echo >&2 'error: ELASTICSEARCH_USER or/and ELASTICSEARCH_PASSWORD environment variables were not configured'
echo >&2 ' these two docker environment variables must be configured before running the container'
exit 1
fi

if [ "$ANONYMOUS_USER" != "" ]; then
sed -e "s|^#searchguard.auth.anonymous_auth_enabled:.*$|searchguard.auth.anonymous_auth_enabled: \"$ANONYMOUS_USER\"|" -i /opt/kibana/config/kibana.yml
fi

if [ "$LOGIN_BRANDIMAGE" != "" ]; then
sed -e "s|^#searchguard.basicauth.login.brandimage:.*$|searchguard.basicauth.login.brandimage: \"$LOGIN_BRANDIMAGE\"|" -i /opt/kibana/config/kibana.yml
else
sed -e "s|^#searchguard.basicauth.login.brandimage:.*$|searchguard.basicauth.login.brandimage: 'https://bitergia.com/assets/img/bitergia_logo-907x227.png'|" -i /opt/kibana/config/kibana.yml
fi

if [ "$LOGIN_TITLE" != "" ]; then
sed -e "s|^#searchguard.basicauth.login.title:.*$|searchguard.basicauth.login.title: \"$LOGIN_TITLE\"|" -i /opt/kibana/config/kibana.yml
else
sed -e "s|^#searchguard.basicauth.login.title:.*$|searchguard.basicauth.login.title: Please login to Bitergia Analytics Dashboard|" -i /opt/kibana/config/kibana.yml
fi

if [ "$LOGIN_SUBTITLE" != "" ]; then
sed -e "s|^#searchguard.basicauth.login.subtitle:.*$|searchguard.basicauth.login.subtitle: \"$LOGIN_SUBTITLE\"|" -i /opt/kibana/config/kibana.yml
else
sed -e 's|^#searchguard.basicauth.login.subtitle:.*$|searchguard.basicauth.login.subtitle: If you have forgotten your username or password, please contact the <a href="mailto:[email protected]?Subject=Credentials" target="_top">Bitergia staff</a>|' -i /opt/kibana/config/kibana.yml
fi

set -- gosu kibana "$@"
fi

exec "$@"

0 comments on commit 737231a

Please sign in to comment.