## Summary (this is the continuation of https://github.com/elastic/kibana/pull/143910, which I started before my parental leave and which is impossible to rebase) With the introduction of more features that are part of licenses, we're also adding more upsells to Kibana. These upsells advertise the feature, they explain which license is required in order to use said feature and they will link the client to the subscription page. Take the upsell for more insights in the alert flyout as an example: <img width="1584" alt="Screenshot 2022-10-18 at 16 39 52" src="https://user-images.githubusercontent.com/68591/197629708-17978c8b-595e-4797-b80a-59c799896509.png"> Upsells come in all different shapes. Somtimes they're just links, sometimes full pages and sometimes interactive popups. They are also used across all solutions in Kibana. There is currently no specific tracking in place for these types of elements yet. Meaning we don't know how many people interact with them, how many custerms see them and how well they perform in terms of conversions. It is technically already possible to analyze clicks on these elements as part of the regular Kibana click tracking but it would require setting up queries with lots of `data-test-subj` and `url` filters for the right click events. Even if we wanted to set up tracking dashboards with that data, we would still not know how often upsells are seen which is necessary to calculate their click-through-rate. That rate can give an indicator if an upsell performs well or if we might want to improve it in the future. For that reason, I'm proposing a dedicated set of tracking methods to capture `impressions` and `clicks` for upsells. No conversion tracking as of yet, but I will get back to that later. This PR introduces the `@kbn/subscription-tracking` package. It leverages the `@kbn/analytics-client` package to send dedicated subscription tracking events. It comes with a set of React components that automatically track impressions and click events. Consumers of those components only need to specify a `subscription context` that gives more details on the type of feature that is advertised and the location of the upsell. ```typescript import { SubscriptionLink } from '@kbn/subscription-tracking'; import type { SubscriptionContextData } from '@kbn/subscription-tracking'; const subscriptionContext: SubscriptionContextData = { feature: 'threat-intelligence', source: 'security__threat-intelligence', }; export const Paywall = () => { return ( <div> <SubscriptionLink subscriptionContext={subscriptionContext}> Upgrade to Platinum to get this feature </SubscriptionLink> </div> ) } ``` The example above uses a `SubscriptionLink` which is a wrapper of `EuiLink` . So it behaves just like a normal link. Alternatively, upsells can also use a `SubscriptionButton` or `SubscriptionButtonEmpty` which wrap `EuiButton` and `EuiButtonEmpty` respectively. When the link is mounted, it will send off an `impression` event with the given `subscriptionContext`. That piece of metadata consists of an identifier of the advertised feature (in this case `threat-intelligence`) and the `source` of the impression (in this case the `threat-intelligence` page in the `security` solution). `source` follows the following format: `{solution-identifier}__location-identifier`. There are no special rules for how to name these identifiers but it's good practise to make sure that `feature` has the same value for all upsells advertising the same feature (e.g. use enums for features to prevent spelling mistakes). Upon interaction with the upsell link/button, a special `click` event is sent, which, again, contains the same subscription context. If you want to use the `subscription-tracking` elements in your solution, you have to set up a `SubscriptionTrackingProvider` in your plugin setup and register the tracking events on startup. This PR contains an example for this setup for the security plugin and some of its sub-plugins. ## Next steps - There are currently no dedicated tracking dashboards for these events which I am planning to set up in the future. - Since I only had a week's worth of time, I did not manage to add conversion tracking. The addition of those events might be a lot harder as well since the current license flow does not integrate seamlessly into Kibana - All upsells currently link to the license management page which currently does not inform customers about our license and cloud offering. It seems to me like a weak link in the subscription funnel and it would be great to improve on that page. - potential improvement: Send `impression` event when the element becomes visible in the viewport instead of when the element is mounted ### Checklist - [x] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> |
||
---|---|---|
.buildkite | ||
.ci | ||
.github | ||
api_docs | ||
bundle | ||
config | ||
dev_docs | ||
docs | ||
examples | ||
kbn_pm | ||
legacy_rfcs | ||
licenses | ||
packages | ||
plugins | ||
scripts | ||
src | ||
test | ||
typings | ||
vars | ||
x-pack | ||
.backportrc.json | ||
.bazelignore | ||
.bazeliskversion | ||
.bazelrc | ||
.bazelrc.common | ||
.bazelversion | ||
.browserslistrc | ||
.editorconfig | ||
.eslintignore | ||
.eslintrc.js | ||
.gitattributes | ||
.gitignore | ||
.i18nrc.json | ||
.node-version | ||
.npmrc | ||
.nvmrc | ||
.prettierignore | ||
.prettierrc | ||
.stylelintignore | ||
.stylelintrc | ||
.telemetryrc.json | ||
.yarnrc | ||
BUILD.bazel | ||
catalog-info.yaml | ||
CODE_OF_CONDUCT.md | ||
CONTRIBUTING.md | ||
FAQ.md | ||
fleet_packages.json | ||
github_checks_reporter.json | ||
Jenkinsfile | ||
kibana.d.ts | ||
LICENSE.txt | ||
nav-kibana-dev.docnav.json | ||
NOTICE.txt | ||
package.json | ||
preinstall_check.js | ||
README.md | ||
renovate.json | ||
RISK_MATRIX.mdx | ||
SECURITY.md | ||
STYLEGUIDE.mdx | ||
tsconfig.base.json | ||
tsconfig.browser.json | ||
tsconfig.browser_bazel.json | ||
tsconfig.json | ||
TYPESCRIPT.md | ||
versions.json | ||
WORKSPACE.bazel | ||
yarn.lock |
Kibana
Kibana is your window into the Elastic Stack. Specifically, it's a browser-based analytics and search dashboard for Elasticsearch.
- Getting Started
- Documentation
- Version Compatibility with Elasticsearch
- Questions? Problems? Suggestions?
Getting Started
If you just want to try Kibana out, check out the Elastic Stack Getting Started Page to give it a whirl.
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.
Using a Kibana Release
If you want to use a Kibana release in production, give it a test run, or just play around:
- Download the latest version on the Kibana Download Page.
- Learn more about Kibana's features and capabilities on the Kibana Product Page.
- We also offer a hosted version of Kibana on our Cloud Service.
Building and Running Kibana, and/or Contributing Code
You might want to build Kibana locally to contribute some code, test out the latest features, or try out an open PR:
- CONTRIBUTING.md will help you get Kibana up and running.
- If you would like to contribute code, please follow our STYLEGUIDE.mdx.
- For all other questions, check out the FAQ.md and wiki.
Documentation
Visit Elastic.co for the full Kibana documentation.
For information about building the documentation, see the README in elastic/docs.
Version Compatibility with Elasticsearch
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.
Note: The version numbers below are only examples, meant to illustrate the relationships between different types of version numbers.
Situation | Example Kibana version | Example ES version | Outcome |
---|---|---|---|
Versions are the same. | 7.15.1 | 7.15.1 | 💚 OK |
ES patch number is newer. | 7.15.0 | 7.15.1 | ⚠️ Logged warning |
ES minor number is newer. | 7.14.2 | 7.15.0 | ⚠️ Logged warning |
ES major number is newer. | 7.15.1 | 8.0.0 | 🚫 Fatal error |
ES patch number is older. | 7.15.1 | 7.15.0 | ⚠️ Logged warning |
ES minor number is older. | 7.15.1 | 7.14.2 | 🚫 Fatal error |
ES major number is older. | 8.0.0 | 7.15.1 | 🚫 Fatal error |
Questions? Problems? Suggestions?
- If you've found a bug or want to request a feature, please create a GitHub Issue. 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 and a fellow community member or Elastic engineer will be glad to help you out.