Compare commits

...

394 Commits

Author SHA1 Message Date
Yanming Zhou e47275c7c6
Fix OTLP definition (#945)
There is no `OpenTelemetry Line Protocol`.

---------

Signed-off-by: Yanming Zhou <zhouyanming@gmail.com>
Signed-off-by: Yuri Shkuro <github@ysh.us>
Co-authored-by: Yuri Shkuro <github@ysh.us>
2025-06-25 09:55:46 -04:00
Yanming Zhou 27107420dd
Fix typo (#944) 2025-06-25 12:53:42 +00:00
Jonah Kowall 2f7339694e
Adding scarf to sponsors on bottom of homepage (#943)
## Description of the changes
Added scarf to homepage

## How was this change tested?
make develop and change it.

## Checklist
- [x] I have read
https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md
- [x] I have signed all commits

Signed-off-by: Jonah Kowall <jkowall@kowall.net>
2025-06-24 15:29:02 -04:00
Jonah Kowall abe2243476
Swap out scarf for downloads in docs (#942)
## Which problem is this PR solving?
https://github.com/jaegertracing/jaeger/issues/7118

## Description of the changes
new download links 

## How was this change tested?
make develop and testing links

## Checklist
- [x] I have read
https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md
- [x] I have signed all commits

Signed-off-by: Jonah Kowall <jkowall@kowall.net>
2025-06-21 16:14:57 -03:00
Patrice Chalin cd51407f41
Update refcache following 2.7 release (#941)
- Followup to #939
- Updates the refcache with new 1.70 & 2.7 external URLs

Signed-off-by: Patrice Chalin <pchalin@gmail.com>
2025-06-16 15:07:25 -04:00
Mend Renovate 4b04d5038d
Update jest monorepo to v30 (major) (#937)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[@types/jest](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/jest)
([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/jest))
| [`^29.5.14` ->
`^30.0.0`](https://renovatebot.com/diffs/npm/@types%2fjest/29.5.14/30.0.0)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fjest/30.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fjest/30.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fjest/29.5.14/30.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fjest/29.5.14/30.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [jest](https://jestjs.io/)
([source](https://redirect.github.com/jestjs/jest/tree/HEAD/packages/jest))
| [`^29.7.0` ->
`^30.0.0`](https://renovatebot.com/diffs/npm/jest/29.7.0/30.0.0) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/jest/30.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/jest/30.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/jest/29.7.0/30.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/jest/29.7.0/30.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>jestjs/jest (jest)</summary>

###
[`v30.0.0`](https://redirect.github.com/jestjs/jest/compare/v29.7.0...a383155cd5af4539b3c447cfa7184462ee32f418)

[Compare
Source](https://redirect.github.com/jestjs/jest/compare/v29.7.0...v30.0.0)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these
updates again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/jaegertracing/documentation).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC40OC41IiwidXBkYXRlZEluVmVyIjoiNDAuNTAuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiY2hhbmdlbG9nOmRlcGVuZGVuY2llcyJdfQ==-->

Signed-off-by: Mend Renovate <bot@renovateapp.com>
2025-06-16 18:32:54 +00:00
Patrice Chalin 96b4436972
Update NPM pkgs, including Hugo and Netlify (#940)
- Updates NPM packages to their latest versions
- Closes #925 by superseding it
- Updates `update:pkgs` script to ensure that peer deps are updated too

Signed-off-by: Patrice Chalin <pchalin@gmail.com>
2025-06-16 14:29:56 -04:00
github-actions[bot] 11f8965ab9
Release 2.7.0/1.70.0 (#939)
Release 2.7.0/1.70.0. This PR is created from CI and is part of the
release process.

Signed-off-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
Co-authored-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
2025-06-10 23:45:38 -03:00
Yuri Shkuro 6379f90336 Fix typo incase => in case
Signed-off-by: Yuri Shkuro <github@ysh.us>
2025-06-10 22:38:37 -04:00
Yuri Shkuro 55d6c1ff15 Fix release.sh to update front matter
Signed-off-by: Yuri Shkuro <github@ysh.us>
2025-06-10 22:36:25 -04:00
Yuri Shkuro ff40c080dc Fix title of Introduction page
Signed-off-by: Yuri Shkuro <github@ysh.us>
2025-06-10 22:17:50 -04:00
Yuri Shkuro 25cb878e48 Adapt release.sh script for new docs structure
Signed-off-by: Yuri Shkuro <github@ysh.us>
2025-06-10 22:05:54 -04:00
Ákos Lukács 2f4be0d7c7
getting-started.md - the compose file is no longer called `-v2` (#936)
The documentation says run `docker compose -f docker-compose-v2.yml up`,
but now there is no `v2` in the compose file's name

Honestly, I did not run the tests :)

---------

Signed-off-by: Ákos Lukács <AkosLukacs42@gmail.com>
Signed-off-by: Yuri Shkuro <github@ysh.us>
Co-authored-by: Yuri Shkuro <github@ysh.us>
2025-06-07 14:37:28 +00:00
Patrice Chalin 0f7df55b8b
[CI] Consolidate build-related files (#934)
- Fixes #921
- Makes the NPM scripts the primary method used to run build & CI
commands. The makefile is still there, but plays a supporting role.
- Adds `hugo-extended` package as a means of getting the version of Hugo
that the project needs. This greatly simplifies the ci-test.yml workflow
- FYI: this will also simplify the Docsy-based build, which will only
require `WKSP=docsy`. The CI scripts remain the same.

---------

Signed-off-by: Patrice Chalin <pchalin@gmail.com>
2025-06-07 02:20:49 -03:00
Patrice Chalin 991207d457
Fix operator 404, and more (#933) 2025-06-06 15:27:11 -04:00
Patrice Chalin 3abc5a2fe3
Refactor redirects code so that all entries are sorted (#932)
- Refactoring in support of #929
- Sorts all redirect rules, which currently aren't order dependent.
- Tweak of the Download page title, as a followup to #930

### Sanity checks that redirects are still working

- https://deploy-preview-932--jaegertracing.netlify.app/docs/security
- https://deploy-preview-932--jaegertracing.netlify.app/docs/download/

Signed-off-by: Patrice Chalin <pchalin@gmail.com>
2025-06-06 10:38:05 -04:00
Patrice Chalin 1b39d03173
Page reorg of remaining v1 (#931) 2025-06-06 09:11:58 -04:00
Patrice Chalin 236bb7eee9
Refactor Download page layout and redirect (#930)
- Contributes to:
  - #929
  - #746
- Encodes `/doc/download` as a Download-page specific alias
- Includes some cleanup of other layouts, so that HTML page titles are
formatted more uniformly

**Preview**:

- https://deploy-preview-930--jaegertracing.netlify.app/download/
- Compare with: https://www.jaegertracing.io/download/

Site diff:

```console
$ (cd public && git diff -bw --ignore-blank-lines -I "title>|Jaeger &ndash;|build-timestamp") | grep -Ev '\.(css|xml|map)' | grep ^diff
diff --git a/_redirects b/_redirects
diff --git a/download/index.html b/download/index.html
```

---------

Signed-off-by: Patrice Chalin <pchalin@gmail.com>
2025-06-06 00:08:41 -04:00
Patrice Chalin 5f2bf8e078
Page reorg of remaining v2 (#927)
- Contributes to #913 
- Reorgs 2.0 to 2.5, inclusive
- The reorg is to move child pages into section subfolders.
- Also updates integration test suite now that our reference section
(2.6) has been reorg'd

### Previews

For example, see:

- https://deploy-preview-927--jaegertracing.netlify.app/docs/2.0/
- https://deploy-preview-927--jaegertracing.netlify.app/docs/2.1/
- https://deploy-preview-927--jaegertracing.netlify.app/docs/2.5/

### Redirect tests

- https://deploy-preview-927--jaegertracing.netlify.app/docs/2.2/apis/
--> redirects to architecture/apis/
- https://deploy-preview-927--jaegertracing.netlify.app/docs/2.5/spm/
--> deployment/spm/
-
https://deploy-preview-927--jaegertracing.netlify.app/docs/2.0/sampling/
--> architecture/sampling/

Signed-off-by: Patrice Chalin <pchalin@gmail.com>
2025-06-06 00:05:49 -04:00
Patrice Chalin 260627a8f9
Page reorg of v2 latest and next-release (#926) 2025-06-05 16:29:37 -04:00
Patrice Chalin 839f8e3948
Page reorg of v1 latest and next-release (#924) 2025-06-05 16:16:57 -04:00
Patrice Chalin 5a1b33f4d0
Add partials for redirect support of aliases etc (#923) 2025-06-05 09:52:55 -04:00
Patrice Chalin d8d3c6d346
[Docsy] reorg-docs tool: add support for generation of aliases (#922) 2025-06-05 09:05:26 -04:00
Mend Renovate cf240acb9d
Update dependency @types/node to v22 (#919) 2025-06-04 11:02:27 -04:00
Patrice Chalin 34eb385ac3
Refactor redirects code (#917) 2025-06-04 11:01:43 -04:00
Patrice Chalin ae17f88568
Fix link to site root SDK migration in Troublshooting, and more (#916) 2025-06-04 10:13:40 -04:00
Patrice Chalin aca909392b
More layout adjustments in prep for docs reorg (#914) 2025-06-03 15:44:36 -04:00
Patrice Chalin 4b358b05c0
Fix doc page front-matter attribute values for Docsy (#912)
- Contributes to #746
- For each page `content/docs/v*/X.Y/_index.md`:
- Set the title to `Docs (X.Y)` as this will be the new landing page in
the Docsy version of the site
  - Add a `linkTitle` and weight appropriate for display in Docsy
- Other weight fixes for the `features.md` and `getting-started.md`
pages. This doesn't affect the current version of the site, but puts the
pages in the right order when using Docsy
- The current generated site files will be the same, except for the
title of the landing page for each doc version X.Y. It will not read
"Docs (X.Y)", though the Docs dropdown menu will still use
"Introduction"


Only the timestamp differs when we ignore the title changes:

```console
$ (cd public && git diff -bw --ignore-blank-lines -I "(Introduction|Docs( \(.*?\))?)(</.>|\")" ':(exclude)*.xml') | grep ^diff
diff --git a/index.html b/index.html
```

### Screenshots

Pre-docsy site:

> <img width="888" alt="image"
src="https://github.com/user-attachments/assets/24e76d87-5654-46d9-abd0-f39f6dc020fe"
/>

---------

Signed-off-by: Patrice Chalin <pchalin@gmail.com>
2025-06-02 18:36:37 -04:00
Patrice Chalin 1b8318ace0
Organize doc pages per major version without affecting site gen (#909)
- Prep for #746 so that in the Docsy site, doc pages are naturally
organized by version

> [!NOTE] 
> The **generated site files are _essentially_ not affected** by this
PR, other than the `index.json` page for which whitespace cleanup was
done.

- **Creates** folders `content/docs/v{1,2}`
- **Moves all** `content/docs/{1.*,next-release}` to the new `v1`
folder, and similarly for `v2`
- **Renames** `next-release*` to `_dev`
- Adds `weight` and `linkTitle` fields to v2 `_index.md` pages so that
versions appear in the right order in Docsy
- Cleans up the excess whitespace in the `index.json` layout
- Adds mount points so that the generated site files are NOT affected by
the source-page relocation
- Adds a `<meta name="build-timestamp">` to the generated homepage.
- Adjusts call to `hugo` in the Makefile so that they use the full
config, now split across two files

> [!IMPORTANT]
> This PR **does not** change any **release scripts or instructions**,
although this PR will have an impact on those. It should be too
complicated to rework the scripts.

---

Generated site file diffs:

```console
$ (cd public && git diff -bw --ignore-blank-lines ':(exclude)*.xml') | grep ^diff      
diff --git a/index.html b/index.html
diff --git a/index.json b/index.json
```

The `index.html` file only has an extra build timestamp. The
`index.json` has whitespace cleaned up. The content is the same as
before except that the 2.6 page entry now appear before 1.69.

---------

Signed-off-by: Patrice Chalin <pchalin@gmail.com>
2025-06-02 13:32:36 -04:00
Patrice Chalin 56a1806301
Config refactoring, and more navbar cleanup (#908) 2025-06-02 09:20:02 -04:00
Patrice Chalin 2f3b661aa9
Ensure all links have trailing slashes (v1 docs) (#907)
- Followup to #906, of adding trailing slashes where necessary, but for
v1 docs

Signed-off-by: Patrice Chalin <pchalin@gmail.com>
2025-06-01 23:28:41 -03:00
Patrice Chalin 02a5cc267f
Make full link checking the default, including external links (#906)
- Contributes to some cleanup / simplification done in the context of
#889
- Makes full link checking (via `check-links` or `check:links`) the
default
- Adds trailing slashes to all path references so that we can drop the
`IgnoreDirectoryMissingTrailingSlash` setting

Signed-off-by: Patrice Chalin <pchalin@gmail.com>
2025-06-01 23:08:10 -03:00
Patrice Chalin 13635684c6
Update ci-test.yml: drop unnecessary `with: submodules` (#905)
- Addresses
https://github.com/jaegertracing/documentation/pull/903#discussion_r2119752555

Signed-off-by: Patrice Chalin <pchalin@gmail.com>
2025-06-02 00:16:12 +00:00
Patrice Chalin 744c28c4e0
[cleanup] Drop 1.x draft and empty pages (#904)
- Fixes #902
- Contributes to prep for #746

Signed-off-by: Patrice Chalin <pchalin@gmail.com>
2025-06-01 21:15:07 -03:00
Patrice Chalin 3fa5ff6921
Add Docsy as NPM package, consolidate all NPM packages, refactor & tweak spell check scripts (#903)
- Contributes to #746
- Note that this adds Docsy as an NPM module, but does not engage the
Docsy-based site build in production or preview.
- @yurishkuro - I'll want to submit as many changes to `main` as
possible, provided they don't impact the production build, as is the
case for this PR. I'll limit / confine breaking changes to the `docsy`
branch

### Cleanup & consolidation

- **Generated site files are _not_ changed**, except for
`css/style.css.map` (see below), due to path changes to reach
`bulma`-module Sass includes. This is just a `.map` file, it doesn't
affect rendering.
- Consolidates NPM packages, by creating a single `./package.json` file
for `themes/jaeger-docs` and spellcheck required packages
- Deletes archived `node_modules` and lock files; marks them as
git-ignored

### Initial Docsy config

- Adds Docsy as an NPM package. 
- Adds NPM scripts useful to build and test both the Bulma and Docsy
versions of the site.
- Does not change the existing CI scripts, except to rework
spell-checking is done.
- Creates a new `.cspell.yml`, incorporating the .json file config. Adds
some extra useful config
  - Moves local word lists into `./.cspell`

### Generated file diffs

```console
$ (cd public && git diff -bw --ignore-blank-lines) | grep ^diff        
diff --git a/css/style.css.map b/css/style.css.map
$ (cd public && git diff -bw --ignore-blank-lines) | head 
...
```
```diff
diff --git a/css/style.css.map b/css/style.css.map
index 87cc0bf9..1a077da1 100644
--- a/css/style.css.map
+++ b/css/style.css.map
@@ -4,91 +4,91 @@
        "sourceRoot": "/Users/chalin/git/lf/jaegertracing.io",
        "sources": [
                "themes/jaeger-docs/assets/sass/style.sass",
-               "themes/jaeger-docs/node_modules/bulma/sass/utilities/initial-variables.sass",
-               "themes/jaeger-docs/node_modules/bulma/sass/utilities/functions.sass",
+               "node_modules/bulma/sass/utilities/initial-variables.sass",
+               "node_modules/bulma/sass/utilities/functions.sass",
                "themes/jaeger-docs/assets/sass/variables.sass",
...
```

---------

Signed-off-by: Patrice Chalin <pchalin@gmail.com>
Signed-off-by: Patrice Chalin <chalin@users.noreply.github.com>
Co-authored-by: Yuri Shkuro <yurishkuro@users.noreply.github.com>
2025-06-01 21:04:03 -03:00
Patrice Chalin 08412ebd50
Navbar partial whitespace cleanup (#901)
- Contributes to #746
- There are **no change to the generated production (i.e., minified)
site files**
- Trims superfluous whitespace from
`themes/jaeger-docs/layouts/partials/navbar.html`. This partial iterates
over all docs, and for each iteration adds whitespace to the navbar.
This creates files with _a lot_ of unnecessary blank lines, which makes
it all the more challenging to diff the site-file changes necessary in
preparation for the Docsy migration.
- In most cases, a Hugo template code statement ending in `}}` is
replaced by `-}}`; a directive that will trim the excess whitespace
following the directive when the page is generated.

Signed-off-by: Patrice Chalin <pchalin@gmail.com>
2025-06-01 18:11:11 -03:00
Yuri Shkuro 42e8127cb7
Add openpgp to dictionary (#899)
Signed-off-by: Yuri Shkuro <github@ysh.us>
2025-06-01 15:03:04 -03:00
Yuri Shkuro b43f6bb6b2 Update key server to keys.openpgp.org
Signed-off-by: Yuri Shkuro <github@ysh.us>
2025-06-01 13:58:33 -04:00
Patrice Chalin ead537303d
Fix project title etc in Hugo config (#896)
- Fixes site title so that it matches how it is used by Docsy
- Contributes to #746
- Makes other adjustments to `hugo.yaml` in prep for migration to Docsy
- Adjusts a few layouts so that **generated site files are** essentially
**the same**, except for `og:site` (now only Jaeger), as demonstrated by
this site diff:
  ```console
$ (cd public && git diff -bw --ignore-blank-lines) | grep ^diff | wc -l
      1548
$ (cd public && git diff -bw --ignore-blank-lines -I "og:site" -I "const
version = (\"\"| null )" -- ':(exclude)*.xml' ') | wc -l
       0
  ```

Signed-off-by: Patrice Chalin <pchalin@gmail.com>
2025-06-01 14:37:07 -03:00
Patrice Chalin c15a5245c7
Update to Hugo v0.147.6, adjust theme css integrity (#895)
- Prep for #746
- Updates Hugo to v0.147.6 (in both files)
- Adjusts `themes/jaeger-docs/layouts/partials/css.html` so that we
fingerprint the main `styles.css` file only in production

Signed-off-by: Patrice Chalin <pchalin@gmail.com>
2025-06-01 13:05:55 -03:00
Patrice Chalin 6427455fee
Hugo.yaml cleanup: drop unused navbar param (#894)
- Cleans up `hugo.yaml`.
- Mainly drops unused params config `navbar`

No change to the generated site files (neither for a dev nor a
production build):

```console
$ make netlify-production-build
hugo --minify
...
Total in 13219 ms
$ (cd public && git diff)             
$ 
```

Signed-off-by: Patrice Chalin <pchalin@gmail.com>
2025-05-31 16:01:21 -03:00
Patrice Chalin 952ea6d7ea
Fix link into Apache archive (#893)
- Contributes to #889
- Adjusts link to
`spark.apache.org/docs/2.4.4/hardware-provisioning.html#memory`; the
page has been moved to an archive server

Signed-off-by: Patrice Chalin <pchalin@gmail.com>
2025-05-31 13:43:09 -03:00
Patrice Chalin 20148ef3f1
Fix page cross-version links, drop canonifyURLs, and more (#891)
- Contributes to #889
- Resolves invalid links of the form
`https://www.jaegertracing.io/docs/2.6/(cli|operator)/`
- Fixes `themes/jaeger-docs/layouts/partials/docs/header.html` so that
it doesn't create invalid cross-version links
- Drops the now deprecated
[canonifyURLs](https://gohugo.io/content-management/urls/#canonical-urls)
Hugo config option, since it unnecessarily creates external links to
intra-site targets, that should be encoded as simple paths
- Fixes other misc links and hash targets
- Adjusts some layouts so that local paths are used for intra-site
links. When a full URL is required, we've added `data-proofer-ignore` so
that the link checker doesn't need to be bothered with it.

---------

Signed-off-by: Patrice Chalin <pchalin@gmail.com>
2025-05-31 13:25:05 -03:00
Patrice Chalin fe15d425fe
Replace / resolve any references to jaeger.readthedocs.io, enable full link checking (#890)
## Which problem is this PR solving?

- #889

## Description of the changes

- Replaces the URL in `"url": "http://jaeger.readthedocs.io/en/latest/"`
config excerpts by use of `https://www.jaegertracing.io/docs/latest/`
- Drops in-prose links to jaeger.readthedocs.io. This only happens in
the first news entry of 2017
- Adds temporary URL ignore rules as work on #889 progresses
incrementally
- Enables **full link checking** of the new versions of the docs via
GitHub checks
- Full link checking takes 3.8 sec in this run:
https://github.com/jaegertracing/documentation/actions/runs/15358190795/job/43221310998?pr=890.
See the screenshot below.
- Tweaks `clean` make target to delete the _content_ of `public`. This
allows us to make `public` a local git repo so that we can track changes
to generated site files.
- Changes best [reviewed by **ignoring whitespace**
diffs](https://github.com/jaegertracing/documentation/pull/890/files?diff=unified&w=1)

## How was this change tested?

- GitHub ci-test workflow

## Checklist
- [x] I have read
https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md
- [x] I have signed all commits
- [x] I have added ~unit~ tests for the new functionality
- [x] N/A ~I have run lint and test steps successfully~

---

Full link checking of the new versions of the docs in 3.8 sec:

> <img width="469" alt="image"
src="https://github.com/user-attachments/assets/b4881aac-5c99-4247-a0c9-9bda7e86e404"
/>

Signed-off-by: Patrice Chalin <pchalin@gmail.com>
2025-05-31 11:08:02 -03:00
Patrice Chalin 2967775a44
Fix external links, and prep to re-enable external link checkcing (#888)
- Contributes to #671
- Improves config for external link checking
- Adjusts `check-links-external` to copy and then update the htmltest
`refcache.json` file
- Rewrites external intra-site links more simply as (local) paths
- Fixes some 404s
- Replaces a couple of https://thenewstack.io links with equivalent
https://web.archive.org links because it seems that that site drops
posts 🤷🏼‍♂️
- For the remaining 404s, see #889
- Drops unused HTMLPROOFER make variable

---------

Signed-off-by: Patrice Chalin <pchalin@gmail.com>
2025-05-30 09:59:11 -04:00
Patrice Chalin 941b99a445
Drop obsolete GA UA ID from Hugo config (#887)
Contributes to:

- #886

Signed-off-by: Patrice Chalin <chalin@users.noreply.github.com>
2025-05-28 20:11:07 -04:00
Yuri Shkuro 9059411246 Add emphasis
Signed-off-by: Yuri Shkuro <github@ysh.us>
2025-05-24 12:39:10 -04:00
Yuri Shkuro 48486c4f82 Update roadmap
Signed-off-by: Yuri Shkuro <github@ysh.us>
2025-05-21 19:14:43 -04:00
Abhay Porwal 726bfdf1ad
Document traceIdDisplayLength option (#885)
Fixes jaegertracing/jaeger-ui#2092

----

![image](https://github.com/user-attachments/assets/74e04d90-df8c-44ba-96c6-f4f1df0f288c)

![image](https://github.com/user-attachments/assets/6394718c-ab06-4d3a-a2ee-25a4b45c8fee)

Signed-off-by: Abhay Kumar Gupta <abhayakg123@gmail.com>
2025-05-21 18:41:30 -04:00
Yuri Shkuro f5e43aa925
Update roadmap (#883)
Signed-off-by: Yuri Shkuro <github@ysh.us>
2025-05-20 11:20:08 -04:00
Yuri Shkuro e08677ca40
Add blog post (#882)
Signed-off-by: Yuri Shkuro <github@ysh.us>
2025-05-19 20:58:48 -04:00
Abhay Porwal 6702472974
Fetch Medium feed manually (#881)
Fixes #855 

### Summary

Fix repeated Medium RSS fetches during `make develop` and shift to a
static, manually-controlled approach.

### Problem

Previously, the Jaeger documentation site **re-downloaded the Medium RSS
feed on every rebuild**, even in development mode. This meant:

- Every file save triggered a network request to Medium.
- Local development became slow and noisy due to repeated warnings.
- Any Medium API issues (like rate limits or downtime) could break the
build.

Example:
```
Change detected, rebuilding site...
WARN Downloaded RSS feed for: JaegerTracing - Medium
```

This happened **every single time**, slowing dev feedback loops
unnecessarily.

### Solution

We've moved to a **static fetch approach**, committing the feed manually
only when needed:

#### Manual Feed Fetching
Added a new Makefile step:
```makefile
fetch-blog-feed:
	curl -s https://medium.com/feed/jaegertracing | yq -p xml -o json -P > data/medium.json
```
---

> No more dev slowdowns

---------

Signed-off-by: Abhay <abhayakg123@gmail.com.com>
Co-authored-by: Abhay <abhayakg123@gmail.com.com>
2025-05-18 15:31:21 -03:00
Mahad Zaryab 1f904bf0e2
Backport gRPC documentation to v2.6 (#880)
## Description of the changes
- Backports the new gRPC documentation to v2.6.0 since most of the
changes were in that release

Signed-off-by: Mahad Zaryab <mahadzaryab1@gmail.com>
2025-05-16 18:08:30 -04:00
Mahad Zaryab 875a2975f4
Update remote storage API references (#878) 2025-05-14 19:41:55 -04:00
Jonah Kowall 5aad41992b
Fixing v2 hotrod directions (#879)
## Description of the changes
Fixing docs to match the current state

## How was this change tested?
Tested in local env

## Checklist
- [X] I have read
https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md
- [X] I have signed all commits
- [X] I have added unit tests for the new functionality
- [X] I have run lint and test steps successfully
  - for `jaeger`: `make lint test`
  - for `jaeger-ui`: `npm run lint` and `npm run test`

Signed-off-by: Jonah Kowall <jkowall@kowall.net>
2025-05-13 19:11:23 -04:00
pipiland 9cc4fd42ee
Add gsoc 2025 member to mentorship.md (#877) 2025-05-10 08:27:41 -04:00
github-actions[bot] 4b83aff91b
Release 2.6.0/1.69.0 (#876)
Release 2.6.0/1.69.0. This PR is created from CI and is part of the
release process.

---------

Signed-off-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
Signed-off-by: Yuri Shkuro <github@ysh.us>
Co-authored-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
Co-authored-by: Yuri Shkuro <github@ysh.us>
2025-05-09 20:01:28 -04:00
Jonah Kowall 0d98bc772d
Add upgrade directions in FAQ (#809)
## Which problem is this PR solving?
Resolves part of #117 

## Description of the changes
Add to FAQ

## How was this change tested?
make develop

## Checklist
- [X] I have read
https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md
- [X] I have signed all commits

---------

Signed-off-by: Jonah Kowall <jkowall@kowall.net>
Signed-off-by: Yuri Shkuro <github@ysh.us>
Co-authored-by: Yuri Shkuro <github@ysh.us>
2025-05-09 19:45:05 -04:00
Mend Renovate e362787075
chore(deps): update actions/setup-go action to v5.5.0 (#875) 2025-05-08 09:15:14 -04:00
Mend Renovate 4cafa35b1e
fix(deps): update dependency cspell to v9 (#874)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [cspell](https://cspell.org/)
([source](https://redirect.github.com/streetsidesoftware/cspell/tree/HEAD/packages/cspell))
| [`^8.6.1` ->
`^9.0.0`](https://renovatebot.com/diffs/npm/cspell/8.19.1/9.0.0) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/cspell/9.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/cspell/9.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/cspell/8.19.1/9.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/cspell/8.19.1/9.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>streetsidesoftware/cspell (cspell)</summary>

###
[`v9.0.0`](https://redirect.github.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#900-2025-05-05)

[Compare
Source](https://redirect.github.com/streetsidesoftware/cspell/compare/v8.19.4...v9.0.0)

**Note:** Version bump only for package cspell

###
[`v8.19.4`](https://redirect.github.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#8194-2025-05-03)

[Compare
Source](https://redirect.github.com/streetsidesoftware/cspell/compare/v8.19.3...v8.19.4)

**Note:** Version bump only for package cspell

###
[`v8.19.3`](https://redirect.github.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#8193-2025-04-27)

[Compare
Source](https://redirect.github.com/streetsidesoftware/cspell/compare/v8.19.2...v8.19.3)

**Note:** Version bump only for package cspell

###
[`v8.19.2`](https://redirect.github.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#8192-2025-04-20)

[Compare
Source](https://redirect.github.com/streetsidesoftware/cspell/compare/v8.19.1...v8.19.2)

**Note:** Version bump only for package cspell

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/jaegertracing/documentation).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yNjQuMCIsInVwZGF0ZWRJblZlciI6IjM5LjI2NC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJjaGFuZ2Vsb2c6ZGVwZW5kZW5jaWVzIl19-->

Signed-off-by: Mend Renovate <bot@renovateapp.com>
2025-05-05 09:01:23 -04:00
Yuri Shkuro a3020c4704
Add LFX'25 Term 1 mentees (#873)
Signed-off-by: Yuri Shkuro <github@ysh.us>
2025-05-04 01:11:45 -03:00
Yuri Shkuro 501c53c075
Add Filter Processor and pprof extension (#872)
## Description of the changes
- Mention recently added pprof extension and Filter Processor

---------

Signed-off-by: Yuri Shkuro <github@ysh.us>
2025-05-03 13:15:00 -04:00
Yuri Shkuro e8c7d0e02b
Add references to configs (#871)
## Which problem is this PR solving?
- Resolves https://github.com/jaegertracing/jaeger/issues/6683
- Closes #870

Signed-off-by: Yuri Shkuro <github@ysh.us>
2025-05-03 12:32:30 -04:00
Yuri Shkuro 030fafba74 Fix base_path config example
Part of https://github.com/jaegertracing/jaeger/issues/7074

Signed-off-by: Yuri Shkuro <github@ysh.us>
2025-04-26 11:32:54 -04:00
Yuri Shkuro 9a4bb74023
Update elasticsearch config link (#869)
## Which problem is this PR solving?
- Extends and closes #868

---------

Signed-off-by: Grzegorz Brzeczek <grzegorzbrzeczek1@proton.me>
Signed-off-by: Yuri Shkuro <github@ysh.us>
Co-authored-by: Grzegorz Brzeczek <grzegorzbrzeczek1@proton.me>
2025-04-22 18:05:21 -04:00
Aqvenor a8321e9272
Make right sidebar taller (#829)
<!--
!! Please DELETE this comment before posting.
We appreciate your contribution to the Jaeger project! 👋🎉
-->

## Which problem is this PR solving?
- Resolves #744 

## Description of the changes
- Fix Right Sidebar,made it **extend through the suitable
space**.....provided room for the content **to expand in width as well**
  
  
![Screenshot 2025-01-10
045445](https://github.com/user-attachments/assets/909ab820-0e8b-4a2f-8baf-2a6570c0bfae)
****

## How was this change tested?
- Locally tested with `make develop`

## Checklist
- [x] I have read
https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md
- [x] I have signed all commits
- [ ] I have added unit tests for the new functionality
- [ ] I have run lint and test steps successfully
  - for `jaeger`: `make lint test`
  - for `jaeger-ui`: `npm run lint` and `npm run test`

---------

Signed-off-by: sudesh satpute <sudeshsatpute0@gmail.com>
Signed-off-by: Yuri Shkuro <github@ysh.us>
Co-authored-by: Yuri Shkuro <github@ysh.us>
2025-04-18 17:40:39 -04:00
pipiland 0f4dc8c4d8
Add documentation for No-op receivers and exporters (#864)
## Which problem is this PR solving?
- part of https://github.com/jaegertracing/jaeger/issues/6683

## Description of the changes
- Update documentation website for no-operation receivers and exporters
(OpenTelemetry Components)

## How was this change tested?
- 

## Checklist
- [x] I have read
https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md
- [x] I have signed all commits
- [x] I have added unit tests for the new functionality
- [x] I have run lint and test steps successfully
  - for `jaeger`: `make lint test`
  - for `jaeger-ui`: `npm run lint` and `npm run test`

---------

Signed-off-by: pipiland <nguyen.t.dang.minh@gmail.com>
Signed-off-by: Yuri Shkuro <github@ysh.us>
Co-authored-by: Yuri Shkuro <github@ysh.us>
2025-04-18 17:23:39 -04:00
Mend Renovate 0a07d62f81
fix(deps): update dependency cspell to v8.19.1 (#867)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [cspell](https://cspell.org/)
([source](https://redirect.github.com/streetsidesoftware/cspell/tree/HEAD/packages/cspell))
| [`8.19.0` ->
`8.19.1`](https://renovatebot.com/diffs/npm/cspell/8.19.0/8.19.1) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/cspell/8.19.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/cspell/8.19.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/cspell/8.19.0/8.19.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/cspell/8.19.0/8.19.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>streetsidesoftware/cspell (cspell)</summary>

###
[`v8.19.1`](https://redirect.github.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#8191-2025-04-18)

[Compare
Source](https://redirect.github.com/streetsidesoftware/cspell/compare/v8.19.0...v8.19.1)

**Note:** Version bump only for package cspell

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/jaegertracing/documentation).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yNDguNCIsInVwZGF0ZWRJblZlciI6IjM5LjI0OC40IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJjaGFuZ2Vsb2c6ZGVwZW5kZW5jaWVzIl19-->

Signed-off-by: Mend Renovate <bot@renovateapp.com>
2025-04-18 17:05:00 -04:00
Yuri Shkuro 496a030b8a Disable Renovate updates for patches
Signed-off-by: Yuri Shkuro <github@ysh.us>
2025-04-18 17:04:44 -04:00
Mend Renovate fe1ef1b0f5
fix(deps): update dependency cspell to v8.19.0 (#866) 2025-04-16 20:48:28 -03:00
github-actions[bot] a1ce17bfb0
Release 2.5.0/1.68.0 (#865)
Release 2.5.0/1.68.0. This PR is created from CI and is part of the
release process.

Signed-off-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
Co-authored-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
2025-04-06 22:26:25 +10:00
Mend Renovate 1f0998b3eb
fix(deps): update dependency cspell to v8.18.1 (#863) 2025-03-29 09:45:03 -03:00
Mend Renovate a845e680db
fix(deps): update dependency cspell to v8.18.0 (#862)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [cspell](https://cspell.org/)
([source](https://redirect.github.com/streetsidesoftware/cspell/tree/HEAD/packages/cspell))
| [`8.17.5` ->
`8.18.0`](https://renovatebot.com/diffs/npm/cspell/8.17.5/8.18.0) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/cspell/8.18.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/cspell/8.18.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/cspell/8.17.5/8.18.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/cspell/8.17.5/8.18.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>streetsidesoftware/cspell (cspell)</summary>

###
[`v8.18.0`](https://redirect.github.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#8180-2025-03-26)

[Compare
Source](https://redirect.github.com/streetsidesoftware/cspell/compare/v8.17.5...v8.18.0)

- ci: Workflow Bot -- Update ALL Dependencies (main)
([#&#8203;7080](https://redirect.github.com/streetsidesoftware/cspell/issues/7080))
([b9d57a1](https://redirect.github.com/streetsidesoftware/cspell/commit/b9d57a1)),
closes
[#&#8203;7080](https://redirect.github.com/streetsidesoftware/cspell/issues/7080)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/jaegertracing/documentation).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yMDcuMSIsInVwZGF0ZWRJblZlciI6IjM5LjIwNy4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJjaGFuZ2Vsb2c6ZGVwZW5kZW5jaWVzIl19-->

Signed-off-by: Mend Renovate <bot@renovateapp.com>
2025-03-26 12:21:58 -04:00
Yuri Shkuro ff06500df2
Fix incorrect config option name (#861)
Resolves https://github.com/jaegertracing/jaeger/issues/6929

Signed-off-by: Yuri Shkuro <github@ysh.us>
2025-03-24 18:23:01 -04:00
Mend Renovate e1cd72660e
chore(deps): update actions/setup-go action to v5.4.0 (#860) 2025-03-19 08:47:35 -03:00
Mend Renovate ddd01751cc
chore(deps): update dependency go to 1.24.x (#858)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [go](https://redirect.github.com/actions/go-versions) | uses-with |
minor | `1.23.x` -> `1.24.x` |

---

### Release Notes

<details>
<summary>actions/go-versions (go)</summary>

###
[`v1.24.1`](https://redirect.github.com/actions/go-versions/releases/tag/1.24.1-13667719799):
1.24.1

[Compare
Source](https://redirect.github.com/actions/go-versions/compare/1.24.0-13277276272...1.24.1-13667719799)

Go 1.24.1

###
[`v1.24.0`](https://redirect.github.com/actions/go-versions/releases/tag/1.24.0-13277276272):
1.24.0

[Compare
Source](https://redirect.github.com/actions/go-versions/compare/1.23.7-13667722349...1.24.0-13277276272)

Go 1.24.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/jaegertracing/documentation).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xOTQuMSIsInVwZGF0ZWRJblZlciI6IjM5LjE5NC4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJjaGFuZ2Vsb2c6ZGVwZW5kZW5jaWVzIl19-->

Signed-off-by: Mend Renovate <bot@renovateapp.com>
2025-03-11 13:39:00 -04:00
github-actions[bot] 8fe5a47de7
Release 2.4.0/1.67.0 (#857)
Release 2.4.0/1.67.0. This PR is created from CI and is part of the
release process.

Signed-off-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
Co-authored-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
2025-03-08 07:39:08 +00:00
Yuri Shkuro 483dc1018f Remove spaces
Signed-off-by: Yuri Shkuro <github@ysh.us>
2025-03-08 02:37:33 -05:00
Yuri Shkuro 506afcec77
Explain use of environment variables (#854)
## Which problem is this PR solving?
-
https://github.com/orgs/jaegertracing/discussions/6778#discussioncomment-12340772

Signed-off-by: Yuri Shkuro <github@ysh.us>
2025-02-27 11:02:21 -05:00
Anmol a1df2985cf
Upgrade Hugo version to v0.143.1 (#851)
Resolves #850 

## Description of the changes
- added try functionality as new version of hugo

## How was this change tested?
- 

## Checklist
- [x] I have read
https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md
- [x] I have signed all commits
- [ ] I have added unit tests for the new functionality
- [ ] I have run lint and test steps successfully
  - for `jaeger`: `make lint test`
  - for `jaeger-ui`: `npm run lint` and `npm run test`

---------

Signed-off-by: AnmolxSingh <anmol7344@gmail.com>
Signed-off-by: Yuri Shkuro <yurishkuro@users.noreply.github.com>
Co-authored-by: Yuri Shkuro <yurishkuro@users.noreply.github.com>
2025-02-25 14:18:50 +00:00
Mahad Zaryab 57ed087590
[fix] Fix broken references in documentation and add missed versioning (#853)
## Which problem is this PR solving?
- Resolves https://github.com/jaegertracing/jaeger/issues/6760

## Description of the changes
- Run the script from #842
(https://github.com/jaegertracing/documentation/pull/842#issuecomment-2646381995)
w the following
```bash
find "$dir" -type f -exec sed -i '' "s|https://github.com/jaegertracing/jaeger/blob/main|https://github.com/jaegertracing/jaeger/blob/${versionTag}|g" {} \;
find "$dir" -type f -exec sed -i '' "s|https://github.com/jaegertracing/jaeger/blob/master|https://github.com/jaegertracing/jaeger/blob/${versionTag}|g" {} \;
find "$dir" -type f -exec sed -i '' "s|https://github.com/jaegertracing/jaeger/tree/master|https://github.com/jaegertracing/jaeger/tree/${versionTag}|g" {} \;
```
- Find and replace remaining instances of `jaeger/blob/master` ->
`jaeger/blob/main` and `jaeger/tree/master` -> `jaeger/tree/main`
- Update the release script to also change `jaeger/blob/main` ->
`jaeger/blob/${versionTag}`

## Checklist
- [x] I have read
https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md
- [x] I have signed all commits

---------

Signed-off-by: Mahad Zaryab <mahadzaryab1@gmail.com>
2025-02-22 20:49:16 -04:00
Mend Renovate 96f77eb7b7
fix(deps): update dependency cspell to v8.17.5 (#852)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [cspell](https://cspell.org/)
([source](https://redirect.github.com/streetsidesoftware/cspell/tree/HEAD/packages/cspell))
| [`8.17.4` ->
`8.17.5`](https://renovatebot.com/diffs/npm/cspell/8.17.4/8.17.5) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/cspell/8.17.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/cspell/8.17.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/cspell/8.17.4/8.17.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/cspell/8.17.4/8.17.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>streetsidesoftware/cspell (cspell)</summary>

###
[`v8.17.5`](https://redirect.github.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#small8175-2025-02-22-small)

[Compare
Source](https://redirect.github.com/streetsidesoftware/cspell/compare/v8.17.4...v8.17.5)

- fix: Workflow Bot -- Update Dictionaries (main)
([#&#8203;6937](https://redirect.github.com/streetsidesoftware/cspell/issues/6937))
([2bfee05](https://redirect.github.com/streetsidesoftware/cspell/commit/2bfee05)),
closes
[#&#8203;6937](https://redirect.github.com/streetsidesoftware/cspell/issues/6937)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/jaegertracing/documentation).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNzYuMiIsInVwZGF0ZWRJblZlciI6IjM5LjE3Ni4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJjaGFuZ2Vsb2c6ZGVwZW5kZW5jaWVzIl19-->

Signed-off-by: Mend Renovate <bot@renovateapp.com>
2025-02-22 17:11:18 -05:00
Yuri Shkuro b67c3286c2
Fix Kafka diagram (#849)
## Which problem is this PR solving?
- Resolves #848

## Description of the changes
- Change box caption to Ingester ROle

## How was this change tested?
- preview

Signed-off-by: Yuri Shkuro <github@ysh.us>
2025-02-21 08:55:10 -05:00
Mend Renovate 047356abea
fix(deps): update dependency cspell to v8.17.4 (#847)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [cspell](https://cspell.org/)
([source](https://redirect.github.com/streetsidesoftware/cspell/tree/HEAD/packages/cspell))
| [`8.17.3` ->
`8.17.4`](https://renovatebot.com/diffs/npm/cspell/8.17.3/8.17.4) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/cspell/8.17.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/cspell/8.17.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/cspell/8.17.3/8.17.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/cspell/8.17.3/8.17.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>streetsidesoftware/cspell (cspell)</summary>

###
[`v8.17.4`](https://redirect.github.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#small8174-2025-02-19-small)

[Compare
Source](https://redirect.github.com/streetsidesoftware/cspell/compare/v8.17.3...v8.17.4)

- ci: Workflow Bot -- Update ALL Dependencies (main)
([#&#8203;6920](https://redirect.github.com/streetsidesoftware/cspell/issues/6920))
([e92597c](https://redirect.github.com/streetsidesoftware/cspell/commit/e92597c)),
closes
[#&#8203;6920](https://redirect.github.com/streetsidesoftware/cspell/issues/6920)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/jaegertracing/documentation).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNzMuMSIsInVwZGF0ZWRJblZlciI6IjM5LjE3My4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJjaGFuZ2Vsb2c6ZGVwZW5kZW5jaWVzIl19-->

Signed-off-by: Mend Renovate <bot@renovateapp.com>
2025-02-19 19:24:47 -04:00
Yuri Shkuro c58ff3c304
Update v2 Kubernetes docs (#846)
## Description of the changes
- Instead of linking to issues link to READMEs of what's already
available

Signed-off-by: Yuri Shkuro <github@ysh.us>
2025-02-16 09:02:02 -04:00
Aditya Ruhela e96dea1983
Add markers to docs for checklist (#845)
## Which problem is this PR solving?
- Resolves #844 
- Part of https://github.com/jaegertracing/jaeger/issues/6688

## Description of the changes
- 

## How was this change tested?
- 

## Checklist
- [ ] I have read
https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md
- [ ] I have signed all commits
- [ ] I have added unit tests for the new functionality
- [ ] I have run lint and test steps successfully
  - for `jaeger`: `make lint test`
  - for `jaeger-ui`: `npm run lint` and `npm run test`

---------

Signed-off-by: cs-308-2023 <adityaruhela2003@gmail.com>
2025-02-14 17:48:37 +00:00
Mahad Zaryab 57b1ed769f
[chore] Fix references to `plugin/storage` (#840)
## Which problem is this PR solving?
- Resolves #837

## Description of the changes
- Fixes references to old package locations from `plugin/storage` to
`internal/storage/v1`

## Checklist
- [x] I have read
https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md
- [x] I have signed all commits

---------

Signed-off-by: Mahad Zaryab <mahadzaryab1@gmail.com>
2025-02-09 12:02:46 -04:00
Mahad Zaryab dda5852ddb
[release] Add step to release script for pinning links by jaeger version (#841)
## Which problem is this PR solving?
- Addresses
https://github.com/jaegertracing/documentation/pull/840#pullrequestreview-2603959962

## Description of the changes
- Added a step to the release script to replace all instances of
`https://github.com/jaegertracing/jaeger/tree/main` in `next-release/`
and `next-release-v2/` with
`https://github.com/jaegertracing/jaeger/tree/{version}`

## How was this change tested?
- Ran the same sed command when performing the backfill in
https://github.com/jaegertracing/documentation/pull/842

## Checklist
- [x] I have read
https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md
- [x] I have signed all commits

---------

Signed-off-by: Mahad Zaryab <mahadzaryab1@gmail.com>
2025-02-09 11:58:00 -04:00
Mahad Zaryab fb064fac2c
[chore] Pin jaeger links to corresponding jaeger version (#842)
## Which problem is this PR solving?
- Addresses
https://github.com/jaegertracing/documentation/pull/840#pullrequestreview-2603959962

## Description of the changes
- Wrote a short script and ran it to replace all instances of
`https://github.com/jaegertracing/jaeger/tree/main` with
`https://github.com/jaegertracing/jaeger/tree/{version}` so that
documentation links never go stale.

## How was this change tested?
- Manually checked the links to ensure they are reachable

## Checklist
- [x] I have read
https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md
- [x] I have signed all commits

Signed-off-by: Mahad Zaryab <mahadzaryab1@gmail.com>
2025-02-09 11:56:58 -04:00
github-actions[bot] 49d8f04ffe
Release 2.3.0/1.66.0 (#839)
Release 2.3.0/1.66.0. This PR is created from CI and is part of the
release process.

Signed-off-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
Co-authored-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
2025-02-06 18:40:51 -05:00
Yuri Shkuro b70af0a1ce
Add a level playing field guideline (#838)
Signed-off-by: Yuri Shkuro <github@ysh.us>
2025-02-02 18:56:36 -04:00
Jonah Kowall efde64553f
Add section for thanking sponsors to homepage (#834)
## Which problem is this PR solving?
Continues : https://github.com/jaegertracing/jaeger/issues/6577

## Description of the changes
Add section to homepage and add text to section thanking our sponsors. 

## How was this change tested?
make spellcheck
make develop
Test page


## Checklist
- [X] I have read
https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md
- [X] I have signed all commits
- [X] I have run lint and test steps successfully

---------

Signed-off-by: Jonah Kowall <jkowall@kowall.net>
Signed-off-by: Yuri Shkuro <yurishkuro@users.noreply.github.com>
Co-authored-by: Yuri Shkuro <yurishkuro@users.noreply.github.com>
2025-01-31 17:22:04 -05:00
Mend Renovate 32c49824fb
fix(deps): update dependency cspell to v8.17.3 (#836) 2025-01-28 10:36:43 -04:00
Yuri Shkuro af008c9934
Add example of passing a config file (#835)
## Which problem is this PR solving?
- https://github.com/orgs/jaegertracing/discussions/6623

Signed-off-by: Yuri Shkuro <github@ysh.us>
2025-01-27 13:30:41 -05:00
Mend Renovate a989b70c27
chore(deps): update actions/setup-go action to v5.3.0 (#833)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [actions/setup-go](https://redirect.github.com/actions/setup-go) |
action | minor | `v5.2.0` -> `v5.3.0` |

---

### Release Notes

<details>
<summary>actions/setup-go (actions/setup-go)</summary>

###
[`v5.3.0`](https://redirect.github.com/actions/setup-go/releases/tag/v5.3.0)

[Compare
Source](https://redirect.github.com/actions/setup-go/compare/v5.2.0...v5.3.0)

##### What's Changed

- Use the new cache service: upgrade `@actions/cache` to `^4.0.0` by
[@&#8203;Link-](https://redirect.github.com/Link-) in
[https://github.com/actions/setup-go/pull/531](https://redirect.github.com/actions/setup-go/pull/531)
- Configure Dependabot settings by
[@&#8203;HarithaVattikuti](https://redirect.github.com/HarithaVattikuti)
in
[https://github.com/actions/setup-go/pull/530](https://redirect.github.com/actions/setup-go/pull/530)
- Document update - permission section by
[@&#8203;HarithaVattikuti](https://redirect.github.com/HarithaVattikuti)
in
[https://github.com/actions/setup-go/pull/533](https://redirect.github.com/actions/setup-go/pull/533)
- Bump actions/publish-immutable-action from 0.0.3 to 0.0.4 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/actions/setup-go/pull/534](https://redirect.github.com/actions/setup-go/pull/534)

##### New Contributors

- [@&#8203;Link-](https://redirect.github.com/Link-) made their first
contribution in
[https://github.com/actions/setup-go/pull/531](https://redirect.github.com/actions/setup-go/pull/531)

**Full Changelog**:
https://github.com/actions/setup-go/compare/v5...v5.3.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/jaegertracing/documentation).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xMDcuMCIsInVwZGF0ZWRJblZlciI6IjM5LjEwNy4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJjaGFuZ2Vsb2c6ZGVwZW5kZW5jaWVzIl19-->

Signed-off-by: Mend Renovate <bot@renovateapp.com>
2025-01-21 01:13:44 -04:00
Mend Renovate 321e5619dc
fix(deps): update dependency cspell to v8.17.2 (#832)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [cspell](https://cspell.org/)
([source](https://redirect.github.com/streetsidesoftware/cspell/tree/HEAD/packages/cspell))
| [`8.17.1` ->
`8.17.2`](https://renovatebot.com/diffs/npm/cspell/8.17.1/8.17.2) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/cspell/8.17.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/cspell/8.17.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/cspell/8.17.1/8.17.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/cspell/8.17.1/8.17.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>streetsidesoftware/cspell (cspell)</summary>

###
[`v8.17.2`](https://redirect.github.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#small8172-2025-01-13-small)

[Compare
Source](https://redirect.github.com/streetsidesoftware/cspell/compare/v8.17.1...v8.17.2)

- fix: Dump stack on error when verbose
([#&#8203;6782](https://redirect.github.com/streetsidesoftware/cspell/issues/6782))
([df0026c](https://redirect.github.com/streetsidesoftware/cspell/commit/df0026c)),
closes
[#&#8203;6782](https://redirect.github.com/streetsidesoftware/cspell/issues/6782)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/jaegertracing/documentation).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xMDcuMCIsInVwZGF0ZWRJblZlciI6IjM5LjEwNy4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJjaGFuZ2Vsb2c6ZGVwZW5kZW5jaWVzIl19-->

Signed-off-by: Mend Renovate <bot@renovateapp.com>
2025-01-14 13:28:12 -05:00
Yuri Shkuro c8b78434a2
Specify admin endpoints (#830)
Signed-off-by: Yuri Shkuro <github@ysh.us>
2025-01-10 16:38:48 -05:00
Mahad Zaryab 7e307a9f32
Release 2.2.0/1.65.0 (#828) 2025-01-08 22:35:53 -04:00
Yuri Shkuro 33b0df9642 Fix config typo
Resolves #827

Signed-off-by: Yuri Shkuro <github@ysh.us>
2025-01-03 17:40:24 -05:00
Yuri Shkuro d4ca50de94
Add v1 EOL notice (#826)
Signed-off-by: Yuri Shkuro <github@ysh.us>
2025-01-02 20:15:43 -04:00
Yuri Shkuro e789e16c71
Fix Badger doc (#825)
Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-12-28 00:33:09 -04:00
Yuri Shkuro aa0cccb391
Improve Badger docs (#824)
Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-12-27 23:31:35 -04:00
Yuri Shkuro 2d5e8299e4
Add diagrams with Kafka (#823)
Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-12-27 22:52:07 -04:00
Yuri Shkuro 3be8ee875c
Document how to handle already taken issues (#822)
Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-12-25 21:32:35 -04:00
Yuri Shkuro b7efb67f8e
Improve documentation of ports, add UDP (#821)
Follow-up to https://github.com/jaegertracing/jaeger/pull/6413

Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-12-25 17:07:04 -04:00
Yuri Shkuro 5481e1b85f
Update versions (#820)
Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-12-25 13:05:44 -04:00
Yuri Shkuro d8c40b81ff
Move Bootcamp to Get Involved (#819)
Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-12-18 13:33:04 -05:00
Yuri Shkuro 229b8b837e
Fix Download links for v2 artifacts (#818)
## Which problem is this PR solving?
- Resolves #817

Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-12-17 17:35:12 -05:00
Mend Renovate 9378fff9e4
fix(deps): update dependency cspell to v8.17.1 (#816)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [cspell](https://cspell.org/)
([source](https://redirect.github.com/streetsidesoftware/cspell/tree/HEAD/packages/cspell))
| [`8.17.0` ->
`8.17.1`](https://renovatebot.com/diffs/npm/cspell/8.17.0/8.17.1) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/cspell/8.17.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/cspell/8.17.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/cspell/8.17.0/8.17.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/cspell/8.17.0/8.17.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>streetsidesoftware/cspell (cspell)</summary>

###
[`v8.17.1`](https://redirect.github.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#small8171-2024-12-16-small)

[Compare
Source](https://redirect.github.com/streetsidesoftware/cspell/compare/v8.17.0...v8.17.1)

- chore: Update Integration Test Performance Data
([#&#8203;6681](https://redirect.github.com/streetsidesoftware/cspell/issues/6681))
([4b19439](https://redirect.github.com/streetsidesoftware/cspell/commit/4b19439)),
closes
[#&#8203;6681](https://redirect.github.com/streetsidesoftware/cspell/issues/6681)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/jaegertracing/documentation).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS42OS4zIiwidXBkYXRlZEluVmVyIjoiMzkuNjkuMyIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiY2hhbmdlbG9nOmRlcGVuZGVuY2llcyJdfQ==-->

Signed-off-by: Mend Renovate <bot@renovateapp.com>
2024-12-17 00:18:03 -04:00
Mend Renovate ca9923a5b3
fix(deps): update dependency cspell to v8.17.0 (#815) 2024-12-15 12:21:41 -04:00
Mend Renovate d514c7d417
chore(deps): update actions/setup-go action to v5.2.0 (#814)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [actions/setup-go](https://redirect.github.com/actions/setup-go) |
action | minor | `v5.1.0` -> `v5.2.0` |

---

### Release Notes

<details>
<summary>actions/setup-go (actions/setup-go)</summary>

###
[`v5.2.0`](https://redirect.github.com/actions/setup-go/releases/tag/v5.2.0)

[Compare
Source](https://redirect.github.com/actions/setup-go/compare/v5.1.0...v5.2.0)

#### What's Changed

- Leveraging the raw API to retrieve the version-manifest, as it does
not impose a rate limit and hence facilitates unrestricted consumption
without the need for a token for Github Enterprise Servers by
[@&#8203;Shegox](https://redirect.github.com/Shegox) in
[https://github.com/actions/setup-go/pull/496](https://redirect.github.com/actions/setup-go/pull/496)

#### New Contributors

- [@&#8203;Shegox](https://redirect.github.com/Shegox) made their first
contribution in
[https://github.com/actions/setup-go/pull/496](https://redirect.github.com/actions/setup-go/pull/496)

**Full Changelog**:
https://github.com/actions/setup-go/compare/v5...v5.2.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/jaegertracing/documentation).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS41OC4xIiwidXBkYXRlZEluVmVyIjoiMzkuNTguMSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiY2hhbmdlbG9nOmRlcGVuZGVuY2llcyJdfQ==-->

Signed-off-by: Mend Renovate <bot@renovateapp.com>
2024-12-11 00:35:42 -04:00
Yuri Shkuro 0ad71e51d2
Explain how to disable self-tracing (#813)
## Which problem is this PR solving?
- Resolves #394 again (regression in v2 docs)

## Description of the changes
- Explain `OTEL_TRACES_SAMPLER=always_off` environment variable.

Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-12-10 11:03:53 -05:00
Yuri Shkuro db5829a009 Copy OTEL section from repo readme
Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-12-07 13:45:00 -05:00
github-actions[bot] a275428202
Release 2.1.0/1.64.0 (#812)
Release 2.1.0/1.64.0. This PR is created from CI and is part of the
release process.

Signed-off-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
Co-authored-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
2024-12-06 22:27:17 -04:00
Yuri Shkuro d863c8ed72 Replace = separator with :
Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-12-06 21:21:22 -05:00
Yuri Shkuro 9830d6939d Fix config file name
Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-12-06 21:12:03 -05:00
Kang Liu e4dd0afb19
fix: typo (#811) 2024-12-03 02:37:01 -04:00
drewcorlin1 3dbd3efc1c
Update docs for link parameter formatting (#807)
## Which problem is this PR solving?
Documentation associated with
https://github.com/jaegertracing/jaeger-ui/pull/2501

Signed-off-by: Drew Corlin <drew.corlin@getgarner.com>
2024-12-01 17:01:22 -05:00
Yuri Shkuro 70dca5b115
Mention Cassandra schema auto-generation (#808)
## Which problem is this PR solving?
- Part of https://github.com/jaegertracing/jaeger/issues/5797

## Description of the changes
- Show example of schema auto-gen and config

---------

Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-30 16:14:51 -04:00
Yuri Shkuro 67dc2a57ef
Update Perf Tuning page for v2 (#806)
Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-28 00:00:11 -04:00
Yuri Shkuro 448561c17f
Update Monitoring and Troubleshooting pages for v2 (#805)
Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-27 23:48:03 -04:00
Yuri Shkuro cba706f8f5
Emphasize v2 in the intro (#804)
## Which problem is this PR solving?
- The Migration link under Introduction was looking out of context

## Description of the changes
- Add v2 blurb to the Introduction and link to Migration.

Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-27 18:29:54 -04:00
Yuri Shkuro ab2d1efddc
Rearrange intro per tech writers recommendation (#803)
## Which problem is this PR solving?
- For someone not familiar with distributed tracing we did not make it
easy to learn the fundamentals.

## Description of the changes
- Pull the tutorials earlier in the intro.

Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-27 15:35:29 -04:00
Yuri Shkuro 808ebb6b94 Move PromTLS note to Security
Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-27 11:48:46 -05:00
Yuri Shkuro d1b8f1de42
Update Windows docs (#802)
## Which problem is this PR solving?
- Resolves #792

Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-27 11:28:23 -04:00
Yuri Shkuro 4f219e15ab
Add explanation of Archive storage (#801)
## Which problem is this PR solving?
- Resolves #309

Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-27 01:47:50 -04:00
Yuri Shkuro 830752a1df
Remove dollar/prompt sign from code blocks (#800)
## Which problem is this PR solving?
- Resolves #495

## Description of the changes
- Only in v2 docs, remove remaining places that use `$` prefix

Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-27 01:31:01 -04:00
Yuri Shkuro 3088d1050a
Add warning about possible Operator version mismatch (#799)
## Which problem is this PR solving?
- Resolves https://github.com/jaegertracing/documentation/issues/580

## Description of the changes
- Add a warning in lieu of more complex integration. In the v2
documentation we are always pointing the user to the operator's repo
README.

---------

Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-27 01:14:58 -04:00
Mend Renovate 1209812a79
Update dependency cspell to v8.16.1 (#796)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [cspell](https://cspell.org/)
([source](https://redirect.github.com/streetsidesoftware/cspell/tree/HEAD/packages/cspell))
| [`8.16.0` ->
`8.16.1`](https://renovatebot.com/diffs/npm/cspell/8.16.0/8.16.1) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/cspell/8.16.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/cspell/8.16.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/cspell/8.16.0/8.16.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/cspell/8.16.0/8.16.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>streetsidesoftware/cspell (cspell)</summary>

###
[`v8.16.1`](https://redirect.github.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#small8161-2024-11-26-small)

[Compare
Source](https://redirect.github.com/streetsidesoftware/cspell/compare/v8.16.0...v8.16.1)

- chore: Update Integration Test Performance Data
([#&#8203;6602](https://redirect.github.com/streetsidesoftware/cspell/issues/6602))
([5d667a7](https://redirect.github.com/streetsidesoftware/cspell/commit/5d667a7)),
closes
[#&#8203;6602](https://redirect.github.com/streetsidesoftware/cspell/issues/6602)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/jaegertracing/documentation).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xOS4wIiwidXBkYXRlZEluVmVyIjoiMzkuMTkuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiY2hhbmdlbG9nOmRlcGVuZGVuY2llcyJdfQ==-->

Signed-off-by: Mend Renovate <bot@renovateapp.com>
2024-11-27 01:14:43 -04:00
Yuri Shkuro 45a35762f3
Add security page lost in v2 docs migration (#798)
## Which problem is this PR solving?
- Resolves #525
- Resolves https://github.com/jaegertracing/jaeger/issues/1718

---------

Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-27 01:00:07 -04:00
Yuri Shkuro aee39d229a
Make all images popup on click (#797)
## Which problem is this PR solving?
- Resolves #666

## Description of the changes
- Surround inline images with a hyperlink to the same image

---------

Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-27 00:46:06 -04:00
Yuri Shkuro 8372518994
Clean-up dictionaries (#795)
## Which problem is this PR solving?
- Resolves #701

## Description of the changes
- Final clean-up

---------

Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-26 19:37:36 -04:00
Yuri Shkuro f51d66b55c Use password word in example
Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-26 18:21:34 -05:00
Yuri Shkuro 4f0b5f0c83
Update SPM docs (#794)
## Which problem is this PR solving?
- Resolves #772

## Description of the changes
- Update diagram, remove implication that OTEL Collector is needed
- Update the docs for v2
- Add configuration references / samples

---------

Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-26 19:14:33 -04:00
Yuri Shkuro 597e983b3b [v2 binary] Add legend to the diagram
Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-25 12:25:10 -05:00
Yuri Shkuro 82057aa29e Fix search bar for v2 pages
Resolves #731

Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-24 21:57:53 -05:00
Yuri Shkuro 8faa5b764a
Improve v2 docs (#793)
## Description of the changes
- More improvements to the docs
- Address TODOs

---------

Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-24 22:47:54 -04:00
Yuri Shkuro 5eeb00655b
Improve architecture page (#791)
## Description of the changes
- Improve diagram
- Improve components description

---------

Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-24 18:42:35 -04:00
Yuri Shkuro 9ee5914f8b Trim whitespace from v2 architecture images
Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-24 16:05:57 -05:00
Yuri Shkuro b141dad999 Allow images in articles to take full width
Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-24 16:02:29 -05:00
Yuri Shkuro 3df7655155
Improve v2 docs (#790)
Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-24 14:41:17 -04:00
Yuri Shkuro 9445d0b752
Enable link checks in CI (#789) 2024-11-24 01:39:18 -04:00
Yuri Shkuro 13d8d0a353 Fix malformed links reported by htmltest
Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-24 00:27:05 -05:00
Yuri Shkuro bc08f1c4b9 Fix broken link on /docs page
Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-23 23:42:22 -05:00
Yuri Shkuro b49cea93ec Fix broken links in v2 docs
Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-23 23:36:44 -05:00
Yuri Shkuro 303a67bc0f Fix broken anchor
Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-23 23:08:08 -05:00
Yuri Shkuro cb1baba973 Fix broken link to OTEL Collector troubleshooting
Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-23 23:01:42 -05:00
Yuri Shkuro fd727f5c52
Deprecate client docs (#788)
## Which problem is this PR solving?
- Pages dedicated to Jaeger clients are no longer relevant, but are
still being copied into each v1 release.

## Description of the changes
- Materialized shared client docs into all older versions and stop
copying them as part of the build.
- Move the OTEL migration section into a dedicated sdk-migration doc and
point all links in the next releases to that page instead of client docs
(which will no longer be part of new versions).
- Clean-up some clients and agent related docs.

## How was this change tested?
- Local server

---------

Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-23 23:45:33 -04:00
Yuri Shkuro edb1c0950d
Workaround for raw html warnings (#787)
## Which problem is this PR solving?
- The latest version of Hugo does not render some parts of the content
represented via raw HTML, it instead logs these warnings: `WARN Raw HTML
omitted while rendering .../content/docs/1.63/operator.md"; see
https://gohugo.io/getting-started/configuration-markup/#rendererunsafe.
You can suppress this warning by adding the following to your site
configuration: ignoreLogs = ['warning-goldmark-raw-html']`

## Description of the changes
* Following [this blog
post](https://makewithhugo.com/shortcode-add-raw-html/), add a `rawhtml`
shortcode and wrap `<img>` tags with it.
* Remove `<!-- ... -->` comments in the old operator.md files, but in
the next-release/operator.md replace them with go template comments

## How was this change tested?
- the image was missing in the previous iterations, now it shows on the
page <img width="616" alt="image"
src="https://github.com/user-attachments/assets/fb71ab01-a10b-43f3-9e53-ef5f454bfd81">
- `make build` no longer shows raw html warnings

---------

Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-23 20:46:48 -04:00
Yuri Shkuro 1467a50fa2
Convert config to YAML (#786)
## Which problem is this PR solving?
- It's easier to define hierarchical sections in YAML (in preparation
for docsy)

## Description of the changes
- Change config format to YAML and rename to hugo.yaml

Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-23 19:26:45 -04:00
Yuri Shkuro ab06932153 Fix redirect of latest to v2
Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-23 13:51:15 -05:00
Yuri Shkuro 83707105ae
Make v2 docs the default (#785)
## Description of the changes
- Link home page to v2 docs instead of v1
- Make the navbar Docs menu point to v2 instead of v1
- Update Download page to show v2 binaries
- Fix Makefile bug that was copying client* md files into v2 folders
- Remove 0.0.0.0 overrides from Getting Started as it was fixed for 2.1

## How was this change tested?
- make develop

Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-23 14:47:39 -04:00
Jonah Kowall 595c299937
Add details of Jaeger binary architecture (#783)
## Which problem is this PR solving?
Part of #777 

## Description of the changes
Added new diagram
Provided details of all components, ref:
-
5475a36170/cmd/jaeger/config.yaml (L2)
-
https://github.com/jaegertracing/jaeger/blob/main/cmd/jaeger/internal/components.go
- https://github.com/jaegertracing/jaeger/tree/main/cmd/jaeger/internal

## How was this change tested?
local make develop 

## Checklist
- [X] I have read
https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md
- [X] I have signed all commits

---------

Signed-off-by: Jonah Kowall <jkowall@kowall.net>
2024-11-19 17:10:17 -05:00
Yuri Shkuro 6b1ded7de1
Move Jaeger-specific theme details into base theme (#784)
## Which problem is this PR solving?
- Part of #746

## Description of the changes
- Move Jaeger-specific short codes and partials that are more related to
content than the styling into a `basetheme` so that they can continue
working when we switch the theme to docsy

## How was this change tested?
- Spot-check local build

Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-19 13:33:19 -05:00
Yuri Shkuro 57be545422 Update roadmap
Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-17 16:39:45 -05:00
Yuri Shkuro 41ab6d8722
Remove broken links (#782)
## Which problem is this PR solving?
- Resolves #781

Remove broken links using this script:
```shell
grep -lr cloudnative101 content | while read -r file; do
  echo "$file"
  grep -v cloudnative101 $file > /var/tmp/1.md
  mv /var/tmp/1.md $file
done

grep -lr envoyproxy.io content | while read -r file; do
  echo "$file"
  grep -v envoyproxy.io $file > /var/tmp/1.md
  mv /var/tmp/1.md $file
done
```

Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-15 18:06:52 -05:00
Yuri Shkuro 1c9fbb949b
Add script to generate roadmap from GitHub issues (#780)
Add a Python script to generate a roadmap document from GitHub project
board issues.

* Add `scripts/generate_roadmap.py` to fetch issues from the GitHub
project board, extract the required information, and generate
`content/roadmap.md`.
* Update `README.md` with instructions on how to run the script.
* Regenerate the Roadmap

Resolves #779

---

For more details, open the [Copilot Workspace
session](https://copilot-workspace.githubnext.com/jaegertracing/documentation/pull/780?shareId=1ee122f8-54db-4ea2-9edd-5c0af96dc246).

Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-15 15:55:18 -05:00
Yuri Shkuro 0fc07b038f [v2] Show localhost overrides in getting-started example
Resolves https://github.com/jaegertracing/jaeger/issues/6207

Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-14 02:02:21 -05:00
Yuri Shkuro a77d378944 Fix link to v2 image
Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-10 16:41:01 -05:00
github-actions[bot] 5d1dddfbb8
Release 2.0.0/1.63.0 (#776)
Release 2.0.0/1.63.0. This PR is created from CI and is part of the
release process.

Signed-off-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
Co-authored-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
2024-11-10 17:38:07 -04:00
Yuri Shkuro 462508693a Remove jaeger-agent from config
Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-10 16:23:47 -05:00
Yuri Shkuro e272409636 Fix DRY_RUN var in the release workflow
Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-10 16:19:12 -05:00
Priyansh Sao a027bffc27
Corrected the URL for jaegar-operator.yaml file (#770)
## Which problem is this PR solving?
- Resolves #768 

## Description of the changes
- To fix the URL in content/docs/1.62/operator.md, remove the extra .0
after {{< currentVersion >}} in the jaeger-operator.yaml URL. The {{<
currentVersion >}} already includes the full version
(major.minor.patch), so adding .0 results in an incorrect URL. This
change resolves the 404 error.

## How was this change tested?

## Checklist
- [x] I have read
https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md
- [x] I have signed all commits

---------

Signed-off-by: Priyansh Sao <saopriyansh06@gmail.com>
Signed-off-by: Yuri Shkuro <github@ysh.us>
Co-authored-by: Yuri Shkuro <github@ysh.us>
2024-11-10 19:58:08 +00:00
Yuri Shkuro 59a33b9ec9
[v2] Explain configuration, clean up Deployment (#775)
## Which problem is this PR solving?
- Resolves #774

---------

Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-09 20:19:49 -04:00
Yuri Shkuro ab458816a2 [v2] Clean-up storage documentation
Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-09 17:52:46 -05:00
Yuri Shkuro 5669398ef1
[v2] Move out SPM to its own page (#773)
## Which problem is this PR solving?
- REsolves #764

Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-09 18:33:20 -04:00
Yuri Shkuro 7945007639
V2 tweaks (#771)
## Which problem is this PR solving?
- Resolves #767

## Description of the changes
-

---------

Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-09 17:42:28 -04:00
Yuri Shkuro 5cddbf2f1f Remove trailing new line in render-link.html
The new line was causing a space to be rendered right after the hyperlink.

Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-08 16:50:25 -08:00
Mend Renovate a299a21c3c
Update dependency cspell to v8.16.0 (#763)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [cspell](https://cspell.org/)
([source](https://redirect.github.com/streetsidesoftware/cspell/tree/HEAD/packages/cspell))
| [`8.15.4` ->
`8.16.0`](https://renovatebot.com/diffs/npm/cspell/8.15.4/8.16.0) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/cspell/8.16.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/cspell/8.16.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/cspell/8.15.4/8.16.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/cspell/8.15.4/8.16.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>streetsidesoftware/cspell (cspell)</summary>

###
[`v8.16.0`](https://redirect.github.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#8160-2024-11-07)

[Compare
Source](https://redirect.github.com/streetsidesoftware/cspell/compare/v8.15.7...v8.16.0)

- chore: Update Integration Test Performance Data
([#&#8203;6505](https://redirect.github.com/streetsidesoftware/cspell/issues/6505))
([fb78a40](https://redirect.github.com/streetsidesoftware/cspell/commit/fb78a40)),
closes
[#&#8203;6505](https://redirect.github.com/streetsidesoftware/cspell/issues/6505)

###
[`v8.15.7`](https://redirect.github.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#small8157-2024-11-03-small)

[Compare
Source](https://redirect.github.com/streetsidesoftware/cspell/compare/v8.15.6...v8.15.7)

- ci: Workflow Bot -- Update ALL Dependencies (main)
([#&#8203;6456](https://redirect.github.com/streetsidesoftware/cspell/issues/6456))
([d4bd0dd](https://redirect.github.com/streetsidesoftware/cspell/commit/d4bd0dd)),
closes
[#&#8203;6456](https://redirect.github.com/streetsidesoftware/cspell/issues/6456)

###
[`v8.15.6`](https://redirect.github.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#small8156-2024-11-02-small)

[Compare
Source](https://redirect.github.com/streetsidesoftware/cspell/compare/v8.15.5...v8.15.6)

- chore: Update Integration Test Performance Data
([#&#8203;6455](https://redirect.github.com/streetsidesoftware/cspell/issues/6455))
([be8b15a](https://redirect.github.com/streetsidesoftware/cspell/commit/be8b15a)),
closes
[#&#8203;6455](https://redirect.github.com/streetsidesoftware/cspell/issues/6455)

###
[`v8.15.5`](https://redirect.github.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#small8155-2024-10-30-small)

[Compare
Source](https://redirect.github.com/streetsidesoftware/cspell/compare/v8.15.4...v8.15.5)

- ci: Workflow Bot -- Update ALL Dependencies (main)
([#&#8203;6442](https://redirect.github.com/streetsidesoftware/cspell/issues/6442))
([70f43cc](https://redirect.github.com/streetsidesoftware/cspell/commit/70f43cc)),
closes
[#&#8203;6442](https://redirect.github.com/streetsidesoftware/cspell/issues/6442)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/jaegertracing/documentation).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC4xMzUuMiIsInVwZGF0ZWRJblZlciI6IjM4LjE0Mi43IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJjaGFuZ2Vsb2c6ZGVwZW5kZW5jaWVzIl19-->

Signed-off-by: Mend Renovate <bot@renovateapp.com>
2024-11-07 12:20:39 -05:00
Yuri Shkuro 0c0d5746ec
Add support for v2 in the release workflow (#766)
## Which problem is this PR solving?
- Part of #731

## Description of the changes
- Change release GH workflow from automatic to manual trigger
- Add support for dual v1/v2 release
2024-11-03 00:59:36 -04:00
Yuri Shkuro c8d46c99b6
Add support for v2 docs in the navigation (#765)
## Which problem is this PR solving?
- Part of #731

## Description of the changes
- Add new V2 variables to config
- Change the display of the current / latest version on the doc pages to
allow switching between 1.x and 2.x
- Update Versions navbar dropdown to include 2.x versions (currently
disabled until we actually have 2.0)

## How was this change tested?
- Locally

---------

Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-02 23:37:55 -04:00
Yuri Shkuro bb60377017 Minor fixes and v2 migration doc
Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-02 16:50:45 -04:00
Yuri Shkuro 7e8ef6cc63 Remove broken or irrelevant links
Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-11-02 13:47:27 -04:00
Jonah Kowall 83ee5f00ae
Replace command line args in deployment doc (#751)
## Which problem is this PR solving?
Part of https://github.com/jaegertracing/documentation/issues/750

## Description of the changes
Adjusting command line and other components from v1 to v2.

## Checklist
- [X] I have read
https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md
- [X] I have signed all commits

---------

Signed-off-by: Jonah Kowall <jkowall@kowall.net>
Signed-off-by: Yuri Shkuro <github@ysh.us>
Co-authored-by: Yuri Shkuro <github@ysh.us>
2024-11-02 01:21:21 +00:00
Mend Renovate 36b8685831
Update dependency cspell to v8.15.4 (#760)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [cspell](https://cspell.org/)
([source](https://redirect.github.com/streetsidesoftware/cspell/tree/HEAD/packages/cspell))
| [`8.15.3` ->
`8.15.4`](https://renovatebot.com/diffs/npm/cspell/8.15.3/8.15.4) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/cspell/8.15.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/cspell/8.15.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/cspell/8.15.3/8.15.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/cspell/8.15.3/8.15.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>streetsidesoftware/cspell (cspell)</summary>

###
[`v8.15.4`](https://redirect.github.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#small8154-2024-10-18-small)

[Compare
Source](https://redirect.github.com/streetsidesoftware/cspell/compare/v8.15.3...v8.15.4)

- chore: Update Integration Test Performance Data
([#&#8203;6389](https://redirect.github.com/streetsidesoftware/cspell/issues/6389))
([7ece6a7](https://redirect.github.com/streetsidesoftware/cspell/commit/7ece6a7)),
closes
[#&#8203;6389](https://redirect.github.com/streetsidesoftware/cspell/issues/6389)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/jaegertracing/documentation).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC4xMjAuMSIsInVwZGF0ZWRJblZlciI6IjM4LjEyMC4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJjaGFuZ2Vsb2c6ZGVwZW5kZW5jaWVzIl19-->

Signed-off-by: Mend Renovate <bot@renovateapp.com>
2024-10-19 17:06:18 -03:00
Aqvenor 320d60b8fa
Fix footer covering sidebar menu (#761)
## Which problem is this PR solving?
- fixes #745

## Description of the changes
- fixed footer covering sidebar menu
- fixed the text covered by the scroll bar

## How was this change tested?
- tested locally by running it using `make develop`

## Checklist
- [x] I have read
https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md
- [x] I have signed all commits
- [ ] I have added unit tests for the new functionality
- [ ] I have run lint and test steps successfully
  - for `jaeger`: `make lint test`
  - for `jaeger-ui`: `yarn lint` and `yarn test`

Signed-off-by: sudesh satpute <sudeshsatpute0@gmail.com>
2024-10-19 17:04:50 -03:00
Mend Renovate 21676c63fb
Update dependency cspell to v8.15.3 (#759)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [cspell](https://cspell.org/)
([source](https://redirect.github.com/streetsidesoftware/cspell/tree/HEAD/packages/cspell))
| [`8.15.2` ->
`8.15.3`](https://renovatebot.com/diffs/npm/cspell/8.15.2/8.15.3) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/cspell/8.15.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/cspell/8.15.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/cspell/8.15.2/8.15.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/cspell/8.15.2/8.15.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>streetsidesoftware/cspell (cspell)</summary>

###
[`v8.15.3`](https://redirect.github.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#small8153-2024-10-16-small)

[Compare
Source](https://redirect.github.com/streetsidesoftware/cspell/compare/v8.15.2...v8.15.3)

- chore: Update Integration Test Performance Data
([#&#8203;6377](https://redirect.github.com/streetsidesoftware/cspell/issues/6377))
([7ff6781](https://redirect.github.com/streetsidesoftware/cspell/commit/7ff6781)),
closes
[#&#8203;6377](https://redirect.github.com/streetsidesoftware/cspell/issues/6377)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/jaegertracing/documentation).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC4xMjAuMSIsInVwZGF0ZWRJblZlciI6IjM4LjEyMC4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJjaGFuZ2Vsb2c6ZGVwZW5kZW5jaWVzIl19-->

Signed-off-by: Mend Renovate <bot@renovateapp.com>
2024-10-17 12:53:51 -04:00
Yuri Shkuro e942c23502
Remove references to jaeger-agent (#757)
## Which problem is this PR solving?
- Part of https://github.com/jaegertracing/jaeger/issues/4739

## Description of the changes
- Remove references to `jaeger-agent` everywhere except FAQ and Operator
- Operator page needs to be cleaned-up separately, perhaps it needs
changes in the operator to support OTEL Collector as the agent

## How was this change tested?
- CI

---------

Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-10-14 21:52:18 -04:00
Mend Renovate 6995017ece
Update dependency cspell to v8.15.2 (#756)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [cspell](https://cspell.org/)
([source](https://redirect.github.com/streetsidesoftware/cspell/tree/HEAD/packages/cspell))
| [`8.15.1` ->
`8.15.2`](https://renovatebot.com/diffs/npm/cspell/8.15.1/8.15.2) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/cspell/8.15.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/cspell/8.15.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/cspell/8.15.1/8.15.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/cspell/8.15.1/8.15.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>streetsidesoftware/cspell (cspell)</summary>

###
[`v8.15.2`](https://redirect.github.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#small8152-2024-10-14-small)

[Compare
Source](https://redirect.github.com/streetsidesoftware/cspell/compare/v8.15.1...v8.15.2)

- chore: Update Integration Test Performance Data
([#&#8203;6361](https://redirect.github.com/streetsidesoftware/cspell/issues/6361))
([d639368](https://redirect.github.com/streetsidesoftware/cspell/commit/d639368)),
closes
[#&#8203;6361](https://redirect.github.com/streetsidesoftware/cspell/issues/6361)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/jaegertracing/documentation).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC4xMTUuMSIsInVwZGF0ZWRJblZlciI6IjM4LjExNS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJjaGFuZ2Vsb2c6ZGVwZW5kZW5jaWVzIl19-->

Signed-off-by: Mend Renovate <bot@renovateapp.com>
2024-10-14 21:09:42 -04:00
Priyansh Sao 54f6d84ba7
Fixed one more typo in scripts/cspell/project-words.txt (#755) 2024-10-12 13:55:56 -04:00
Mend Renovate a44e51bd97
Update dependency cspell to v8.15.1 (#754)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [cspell](https://cspell.org/)
([source](https://redirect.github.com/streetsidesoftware/cspell/tree/HEAD/packages/cspell))
| [`8.14.4` ->
`8.15.1`](https://renovatebot.com/diffs/npm/cspell/8.14.4/8.15.1) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/cspell/8.15.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/cspell/8.15.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/cspell/8.14.4/8.15.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/cspell/8.14.4/8.15.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>streetsidesoftware/cspell (cspell)</summary>

###
[`v8.15.1`](https://redirect.github.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#small8151-2024-10-11-small)

[Compare
Source](https://redirect.github.com/streetsidesoftware/cspell/compare/v8.15.0...v8.15.1)

- fix: Sign Published Packages
([#&#8203;6350](https://redirect.github.com/streetsidesoftware/cspell/issues/6350))
([633b060](https://redirect.github.com/streetsidesoftware/cspell/commit/633b060)),
closes
[#&#8203;6350](https://redirect.github.com/streetsidesoftware/cspell/issues/6350)

###
[`v8.15.0`](https://redirect.github.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#8150-2024-10-11)

[Compare
Source](https://redirect.github.com/streetsidesoftware/cspell/compare/v8.14.4...v8.15.0)

- chore: bump eslint-plugin-unicorn from 55.0.0 to 56.0.0
([#&#8203;6332](https://redirect.github.com/streetsidesoftware/cspell/issues/6332))
([67d1e92](https://redirect.github.com/streetsidesoftware/cspell/commit/67d1e92)),
closes
[#&#8203;6332](https://redirect.github.com/streetsidesoftware/cspell/issues/6332)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/jaegertracing/documentation).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC4xMTUuMSIsInVwZGF0ZWRJblZlciI6IjM4LjExNS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJjaGFuZ2Vsb2c6ZGVwZW5kZW5jaWVzIl19-->

Signed-off-by: Mend Renovate <bot@renovateapp.com>
2024-10-11 13:10:55 -04:00
Priyansh Sao f334558799
Fixed typo in scripts/cspell/project-words.txt (#753) 2024-10-11 17:09:48 +00:00
github-actions[bot] 869423ee30
Release release-1.62.0 (#752)
Release release-1.62.0. This PR is created from CI and is part of the
release process.

Signed-off-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
Co-authored-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
2024-10-07 22:35:06 +11:00
Jonah Kowall bc8ceee6d6
Link architecture page and add new diagrams (#749)
## Which problem is this PR solving?
Fixing the architecture page for Jaeger v2 docs
Updating the page with new diagrams as well

## Checklist
- [X] I have read
https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md
- [X] I have signed all commits

---------

Signed-off-by: Jonah Kowall <jkowall@kowall.net>
2024-09-30 10:49:09 -04:00
Yuri Shkuro a1b93ce7dd Fix formatting
Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-09-22 22:56:10 -04:00
Yuri Shkuro 4187d2bc93
Use full versions in Docker commands (#747)
## Which problem is this PR solving?
- In v1.61.0 we stopped publishing shortcut Docker tags like `1` and
`1.61`, and only publish fully qualified versions `1.61.0`
- But the docs were still referencing major/minor versions ([reported on
Slack](https://cloud-native.slack.com/archives/CGG7NFUJ3/p1727056265543819))

## Description of the changes
- Use fully qualified versions everywhere
- The docs URLs still use major.minor, so rename the variables to
`$majorMinorVersion` to avoid confusion with the `currentVersion`
shortcut

Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-09-22 22:32:06 -04:00
Mend Renovate 0e63cb29cc
Update dependency cspell to v8.14.4 (#743)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [cspell](https://cspell.org/)
([source](https://redirect.github.com/streetsidesoftware/cspell/tree/HEAD/packages/cspell))
| [`8.14.3` ->
`8.14.4`](https://renovatebot.com/diffs/npm/cspell/8.14.3/8.14.4) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/cspell/8.14.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/cspell/8.14.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/cspell/8.14.3/8.14.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/cspell/8.14.3/8.14.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>streetsidesoftware/cspell (cspell)</summary>

###
[`v8.14.4`](https://redirect.github.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#small8144-2024-09-18-small)

[Compare
Source](https://redirect.github.com/streetsidesoftware/cspell/compare/v8.14.3...v8.14.4)

- fix: Remove object from cache
([#&#8203;6257](https://redirect.github.com/streetsidesoftware/cspell/issues/6257))
([ea24297](https://redirect.github.com/streetsidesoftware/cspell/commit/ea24297)),
closes
[#&#8203;6257](https://redirect.github.com/streetsidesoftware/cspell/issues/6257)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/jaegertracing/documentation).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC44MC4wIiwidXBkYXRlZEluVmVyIjoiMzguODAuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiY2hhbmdlbG9nOmRlcGVuZGVuY2llcyJdfQ==-->

Signed-off-by: Mend Renovate <bot@renovateapp.com>
2024-09-19 10:53:03 -04:00
Jonah Kowall c93d97eaeb
fixing padding and spacing to get TOC to render right (#740)
This change will fix the spacing on all of the docs to make the screen
real state better with less white space. It makes
 a bigger difference in the v2 docs with the new TOC.

I did some testing on smaller screens as well.

Happy to get feedback.
- [X] I have read
https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md
- [X] I have signed all commits
- [X] I have run lint and test steps successfully

---------

Signed-off-by: Jonah Kowall <jkowall@kowall.net>
Co-authored-by: Yuri Shkuro <yurishkuro@users.noreply.github.com>
2024-09-18 10:34:33 -04:00
Mahad Zaryab f8ea5c9d94
[docs] Change Supported Version For Cassandra (#742)
## Which problem is this PR solving?
- Resolves https://github.com/jaegertracing/jaeger/issues/5160

## Description of the changes
- In https://github.com/jaegertracing/jaeger/pull/5962, we removed
support for Cassandra 3.x. This PR updates the documentation to refelct
that.

## How was this change tested?
- CI

## Checklist
- [x] I have read
https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md
- [x] I have signed all commits
- [x] I have added unit tests for the new functionality
- [x] I have run lint and test steps successfully
  - for `jaeger`: `make lint test`
  - for `jaeger-ui`: `yarn lint` and `yarn test`

---------

Signed-off-by: Mahad Zaryab <mahadzaryab1@gmail.com>
2024-09-17 20:44:34 -04:00
Mend Renovate f846d48a62
Update dependency cspell to v8.14.3 (#741)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [cspell](https://cspell.org/)
([source](https://redirect.github.com/streetsidesoftware/cspell/tree/HEAD/packages/cspell))
| [`8.14.2` ->
`8.14.3`](https://renovatebot.com/diffs/npm/cspell/8.14.2/8.14.3) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/cspell/8.14.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/cspell/8.14.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/cspell/8.14.2/8.14.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/cspell/8.14.2/8.14.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>streetsidesoftware/cspell (cspell)</summary>

###
[`v8.14.3`](https://redirect.github.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#small8143-2024-09-17-small)

[Compare
Source](https://redirect.github.com/streetsidesoftware/cspell/compare/v8.14.2...v8.14.3)

- chore: Update Integration Test Performance Data
([#&#8203;6254](https://redirect.github.com/streetsidesoftware/cspell/issues/6254))
([189ac16](https://redirect.github.com/streetsidesoftware/cspell/commit/189ac16)),
closes
[#&#8203;6254](https://redirect.github.com/streetsidesoftware/cspell/issues/6254)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/jaegertracing/documentation).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC44MC4wIiwidXBkYXRlZEluVmVyIjoiMzguODAuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiY2hhbmdlbG9nOmRlcGVuZGVuY2llcyJdfQ==-->

Signed-off-by: Mend Renovate <bot@renovateapp.com>
2024-09-17 10:28:45 -04:00
Jonah Kowall b1af07adc1
Add specific config examples across docs (#736)
## Description of the changes
First pass on adding example configs versus CLI across sampling and
backends.

## How was this change tested?
make spellcheck
make develop

## Checklist
- [X] I have read
https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md
- [X] I have signed all commits

---------

Signed-off-by: Jonah Kowall <jkowall@kowall.net>
2024-09-17 10:24:00 -04:00
Jonah Kowall e879666e52
Some cleanups in docs (#739)
## Description of the changes
Some small improvements for v2 docs

## Checklist
- [X] I have read
https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md
- [X] I have signed all commits

---------

Signed-off-by: Jonah Kowall <jkowall@kowall.net>
2024-09-16 14:46:48 -04:00
Yuri Shkuro cee94fe4d2
Mention v2 artifacts and docs (#738) 2024-09-15 08:10:36 -04:00
github-actions[bot] 9b9d0440e9
Release release-1.61.0 (#737)
Release release-1.61.0. This PR is created from CI and is part of the
release process.

Signed-off-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
Co-authored-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
2024-09-14 23:17:32 -04:00
Yuri Shkuro a36d03487d Use fully qualified Docker image version
Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-09-14 23:12:33 -04:00
Jonah Kowall 832a3ecad6
Major push for Jaeger v2 docs updates (#735)
## Description of the changes
Lots of changes per the new menu format, also updated a lot of content
but more to go around configurations.

## How was this change tested?
make develop

## Checklist
- [X] I have read
https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md
- [X] I have signed all commits

---------

Signed-off-by: Jonah Kowall <jkowall@kowall.net>
2024-09-11 13:38:27 -04:00
Mend Renovate 6c61b39065
Update dependency cspell to v8.14.2 (#727)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [cspell](https://streetsidesoftware.github.io/cspell/)
([source](https://togithub.com/streetsidesoftware/cspell/tree/HEAD/packages/cspell))
| [`8.6.1` ->
`8.14.2`](https://renovatebot.com/diffs/npm/cspell/8.6.1/8.14.2) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/cspell/8.14.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/cspell/8.14.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/cspell/8.6.1/8.14.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/cspell/8.6.1/8.14.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>streetsidesoftware/cspell (cspell)</summary>

###
[`v8.14.2`](https://togithub.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#small8142-2024-08-20-small)

[Compare
Source](https://togithub.com/streetsidesoftware/cspell/compare/v8.14.1...v8.14.2)

- chore: Update Integration Test Performance Data
([#&#8203;6126](https://togithub.com/streetsidesoftware/cspell/issues/6126))
([012c897](https://togithub.com/streetsidesoftware/cspell/commit/012c897)),
closes
[#&#8203;6126](https://togithub.com/streetsidesoftware/cspell/issues/6126)

###
[`v8.14.1`](https://togithub.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#small8141-2024-08-17-small)

[Compare
Source](https://togithub.com/streetsidesoftware/cspell/compare/v8.13.3...v8.14.1)

- fix: Fix publishing
([8a56148](https://togithub.com/streetsidesoftware/cspell/commit/8a56148))

###
[`v8.13.3`](https://togithub.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#small8133-2024-08-12-small)

[Compare
Source](https://togithub.com/streetsidesoftware/cspell/compare/v8.13.2...v8.13.3)

- chore: Update Integration Test Performance Data
([#&#8203;6079](https://togithub.com/streetsidesoftware/cspell/issues/6079))
([dd28ef5](https://togithub.com/streetsidesoftware/cspell/commit/dd28ef5)),
closes
[#&#8203;6079](https://togithub.com/streetsidesoftware/cspell/issues/6079)

###
[`v8.13.2`](https://togithub.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#small8132-2024-08-08-small)

[Compare
Source](https://togithub.com/streetsidesoftware/cspell/compare/v8.13.1...v8.13.2)

- chore: Update Integration Test Performance Data
([#&#8203;6060](https://togithub.com/streetsidesoftware/cspell/issues/6060))
([c766d18](https://togithub.com/streetsidesoftware/cspell/commit/c766d18)),
closes
[#&#8203;6060](https://togithub.com/streetsidesoftware/cspell/issues/6060)

###
[`v8.13.1`](https://togithub.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#small8131-2024-08-02-small)

[Compare
Source](https://togithub.com/streetsidesoftware/cspell/compare/v8.13.0...v8.13.1)

- chore: Update Integration Test Performance Data
([#&#8203;6028](https://togithub.com/streetsidesoftware/cspell/issues/6028))
([738d2a9](https://togithub.com/streetsidesoftware/cspell/commit/738d2a9)),
closes
[#&#8203;6028](https://togithub.com/streetsidesoftware/cspell/issues/6028)

###
[`v8.13.0`](https://togithub.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#8130-2024-07-30)

[Compare
Source](https://togithub.com/streetsidesoftware/cspell/compare/v8.12.1...v8.13.0)

- chore: Update Integration Test Performance Data
([#&#8203;6011](https://togithub.com/streetsidesoftware/cspell/issues/6011))
([135838a](https://togithub.com/streetsidesoftware/cspell/commit/135838a)),
closes
[#&#8203;6011](https://togithub.com/streetsidesoftware/cspell/issues/6011)

###
[`v8.12.1`](https://togithub.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#small8121-2024-07-22-small)

[Compare
Source](https://togithub.com/streetsidesoftware/cspell/compare/v8.11.0...v8.12.1)

- fix: make sure the version is up to date
([f6ab018](https://togithub.com/streetsidesoftware/cspell/commit/f6ab018))

###
[`v8.11.0`](https://togithub.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#8110-2024-07-16)

[Compare
Source](https://togithub.com/streetsidesoftware/cspell/compare/v8.10.4...v8.11.0)

- refactor: char index
([#&#8203;5926](https://togithub.com/streetsidesoftware/cspell/issues/5926))
([077b3ba](https://togithub.com/streetsidesoftware/cspell/commit/077b3ba)),
closes
[#&#8203;5926](https://togithub.com/streetsidesoftware/cspell/issues/5926)

###
[`v8.10.4`](https://togithub.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#small8104-2024-07-05-small)

[Compare
Source](https://togithub.com/streetsidesoftware/cspell/compare/v8.10.2...v8.10.4)

- chore: force 8.10.3
([f18b8c7](https://togithub.com/streetsidesoftware/cspell/commit/f18b8c7))

###
[`v8.10.2`](https://togithub.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#small8102-2024-07-05-small)

[Compare
Source](https://togithub.com/streetsidesoftware/cspell/compare/v8.10.1...v8.10.2)

- ci: Workflow Bot -- Update ALL Dependencies (main)
([#&#8203;5862](https://togithub.com/streetsidesoftware/cspell/issues/5862))
([814e15c](https://togithub.com/streetsidesoftware/cspell/commit/814e15c)),
closes
[#&#8203;5862](https://togithub.com/streetsidesoftware/cspell/issues/5862)

###
[`v8.10.1`](https://togithub.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#small8101-2024-07-05-small)

[Compare
Source](https://togithub.com/streetsidesoftware/cspell/compare/v8.10.0...v8.10.1)

- fix(cspell-tools): support adding directives
([#&#8203;5860](https://togithub.com/streetsidesoftware/cspell/issues/5860))
([b2e014f](https://togithub.com/streetsidesoftware/cspell/commit/b2e014f)),
closes
[#&#8203;5860](https://togithub.com/streetsidesoftware/cspell/issues/5860)

###
[`v8.10.0`](https://togithub.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#8100-2024-07-02)

[Compare
Source](https://togithub.com/streetsidesoftware/cspell/compare/v8.9.1...v8.10.0)

- chore: Update Integration Test Performance Data
([#&#8203;5859](https://togithub.com/streetsidesoftware/cspell/issues/5859))
([898e806](https://togithub.com/streetsidesoftware/cspell/commit/898e806)),
closes
[#&#8203;5859](https://togithub.com/streetsidesoftware/cspell/issues/5859)

###
[`v8.9.1`](https://togithub.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#small891-2024-06-20-small)

[Compare
Source](https://togithub.com/streetsidesoftware/cspell/compare/v8.9.0...v8.9.1)

- docs: format tables in generated docs
([#&#8203;5776](https://togithub.com/streetsidesoftware/cspell/issues/5776))
([02e0359](https://togithub.com/streetsidesoftware/cspell/commit/02e0359)),
closes
[#&#8203;5776](https://togithub.com/streetsidesoftware/cspell/issues/5776)

###
[`v8.9.0`](https://togithub.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#890-2024-06-18)

[Compare
Source](https://togithub.com/streetsidesoftware/cspell/compare/v8.8.4...v8.9.0)

**Note:** Version bump only for package cspell

###
[`v8.8.4`](https://togithub.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#small884-2024-06-03-small)

[Compare
Source](https://togithub.com/streetsidesoftware/cspell/compare/v8.8.3...v8.8.4)

- ci: Fix Lint -- Workflow Bot
([#&#8203;5699](https://togithub.com/streetsidesoftware/cspell/issues/5699))
([211113a](https://togithub.com/streetsidesoftware/cspell/commit/211113a)),
closes
[#&#8203;5699](https://togithub.com/streetsidesoftware/cspell/issues/5699)

###
[`v8.8.3`](https://togithub.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#small883-2024-05-23-small)

[Compare
Source](https://togithub.com/streetsidesoftware/cspell/compare/v8.8.2...v8.8.3)

- chore: Update Integration Test Performance Data
([#&#8203;5663](https://togithub.com/streetsidesoftware/cspell/issues/5663))
([b605dd3](https://togithub.com/streetsidesoftware/cspell/commit/b605dd3)),
closes
[#&#8203;5663](https://togithub.com/streetsidesoftware/cspell/issues/5663)

###
[`v8.8.2`](https://togithub.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#small882-2024-05-22-small)

[Compare
Source](https://togithub.com/streetsidesoftware/cspell/compare/v8.8.1...v8.8.2)

- ci: Workflow Bot -- Update ALL Dependencies (main)
([#&#8203;5659](https://togithub.com/streetsidesoftware/cspell/issues/5659))
([5d93673](https://togithub.com/streetsidesoftware/cspell/commit/5d93673)),
closes
[#&#8203;5659](https://togithub.com/streetsidesoftware/cspell/issues/5659)

###
[`v8.8.1`](https://togithub.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#small881-2024-05-10-small)

[Compare
Source](https://togithub.com/streetsidesoftware/cspell/compare/v8.8.0...v8.8.1)

- chore: Do not stop update if it fails to lint.
([64ba085](https://togithub.com/streetsidesoftware/cspell/commit/64ba085))

###
[`v8.8.0`](https://togithub.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#880-2024-05-03)

[Compare
Source](https://togithub.com/streetsidesoftware/cspell/compare/v8.7.0...v8.8.0)

**Note:** Version bump only for package cspell

###
[`v8.7.0`](https://togithub.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#870-2024-04-10)

[Compare
Source](https://togithub.com/streetsidesoftware/cspell/compare/v8.6.1...v8.7.0)

**Note:** Version bump only for package cspell

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/jaegertracing/documentation).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC4yMC4xIiwidXBkYXRlZEluVmVyIjoiMzguNTYuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiY2hhbmdlbG9nOmRlcGVuZGVuY2llcyJdfQ==-->

Signed-off-by: Mend Renovate <bot@renovateapp.com>
2024-09-09 15:22:51 -04:00
dependabot[bot] 398a0d48b3
Bump micromatch from 4.0.5 to 4.0.8 in /scripts/cspell (#734)
Bumps [micromatch](https://github.com/micromatch/micromatch) from 4.0.5
to 4.0.8.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/micromatch/micromatch/releases">micromatch's
releases</a>.</em></p>
<blockquote>
<h2>4.0.8</h2>
<p>Ultimate release that fixes both CVE-2024-4067 and CVE-2024-4068. We
consider the issues low-priority, so even if you see automated scanners
saying otherwise, don't be scared.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/micromatch/micromatch/blob/master/CHANGELOG.md">micromatch's
changelog</a>.</em></p>
<blockquote>
<h2>[4.0.8] - 2024-08-22</h2>
<ul>
<li>backported CVE-2024-4067 fix (from v4.0.6) over to 4.x branch</li>
</ul>
<h2>[4.0.7] - 2024-05-22</h2>
<ul>
<li>this is basically v4.0.5, with some README updates</li>
<li><strong>it is vulnerable to CVE-2024-4067</strong></li>
<li>Updated braces to v3.0.3 to avoid CVE-2024-4068</li>
<li>does NOT break API compatibility</li>
</ul>
<h2>[4.0.6] - 2024-05-21</h2>
<ul>
<li>Added <code>hasBraces</code> to check if a pattern contains
braces.</li>
<li>Fixes CVE-2024-4067</li>
<li><strong>BREAKS API COMPATIBILITY</strong></li>
<li>Should be labeled as a major release, but it's not.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="8bd704ec0d"><code>8bd704e</code></a>
4.0.8</li>
<li><a
href="a0e68416a4"><code>a0e6841</code></a>
run verb to generate README documentation</li>
<li><a
href="4ec288484f"><code>4ec2884</code></a>
Merge branch 'v4' into hauserkristof-feature/v4.0.8</li>
<li><a
href="03aa805217"><code>03aa805</code></a>
Merge pull request <a
href="https://redirect.github.com/micromatch/micromatch/issues/266">#266</a>
from hauserkristof/feature/v4.0.8</li>
<li><a
href="814f5f70ef"><code>814f5f7</code></a>
lint</li>
<li><a
href="67fcce6a10"><code>67fcce6</code></a>
fix: CHANGELOG about braces &amp; CVE-2024-4068, v4.0.5</li>
<li><a
href="113f2e3fa7"><code>113f2e3</code></a>
fix: CVE numbers in CHANGELOG</li>
<li><a
href="d9dbd9a266"><code>d9dbd9a</code></a>
feat: updated CHANGELOG</li>
<li><a
href="2ab13157f4"><code>2ab1315</code></a>
fix: use actions/setup-node@v4</li>
<li><a
href="1406ea38f3"><code>1406ea3</code></a>
feat: rework test to work on macos with node 10,12 and 14</li>
<li>Additional commits viewable in <a
href="https://github.com/micromatch/micromatch/compare/4.0.5...4.0.8">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=micromatch&package-manager=npm_and_yarn&previous-version=4.0.5&new-version=4.0.8)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/jaegertracing/documentation/network/alerts).

</details>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Yuri Shkuro <github@ysh.us>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Yuri Shkuro <github@ysh.us>
2024-09-09 17:47:30 +00:00
Yuri Shkuro f302d1460f Add Term 3 mentees
Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-08-31 17:34:08 -04:00
Yuri Shkuro d182994698 Add blog post
Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-08-31 11:37:34 -04:00
Yuri Shkuro f69a708b61 Add blog post
Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-08-31 11:36:09 -04:00
Yuri Shkuro 204bbef2c1 Update Summer term links and add blog post
Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-08-30 01:23:28 -04:00
Yuri Shkuro c339401bf1
Setup new structure for v2 docs (#732)
## Which problem is this PR solving?
- Prepare for #731

## Description of the changes
- Add next-release-v2 directory for developing v2 documentation
- Do not include CLI flags into v2 during build

## How was this change tested?
- `make develop`

Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-08-26 11:22:41 -04:00
dependabot[bot] 3c326283d4
Bump braces from 3.0.2 to 3.0.3 in /scripts/cspell (#725)
Bumps [braces](https://github.com/micromatch/braces) from 3.0.2 to
3.0.3.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="74b2db2938"><code>74b2db2</code></a>
3.0.3</li>
<li><a
href="88f1429a0f"><code>88f1429</code></a>
update eslint. lint, fix unit tests.</li>
<li><a
href="415d660c30"><code>415d660</code></a>
Snyk js braces 6838727 (<a
href="https://redirect.github.com/micromatch/braces/issues/40">#40</a>)</li>
<li><a
href="190510f79d"><code>190510f</code></a>
fix tests, skip 1 test in test/braces.expand</li>
<li><a
href="716eb9f12d"><code>716eb9f</code></a>
readme bump</li>
<li><a
href="a5851e57f4"><code>a5851e5</code></a>
Merge pull request <a
href="https://redirect.github.com/micromatch/braces/issues/37">#37</a>
from coderaiser/fix/vulnerability</li>
<li><a
href="2092bd1fb1"><code>2092bd1</code></a>
feature: braces: add maxSymbols (<a
href="https://github.com/micromatch/braces/issues/">https://github.com/micromatch/braces/issues/</a>...</li>
<li><a
href="9f5b4cf473"><code>9f5b4cf</code></a>
fix: vulnerability (<a
href="https://security.snyk.io/vuln/SNYK-JS-BRACES-6838727">https://security.snyk.io/vuln/SNYK-JS-BRACES-6838727</a>)</li>
<li><a
href="98414f9f1f"><code>98414f9</code></a>
remove funding file</li>
<li><a
href="665ab5d561"><code>665ab5d</code></a>
update keepEscaping doc (<a
href="https://redirect.github.com/micromatch/braces/issues/27">#27</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/micromatch/braces/compare/3.0.2...3.0.3">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=braces&package-manager=npm_and_yarn&previous-version=3.0.2&new-version=3.0.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/jaegertracing/documentation/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-08-06 21:29:43 -04:00
dependabot[bot] 585d59d75c
Bump actions/setup-python from 2 to 5 (#723)
Bumps [actions/setup-python](https://github.com/actions/setup-python)
from 2 to 5.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/setup-python/releases">actions/setup-python's
releases</a>.</em></p>
<blockquote>
<h2>v5.0.0</h2>
<h2>What's Changed</h2>
<p>In scope of this release, we update node version runtime from node16
to node20 (<a
href="https://redirect.github.com/actions/setup-python/pull/772">actions/setup-python#772</a>).
Besides, we update dependencies to the latest versions.</p>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/setup-python/compare/v4.8.0...v5.0.0">https://github.com/actions/setup-python/compare/v4.8.0...v5.0.0</a></p>
<h2>v4.8.0</h2>
<h2>What's Changed</h2>
<p>In scope of this release we added support for GraalPy (<a
href="https://redirect.github.com/actions/setup-python/pull/694">actions/setup-python#694</a>).
You can use this snippet to set up GraalPy:</p>
<pre lang="yaml"><code>steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v4 
  with:
    python-version: 'graalpy-22.3' 
- run: python my_script.py
</code></pre>
<p>Besides, the release contains such changes as:</p>
<ul>
<li>Trim python version when reading from file by <a
href="https://github.com/FerranPares"><code>@​FerranPares</code></a> in
<a
href="https://redirect.github.com/actions/setup-python/pull/628">actions/setup-python#628</a></li>
<li>Use non-deprecated versions in examples by <a
href="https://github.com/jeffwidman"><code>@​jeffwidman</code></a> in <a
href="https://redirect.github.com/actions/setup-python/pull/724">actions/setup-python#724</a></li>
<li>Change deprecation comment to past tense by <a
href="https://github.com/jeffwidman"><code>@​jeffwidman</code></a> in <a
href="https://redirect.github.com/actions/setup-python/pull/723">actions/setup-python#723</a></li>
<li>Bump <code>@​babel/traverse</code> from 7.9.0 to 7.23.2 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/actions/setup-python/pull/743">actions/setup-python#743</a></li>
<li>advanced-usage.md: Encourage the use actions/checkout@v4 by <a
href="https://github.com/cclauss"><code>@​cclauss</code></a> in <a
href="https://redirect.github.com/actions/setup-python/pull/729">actions/setup-python#729</a></li>
<li>Examples now use checkout@v4 by <a
href="https://github.com/simonw"><code>@​simonw</code></a> in <a
href="https://redirect.github.com/actions/setup-python/pull/738">actions/setup-python#738</a></li>
<li>Update actions/checkout to v4 by <a
href="https://github.com/dmitry-shibanov"><code>@​dmitry-shibanov</code></a>
in <a
href="https://redirect.github.com/actions/setup-python/pull/761">actions/setup-python#761</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/FerranPares"><code>@​FerranPares</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/setup-python/pull/628">actions/setup-python#628</a></li>
<li><a href="https://github.com/timfel"><code>@​timfel</code></a> made
their first contribution in <a
href="https://redirect.github.com/actions/setup-python/pull/694">actions/setup-python#694</a></li>
<li><a
href="https://github.com/jeffwidman"><code>@​jeffwidman</code></a> made
their first contribution in <a
href="https://redirect.github.com/actions/setup-python/pull/724">actions/setup-python#724</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/setup-python/compare/v4...v4.8.0">https://github.com/actions/setup-python/compare/v4...v4.8.0</a></p>
<h2>v4.7.1</h2>
<h2>What's Changed</h2>
<ul>
<li>Bump word-wrap from 1.2.3 to 1.2.4 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/actions/setup-python/pull/702">actions/setup-python#702</a></li>
<li>Add range validation for toml files by <a
href="https://github.com/dmitry-shibanov"><code>@​dmitry-shibanov</code></a>
in <a
href="https://redirect.github.com/actions/setup-python/pull/726">actions/setup-python#726</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/setup-python/compare/v4...v4.7.1">https://github.com/actions/setup-python/compare/v4...v4.7.1</a></p>
<h2>v4.7.0</h2>
<p>In scope of this release, the support for reading python version from
pyproject.toml was added (<a
href="https://redirect.github.com/actions/setup-python/pull/669">actions/setup-python#669</a>).</p>
<pre lang="yaml"><code>      - name: Setup Python
        uses: actions/setup-python@v4
&lt;/tr&gt;&lt;/table&gt; 
</code></pre>
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="39cd14951b"><code>39cd149</code></a>
Documentation update for cache (<a
href="https://redirect.github.com/actions/setup-python/issues/873">#873</a>)</li>
<li><a
href="a0d74c0c42"><code>a0d74c0</code></a>
fix(ci): update all failing workflows (<a
href="https://redirect.github.com/actions/setup-python/issues/863">#863</a>)</li>
<li><a
href="4eb7dbcb95"><code>4eb7dbc</code></a>
Bump braces from 3.0.2 to 3.0.3 (<a
href="https://redirect.github.com/actions/setup-python/issues/893">#893</a>)</li>
<li><a
href="82c7e631bb"><code>82c7e63</code></a>
Documentation changes for avoiding rate limit issues on GHES (<a
href="https://redirect.github.com/actions/setup-python/issues/835">#835</a>)</li>
<li><a
href="10aa35afd7"><code>10aa35a</code></a>
feat: fallback to raw endpoint for manifest when rate limit is reached
(<a
href="https://redirect.github.com/actions/setup-python/issues/766">#766</a>)</li>
<li><a
href="9a7ac94420"><code>9a7ac94</code></a>
Bump undici from 5.27.2 to 5.28.3 (<a
href="https://redirect.github.com/actions/setup-python/issues/817">#817</a>)</li>
<li><a
href="871daa956c"><code>871daa9</code></a>
Fix the &quot;Specifying multiple Python/PyPy versions&quot; link (<a
href="https://redirect.github.com/actions/setup-python/issues/782">#782</a>)</li>
<li><a
href="2f078955e4"><code>2f07895</code></a>
Fix broken README.md link (<a
href="https://redirect.github.com/actions/setup-python/issues/793">#793</a>)</li>
<li><a
href="e9d6f99097"><code>e9d6f99</code></a>
Replace setup-python@v4 by setup-python@v5 in README (<a
href="https://redirect.github.com/actions/setup-python/issues/776">#776</a>)</li>
<li><a
href="0a5c615913"><code>0a5c615</code></a>
Update action to node20 (<a
href="https://redirect.github.com/actions/setup-python/issues/772">#772</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/actions/setup-python/compare/v2...v5">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/setup-python&package-manager=github_actions&previous-version=2&new-version=5)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-08-06 21:04:28 -04:00
dependabot[bot] f479f78f84
Bump actions/checkout from 3 to 4 (#724)
Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to
4.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/checkout/releases">actions/checkout's
releases</a>.</em></p>
<blockquote>
<h2>v4.0.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Update default runtime to node20 by <a
href="https://github.com/takost"><code>@​takost</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1436">actions/checkout#1436</a></li>
<li>Support fetching without the --progress option by <a
href="https://github.com/simonbaird"><code>@​simonbaird</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1067">actions/checkout#1067</a></li>
<li>Release 4.0.0 by <a
href="https://github.com/takost"><code>@​takost</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1447">actions/checkout#1447</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/takost"><code>@​takost</code></a> made
their first contribution in <a
href="https://redirect.github.com/actions/checkout/pull/1436">actions/checkout#1436</a></li>
<li><a
href="https://github.com/simonbaird"><code>@​simonbaird</code></a> made
their first contribution in <a
href="https://redirect.github.com/actions/checkout/pull/1067">actions/checkout#1067</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/checkout/compare/v3...v4.0.0">https://github.com/actions/checkout/compare/v3...v4.0.0</a></p>
<h2>v3.6.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Mark test scripts with Bash'isms to be run via Bash by <a
href="https://github.com/dscho"><code>@​dscho</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1377">actions/checkout#1377</a></li>
<li>Add option to fetch tags even if fetch-depth &gt; 0 by <a
href="https://github.com/RobertWieczoreck"><code>@​RobertWieczoreck</code></a>
in <a
href="https://redirect.github.com/actions/checkout/pull/579">actions/checkout#579</a></li>
<li>Release 3.6.0 by <a
href="https://github.com/luketomlinson"><code>@​luketomlinson</code></a>
in <a
href="https://redirect.github.com/actions/checkout/pull/1437">actions/checkout#1437</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/RobertWieczoreck"><code>@​RobertWieczoreck</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/checkout/pull/579">actions/checkout#579</a></li>
<li><a
href="https://github.com/luketomlinson"><code>@​luketomlinson</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/checkout/pull/1437">actions/checkout#1437</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/checkout/compare/v3.5.3...v3.6.0">https://github.com/actions/checkout/compare/v3.5.3...v3.6.0</a></p>
<h2>v3.5.3</h2>
<h2>What's Changed</h2>
<ul>
<li>Fix: Checkout Issue in self hosted runner due to faulty submodule
check-ins by <a
href="https://github.com/megamanics"><code>@​megamanics</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1196">actions/checkout#1196</a></li>
<li>Fix typos found by codespell by <a
href="https://github.com/DimitriPapadopoulos"><code>@​DimitriPapadopoulos</code></a>
in <a
href="https://redirect.github.com/actions/checkout/pull/1287">actions/checkout#1287</a></li>
<li>Add support for sparse checkouts by <a
href="https://github.com/dscho"><code>@​dscho</code></a> and <a
href="https://github.com/dfdez"><code>@​dfdez</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1369">actions/checkout#1369</a></li>
<li>Release v3.5.3 by <a
href="https://github.com/TingluoHuang"><code>@​TingluoHuang</code></a>
in <a
href="https://redirect.github.com/actions/checkout/pull/1376">actions/checkout#1376</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/megamanics"><code>@​megamanics</code></a> made
their first contribution in <a
href="https://redirect.github.com/actions/checkout/pull/1196">actions/checkout#1196</a></li>
<li><a
href="https://github.com/DimitriPapadopoulos"><code>@​DimitriPapadopoulos</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/checkout/pull/1287">actions/checkout#1287</a></li>
<li><a href="https://github.com/dfdez"><code>@​dfdez</code></a> made
their first contribution in <a
href="https://redirect.github.com/actions/checkout/pull/1369">actions/checkout#1369</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/checkout/compare/v3...v3.5.3">https://github.com/actions/checkout/compare/v3...v3.5.3</a></p>
<h2>v3.5.2</h2>
<h2>What's Changed</h2>
<ul>
<li>Fix: Use correct API url / endpoint in GHES by <a
href="https://github.com/fhammerl"><code>@​fhammerl</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1289">actions/checkout#1289</a>
based on <a
href="https://redirect.github.com/actions/checkout/issues/1286">#1286</a>
by <a href="https://github.com/1newsr"><code>@​1newsr</code></a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/checkout/compare/v3.5.1...v3.5.2">https://github.com/actions/checkout/compare/v3.5.1...v3.5.2</a></p>
<h2>v3.5.1</h2>
<h2>What's Changed</h2>
<ul>
<li>Improve checkout performance on Windows runners by upgrading
<code>@​actions/github</code> dependency by <a
href="https://github.com/BrettDong"><code>@​BrettDong</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1246">actions/checkout#1246</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/BrettDong"><code>@​BrettDong</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/checkout/pull/1246">actions/checkout#1246</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/actions/checkout/blob/main/CHANGELOG.md">actions/checkout's
changelog</a>.</em></p>
<blockquote>
<h1>Changelog</h1>
<h2>v4.1.7</h2>
<ul>
<li>Bump the minor-npm-dependencies group across 1 directory with 4
updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1739">actions/checkout#1739</a></li>
<li>Bump actions/checkout from 3 to 4 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1697">actions/checkout#1697</a></li>
<li>Check out other refs/* by commit by <a
href="https://github.com/orhantoy"><code>@​orhantoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1774">actions/checkout#1774</a></li>
<li>Pin actions/checkout's own workflows to a known, good, stable
version. by <a href="https://github.com/jww3"><code>@​jww3</code></a> in
<a
href="https://redirect.github.com/actions/checkout/pull/1776">actions/checkout#1776</a></li>
</ul>
<h2>v4.1.6</h2>
<ul>
<li>Check platform to set archive extension appropriately by <a
href="https://github.com/cory-miller"><code>@​cory-miller</code></a> in
<a
href="https://redirect.github.com/actions/checkout/pull/1732">actions/checkout#1732</a></li>
</ul>
<h2>v4.1.5</h2>
<ul>
<li>Update NPM dependencies by <a
href="https://github.com/cory-miller"><code>@​cory-miller</code></a> in
<a
href="https://redirect.github.com/actions/checkout/pull/1703">actions/checkout#1703</a></li>
<li>Bump github/codeql-action from 2 to 3 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1694">actions/checkout#1694</a></li>
<li>Bump actions/setup-node from 1 to 4 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1696">actions/checkout#1696</a></li>
<li>Bump actions/upload-artifact from 2 to 4 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1695">actions/checkout#1695</a></li>
<li>README: Suggest <code>user.email</code> to be
<code>41898282+github-actions[bot]@users.noreply.github.com</code> by <a
href="https://github.com/cory-miller"><code>@​cory-miller</code></a> in
<a
href="https://redirect.github.com/actions/checkout/pull/1707">actions/checkout#1707</a></li>
</ul>
<h2>v4.1.4</h2>
<ul>
<li>Disable <code>extensions.worktreeConfig</code> when disabling
<code>sparse-checkout</code> by <a
href="https://github.com/jww3"><code>@​jww3</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1692">actions/checkout#1692</a></li>
<li>Add dependabot config by <a
href="https://github.com/cory-miller"><code>@​cory-miller</code></a> in
<a
href="https://redirect.github.com/actions/checkout/pull/1688">actions/checkout#1688</a></li>
<li>Bump the minor-actions-dependencies group with 2 updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1693">actions/checkout#1693</a></li>
<li>Bump word-wrap from 1.2.3 to 1.2.5 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1643">actions/checkout#1643</a></li>
</ul>
<h2>v4.1.3</h2>
<ul>
<li>Check git version before attempting to disable
<code>sparse-checkout</code> by <a
href="https://github.com/jww3"><code>@​jww3</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1656">actions/checkout#1656</a></li>
<li>Add SSH user parameter by <a
href="https://github.com/cory-miller"><code>@​cory-miller</code></a> in
<a
href="https://redirect.github.com/actions/checkout/pull/1685">actions/checkout#1685</a></li>
<li>Update <code>actions/checkout</code> version in
<code>update-main-version.yml</code> by <a
href="https://github.com/jww3"><code>@​jww3</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1650">actions/checkout#1650</a></li>
</ul>
<h2>v4.1.2</h2>
<ul>
<li>Fix: Disable sparse checkout whenever <code>sparse-checkout</code>
option is not present <a
href="https://github.com/dscho"><code>@​dscho</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1598">actions/checkout#1598</a></li>
</ul>
<h2>v4.1.1</h2>
<ul>
<li>Correct link to GitHub Docs by <a
href="https://github.com/peterbe"><code>@​peterbe</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1511">actions/checkout#1511</a></li>
<li>Link to release page from what's new section by <a
href="https://github.com/cory-miller"><code>@​cory-miller</code></a> in
<a
href="https://redirect.github.com/actions/checkout/pull/1514">actions/checkout#1514</a></li>
</ul>
<h2>v4.1.0</h2>
<ul>
<li><a href="https://redirect.github.com/actions/checkout/pull/1396">Add
support for partial checkout filters</a></li>
</ul>
<h2>v4.0.0</h2>
<ul>
<li><a
href="https://redirect.github.com/actions/checkout/pull/1067">Support
fetching without the --progress option</a></li>
<li><a
href="https://redirect.github.com/actions/checkout/pull/1436">Update to
node20</a></li>
</ul>
<h2>v3.6.0</h2>
<ul>
<li><a
href="https://redirect.github.com/actions/checkout/pull/1377">Fix: Mark
test scripts with Bash'isms to be run via Bash</a></li>
<li><a href="https://redirect.github.com/actions/checkout/pull/579">Add
option to fetch tags even if fetch-depth &gt; 0</a></li>
</ul>
<h2>v3.5.3</h2>
<ul>
<li><a
href="https://redirect.github.com/actions/checkout/pull/1196">Fix:
Checkout fail in self-hosted runners when faulty submodule are
checked-in</a></li>
<li><a href="https://redirect.github.com/actions/checkout/pull/1287">Fix
typos found by codespell</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="692973e3d9"><code>692973e</code></a>
Prepare 4.1.7 release (<a
href="https://redirect.github.com/actions/checkout/issues/1775">#1775</a>)</li>
<li><a
href="6ccd57f4c5"><code>6ccd57f</code></a>
Pin actions/checkout's own workflows to a known, good, stable version.
(<a
href="https://redirect.github.com/actions/checkout/issues/1776">#1776</a>)</li>
<li><a
href="b17fe1e4d5"><code>b17fe1e</code></a>
Handle hidden refs (<a
href="https://redirect.github.com/actions/checkout/issues/1774">#1774</a>)</li>
<li><a
href="b80ff79f17"><code>b80ff79</code></a>
Bump actions/checkout from 3 to 4 (<a
href="https://redirect.github.com/actions/checkout/issues/1697">#1697</a>)</li>
<li><a
href="b1ec3021b8"><code>b1ec302</code></a>
Bump the minor-npm-dependencies group across 1 directory with 4 updates
(<a
href="https://redirect.github.com/actions/checkout/issues/1739">#1739</a>)</li>
<li><a
href="a5ac7e51b4"><code>a5ac7e5</code></a>
Update for 4.1.6 release (<a
href="https://redirect.github.com/actions/checkout/issues/1733">#1733</a>)</li>
<li><a
href="24ed1a3528"><code>24ed1a3</code></a>
Check platform for extension (<a
href="https://redirect.github.com/actions/checkout/issues/1732">#1732</a>)</li>
<li><a
href="44c2b7a8a4"><code>44c2b7a</code></a>
README: Suggest <code>user.email</code> to be
`41898282+github-actions[bot]<a
href="https://github.com/users"><code>@​users</code></a>.norepl...</li>
<li><a
href="8459bc0c7e"><code>8459bc0</code></a>
Bump actions/upload-artifact from 2 to 4 (<a
href="https://redirect.github.com/actions/checkout/issues/1695">#1695</a>)</li>
<li><a
href="3f603f6d5e"><code>3f603f6</code></a>
Bump actions/setup-node from 1 to 4 (<a
href="https://redirect.github.com/actions/checkout/issues/1696">#1696</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/actions/checkout/compare/v3...v4">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/checkout&package-manager=github_actions&previous-version=3&new-version=4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-08-06 21:03:51 -04:00
Yuri Shkuro f8975a5984
Create dependabot.yml
Signed-off-by: Yuri Shkuro <yurishkuro@users.noreply.github.com>
2024-08-06 18:04:13 -04:00
Yuri Shkuro 2e84c710f2 Remove npm from renovate.json
Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-08-06 17:25:36 -04:00
Yuri Shkuro 8f40818edb Add renovate.json
Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-08-06 16:32:52 -04:00
github-actions[bot] 4db93b42cb
Release release-1.60.0 (#721)
Release release-1.60.0. This PR is created from CI and is part of the
release process.

Signed-off-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
Co-authored-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
2024-08-06 15:03:44 -04:00
Jonah Kowall a0f35ea802
removing grpc plugin
Signed-off-by: Jonah Kowall <jkowall@kowall.net>
2024-08-06 13:45:18 -04:00
Yuri Shkuro ceba9daf49
Mention jaeger-cassandra-schema Docker image (#720)
## Which problem is this PR solving?
- We seem to be completely lacking documentation on using this image to
create DB schema

## Description of the changes
- Add example of using the image

## How was this change tested?
```
$ docker run --env CQLSH_HOST=192.168.68.82 jaegertracing/jaeger-cassandra-schema:1.59.0
Checking if Cassandra is up at 192.168.68.82:9042.
WARNING: cqlsh was built against 5.0-beta1, but this server is 3.11.17.  All features may not work!

WARN: DESCRIBE|DESC was moved to server side in Cassandra 4.0. As a consequence DESRIBE|DESC will not work in cqlsh '6.2.0' connected to Cassandra '3.11.17', the version that you are connected to. DESCRIBE does not exist server side prior Cassandra 4.0.
Cassandra connection established.
Cassandra version detected:
3
Generating the schema for the keyspace jaeger_v1_dc1 and datacenter dc1.
Using template file /cassandra-schema/v004.cql.tmpl with parameters:
    mode = test
    datacenter = dc1
    keyspace = jaeger_v1_dc1
    replication = {'class': 'SimpleStrategy', 'replication_factor': '1'}
    trace_ttl = 172800
    dependencies_ttl = 0
    compaction_window_size = 96
    compaction_window_unit = MINUTES
WARNING: cqlsh was built against 5.0-beta1, but this server is 3.11.17.  All features may not work!
Schema generated.
```

Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-08-01 20:21:43 -04:00
github-actions[bot] ce627d40dd
Release release-1.59.0 (#719)
Release release-1.59.0. This PR is created from CI and is part of the
release process.

Signed-off-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
Co-authored-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
2024-07-10 13:42:32 -04:00
Anmol ed20bcbeca
Fix grammar errors (#718)
Solving issue:-
[fix spelling issues #701]

Grammatical errors have been corrected in the docs next-release/*.md
replaces closed PR #716

---------

Signed-off-by: Anmol Singh <anmol7344@gmail.com>
Signed-off-by: Yuri Shkuro <yurishkuro@users.noreply.github.com>
Co-authored-by: Yuri Shkuro <yurishkuro@users.noreply.github.com>
2024-07-04 19:20:06 +00:00
Raghuram Kannan 101c39db85
Add mentees for Jun-Aug 2024 (#712)
## Description of the changes
- Added mentees for LFX'24 Jun-Aug term and removed info about GSoC'24

## How was this change tested?
- 

## Checklist
- [x] I have read
https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md
- [x] I have signed all commits
- [ ] I have added unit tests for the new functionality
- [ ] I have run lint and test steps successfully
  - for `jaeger`: `make lint test`
  - for `jaeger-ui`: `yarn lint` and `yarn test`

---------

Signed-off-by: FlamingSaint <raghuramkannan400@gmail.com>
Signed-off-by: Yuri Shkuro <github@ysh.us>
Co-authored-by: Yuri Shkuro <github@ysh.us>
2024-06-15 19:21:56 -04:00
Yuri Shkuro 543329a1fd
Fix RSS feed parsing (#713)
## Which problem is this PR solving?
- Resolves #710 
- Replaces #711

## Description of the changes
- Remove the use of JSON proxy server, read RSS as XML directly
- Change field names accordingly

## How was this change tested?
- locally `make develop`

Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-06-15 18:51:33 -04:00
Yuri Shkuro 097291d6dc
Remove references to SpanMetrics Processor (#709)
## Which problem is this PR solving?
- Resolves https://github.com/jaegertracing/jaeger/issues/4736

Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-06-14 00:17:35 -04:00
github-actions[bot] 0936851fef
Release release-1.58.0 (#708)
Release release-1.58.0. This PR is created from CI and is part of the
release process.

Signed-off-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
Co-authored-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
2024-06-13 23:18:16 -04:00
hippie-danish 94f929e323
Fix typos in behaviour, ingestor (#706)
## Which problem is this PR solving?
-  part of #701 

## Description of the changes
- fixed typo behaviour , ingestor

## How was this change tested?
- make spellcheck

## Checklist
- [ ] I have read
https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md
- [ ] I have signed all commits
- [ ] I have added unit tests for the new functionality
- [ ] I have run lint and test steps successfully
  - for `jaeger`: `make lint test`
  - for `jaeger-ui`: `yarn lint` and `yarn test`

---------

Signed-off-by: danish siddiqui <danishsiddiqui040@gmail.com>
2024-05-26 18:19:31 -04:00
JeevaRamanathan d7cd6a1e65
Fix: Typo for both, initialization, variety (#705)
## Which problem is this PR solving?
- Part of #701 


## Checklist
- [x] I have read
https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md
- [x] I have signed all commits

Signed-off-by: JeevaRamanathan <jeevaramanathan.m@infosys.com>
2024-05-13 18:15:16 -04:00
JeevaRamanathan 663b65db49
Fix: Typo for diligence,distributed,documenting,controlled (#704)
## Which problem is this PR solving?
- Resolves #701 


## Checklist
- [x] I have read
https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md
- [x] I have signed all commits

---------

Signed-off-by: Jeeva Ramanathan <jeevaramanathan.m@infosys.com>
Signed-off-by: Yuri Shkuro <github@ysh.us>
Co-authored-by: Yuri Shkuro <github@ysh.us>
2024-05-13 12:08:12 -04:00
tico88612 16a738b8a6
Remove: support ElasticSearch 5.x & 6.x (#703)
## Which problem is this PR solving?
- Relate https://github.com/jaegertracing/jaeger/issues/5439

## Description of the changes
- Remove ElasticSearch 5.x & 6.x documentation

## How was this change tested?
- Manual

## Checklist
- [x] I have read
https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md
- [x] I have signed all commits
- [ ] I have added unit tests for the new functionality
- [ ] I have run lint and test steps successfully
  - for `jaeger`: `make lint test`
  - for `jaeger-ui`: `yarn lint` and `yarn test`

Signed-off-by: tico88612 <17496418+tico88612@users.noreply.github.com>
2024-05-11 23:41:44 -04:00
Yuri Shkuro ee52c3dd1f
Remove grpc-plugin storage type (#702)
## Which problem is this PR solving?
- Part of https://github.com/jaegertracing/jaeger/issues/4647

## Description of the changes
- Replace `grpc-plugin` with `grpc` where applicable, remove otherwise.

## How was this change tested?
- CI

---------

Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-05-11 19:16:18 -04:00
Marcin Ziółkowski 9da1045f9f
Fix typo in OpenTelemetry (#700)
## Which problem is this PR solving?
a typo in troubleshooting.MD

Surprisingly, the spellcheck didn't pick this one up, probably due to
the Markdown hashtags being interpreted as a comment.

![image](https://github.com/jaegertracing/documentation/assets/62351083/d790d827-d0e6-453b-9d25-8bdd1a7c3ff1)



## Checklist
- [ X] I have read
https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md
- [ X] I have signed all commits
- [ ] I have added unit tests for the new functionality
- [ ] I have run lint and test steps successfully
  - for `jaeger`: `make lint test`
  - for `jaeger-ui`: `yarn lint` and `yarn test`

---------

Signed-off-by: Marcin Ziółkowski <62351083+MA3CIN@users.noreply.github.com>
Signed-off-by: MA3CIN <marcin.zet@onet.pl>
2024-05-11 11:29:11 -04:00
Vamshi Maskuri 70a5b15409
Github Action Added to Block PRs from fork/main branch (#699) 2024-05-05 17:12:42 -04:00
github-actions[bot] 5135a1ae50
Release release-1.57.0 (#696)
Release release-1.57.0. This PR is created from CI and is part of the
release process.

Signed-off-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
Co-authored-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
2024-05-02 21:46:50 +10:00
Yuri Shkuro 5ef00ac9be
Replace JAEGER_DISABLED with OTEL_TRACES_SAMPLER (#695)
## Which problem is this PR solving?
- Part of https://github.com/jaegertracing/jaeger/issues/5385

## Description of the changes
- Use OTEL env var that works with OTEL SDKs
- Update all docs starting from v1.48, when OTEL SDK were introduced

## How was this change tested?
- Verified that starting all-in-one as below does not generate traces
```
$ OTEL_TRACES_SAMPLER=always_off go run -tags=ui ./cmd/all-in-one
```

Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-05-01 21:46:06 -04:00
tico88612 89637b6f45
Fix: Navbar hover background color much darker (#690)
## Which problem is this PR solving?
- Resolves #658

## Description of the changes
- Navbar hover background color much darker

## How was this change tested?
- manual test

## Checklist
- [x] I have read
https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md
- [x] I have signed all commits
- [ ] I have added unit tests for the new functionality
- [ ] I have run lint and test steps successfully
  - for `jaeger`: `make lint test`
  - for `jaeger-ui`: `yarn lint` and `yarn test`

Signed-off-by: tico88612 <17496418+tico88612@users.noreply.github.com>
2024-04-05 12:26:23 -04:00
Ashutosh Srivastava 916ed3a751
Add Spell Checker to CI (#668)
## Which problem is this PR solving?
- Closes
[#665](https://github.com/jaegertracing/documentation/issues/665)

## Description of the changes
- Simply added a new cspell job to the existing ci-test workflow.
- Will perform the spell check in the content directory and its
subdirectories.
- Added the same set of dictionary as suggested in the reference PR in
the issue thread. (Let me know if any more words need to be added)

---------

Signed-off-by: Ashutosh Srivastava <ashutosh3002@gmail.com>
Signed-off-by: Yuri Shkuro <yurishkuro@users.noreply.github.com>
Signed-off-by: Yuri Shkuro <github@ysh.us>
Co-authored-by: Yuri Shkuro <yurishkuro@users.noreply.github.com>
Co-authored-by: Yuri Shkuro <github@ysh.us>
2024-04-04 17:36:15 -04:00
John Rowley c2ac9fa1ce
docs: moved jaeger-postgresql to remote plugin list (#692)
## Which problem is this PR solving?
- Updating documentation to reflect current state of jaeger-postgresql
plugin. The plugin currently uses the remote storage interface.

## Description of the changes
-  Moves jaeger-postgresql to the remote storage backend plugin list.

## How was this change tested?
- N/A

Signed-off-by: John Rowley <johnrowleyster@gmail.com>
2024-04-03 23:17:58 -04:00
github-actions[bot] 9a22d41ec1
Release release-1.56.0 (#691)
Release release-1.56.0. This PR is created from CI and is part of the
release process.

Signed-off-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
Co-authored-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
2024-04-03 17:36:23 -04:00
Yuri Shkuro f15ab41b1c Add Makefile target for tagging a release
Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-04-03 17:32:11 -04:00
tico88612 2095173da6
Fix: Single page header anchor (#689)
## Which problem is this PR solving?
- Resolves #674

## Description of the changes
- Fix single page header anchor

## How was this change tested?
- Manual test

## Checklist
- [x] I have read
https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md
- [x] I have signed all commits
- [ ] I have added unit tests for the new functionality
- [ ] I have run lint and test steps successfully
  - for `jaeger`: `make lint test`
  - for `jaeger-ui`: `yarn lint` and `yarn test`

Signed-off-by: tico88612 <17496418+tico88612@users.noreply.github.com>
2024-03-24 12:24:55 -04:00
John Rowley 4d627e8bba
Add jaeger-postgresql to storage plugins list (#684)
## Which problem is this PR solving?
This PR lists the postgres-jaeger storage plugin that I maintain to the
storage plugins list.


## Description of the changes
Adds a link to the storage plugin list.

## How was this change tested?
It was visually checked.

![image](https://github.com/jaegertracing/documentation/assets/3454480/75592214-10c7-4338-b3f7-c5d009386eef)

## Checklist
- [X] I have read
https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md
- [X] I have signed all commits
- [X] I have added unit tests for the new functionality
- [X] I have run lint and test steps successfully
  - for `jaeger`: `make lint test`
  - for `jaeger-ui`: `yarn lint` and `yarn test`

Signed-off-by: John Rowley <johnrowleyster@gmail.com>
2024-03-22 14:56:51 +01:00
Yuri Shkuro 562fba4c95
List all storage backends are currently supported for adaptive sampling (#688)
Replaces https://github.com/jaegertracing/documentation/pull/676

---------

Signed-off-by: Pushkar Mishra <pushkarmishra029@gmail.com>
Signed-off-by: Yuri Shkuro <github@ysh.us>
Co-authored-by: Pushkar Mishra <pushkarmishra029@gmail.com>
2024-03-20 19:03:23 -04:00
tico88612 d9825f3b50
Add Badger file permissions as non-root service link (#686)
## Which problem is this PR solving?
- Resolves #683

## Description of the changes
- Add Badger file permissions as non-root service link

## How was this change tested?
- No

## Checklist
- [x] I have read
https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md
- [x] I have signed all commits
- [ ] I have added unit tests for the new functionality
- [ ] I have run lint and test steps successfully
  - for `jaeger`: `make lint test`
  - for `jaeger-ui`: `yarn lint` and `yarn test`

Signed-off-by: tico88612 <17496418+tico88612@users.noreply.github.com>
2024-03-19 22:55:57 -04:00
tico88612 5aeb97b026
Move "Upgrade Badger v1 to v3" (#685)
## Which problem is this PR solving?
- Resolves #682
- Related https://github.com/jaegertracing/jaeger/pull/5276

## Description of the changes
- `Upgrade Badger v1 to v3` redirect to `jaeger`

## How was this change tested?
- Manual test

## Checklist
- [x] I have read
https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md
- [x] I have signed all commits
- [ ] I have added unit tests for the new functionality
- [ ] I have run lint and test steps successfully
  - for `jaeger`: `make lint test`
  - for `jaeger-ui`: `yarn lint` and `yarn test`

Signed-off-by: tico88612 <17496418+tico88612@users.noreply.github.com>
2024-03-16 23:13:04 -04:00
Harshvir Potpose cb9ff33ac8
Add GSoC 2024 Application Dates (#681) 2024-03-07 10:12:17 -05:00
github-actions[bot] 58a41dab44
Release release-1.55.0 (#680) 2024-03-07 02:32:25 -05:00
Harshvir Potpose 5ac5a79cff
Add LFX mentorship march-may 2024 (Term 1) mentees (#679)
- added LFX mentorship march-may 2024 (Term 1) mentees

---------

Signed-off-by: Harshvir Potpose <hpotpose62@gmail.com>
2024-03-06 16:56:03 -05:00
tico88612 f701acb2d4
Fix Medium's post thumbnail (#678)
## Which problem is this PR solving?
- Resolves #677

## Description of the changes
- Fix Medium's post thumbnail
- Solution following:
https://medium.com/@kartikyathakur/getting-those-thumbnails-from-medium-rss-feed-183f74aefa8c

## How was this change tested?
- Manual test

## Checklist
- [x] I have read
https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md
- [x] I have signed all commits
- [ ] I have added unit tests for the new functionality
- [ ] I have run lint and test steps successfully
  - for `jaeger`: `make lint test`
  - for `jaeger-ui`: `yarn lint` and `yarn test`

Signed-off-by: tico88612 <17496418+tico88612@users.noreply.github.com>
2024-03-06 12:56:35 -05:00
tico88612 82d6bdffd9
Upgrade Hugo 0.123.6 & fix related warning and error (#675)
## Which problem is this PR solving?
- Resolves #669 

## Description of the changes
- Upgrade Hugo latest version (0.123.6)
- Fix warning Remove deprecated disableKinds `taxonomyTerm`
- Fix error `.File.Path` nil pointer problem
- Fix warning no layout file for "html" for kind "section"
- Fix warning hugo verbose deprecated
- Fix Hugo 0.123.x remove symlink support
- Fix .Site.IsServer deprecated in Hugo v0.120.0
- Fix data.GetJSON deprecated in Hugo v0.123.0

### FYI

-
https://discourse.gohugo.io/t/path-when-the-page-is-backed-by-a-file-is-deprecated/36842
- https://github.com/gohugoio/hugo/issues/11556
-
92684f9a26/commands/commandeer.go (L138)

## How was this change tested?
- No, maybe we can discuss

## Checklist
- [x] I have read
https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md
- [x] I have signed all commits

---------

Signed-off-by: tico88612 <17496418+tico88612@users.noreply.github.com>
2024-03-04 22:12:03 -05:00
github-actions[bot] 08b96a308b
Release release-1.54.0 (#673)
Release release-1.54.0. This PR is created from CI and is part of the
release process.

Signed-off-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
Co-authored-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
2024-02-07 12:38:48 -05:00
Jonah Kowall 2c829b7e30
Add some additional clarification for mentees. (#672)
Based on some of the questions we are getting from our new Mentees we
wanted to add some additional pointers and clarification ot make it
easier for them to get started.

Added link for the current ongoing LFX mentorship. 

## Checklist
- [X] I have read
https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md
- [X] I have signed all commits

Tested new page locally.

---------

Signed-off-by: Jonah Kowall <jkowall@kowall.net>
Signed-off-by: Yuri Shkuro <github@ysh.us>
Co-authored-by: Yuri Shkuro <github@ysh.us>
2024-02-06 18:45:35 -05:00
Yuri Shkuro 8e299be461
Disable links checking (#670)
## Which problem is this PR solving?
- Link checking currently fails, will open another issue to look into
it.

## Description of the changes
- Only do a build, don't check links

Signed-off-by: Yuri Shkuro <github@ysh.us>
2024-02-01 20:00:09 -05:00
github-actions[bot] c1d6d05ec0
Release 1.53.0 (#663)
Release release-1.53.0. This PR is created from CI and is part of the
release process.

Signed-off-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
Co-authored-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
2024-01-08 17:37:33 -05:00
github-actions[bot] 89aeb810e4
Release release-1.52.0 (#662)
Release release-1.52.0. This PR is created from CI and is part of the
release process.

Signed-off-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
Co-authored-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
2023-12-06 22:06:51 +11:00
Yuri Shkuro b8d1fff949 Indicate full support for ESv8 since 1.52
Signed-off-by: Yuri Shkuro <github@ysh.us>
2023-11-23 18:41:41 -05:00
Yuri Shkuro 4bb360ff4d Clarify support for Elasticsearch 8.x
Closes #661 (replacement)

Signed-off-by: Yuri Shkuro <github@ysh.us>
2023-11-21 21:47:43 -05:00
Albert 855ca70bf6
Add troubleshooting notes (#660)
## Which problem is this PR solving?

Document the troubleshooting steps taken while investigating [this
support
question](https://cloud-native.slack.com/archives/CGG7NFUJ3/p1699539239671519).

One of the problems faced by users was caused by [OpenTelemetry
Collector Contrib
v0.85.0](https://github.com/open-telemetry/opentelemetry-collector-contrib/releases/tag/v0.85.0)
introducing a breaking change to enable normalized metric names by
default:

> `prometheusexporters`: Append prometheus type and unit suffixes by
default in prometheus exporters.
(https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/26488)
Suffixes can be disabled by setting add_metric_suffixes to false on the
exporter.

Relates to: https://github.com/jaegertracing/jaeger/pull/4957

## Description of the changes
- Adds the following troubleshooting guides:
- Inspecting the Prometheus queries that Jaeger makes to fetch data for
the Monitor tab.
- Inspecting OpenTelemetry config to troubleshoot a possible cause for
missing error metrics.
- Updates only made from when SPM defaulted to supporting the
spanmetrics connector, which was
[v1.49.0](https://github.com/jaegertracing/jaeger/releases/tag/v1.49.0).

## Checklist
- [x] I have read
https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md
- [x] I have signed all commits
~- [ ] I have added unit tests for the new functionality~
~- [ ] I have run lint and test steps successfully~

---------

Signed-off-by: Albert Teoh <albert@packsmith.io>
Co-authored-by: Albert Teoh <albert@packsmith.io>
2023-11-18 00:07:10 -05:00
github-actions[bot] aacddd0efb
Release release-1.51.0 (#659)
Release release-1.51.0. This PR is created from CI and is part of the
release process.

Signed-off-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
Co-authored-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
2023-11-17 11:27:42 -05:00
Yuri Shkuro b25eda44fc Document OTLP endpoints better
Signed-off-by: Yuri Shkuro <github@ysh.us>
2023-11-17 11:20:27 -05:00
Yuri Shkuro 7dbb843ad4 Indicate the correct gRPC port on query-service
Signed-off-by: Yuri Shkuro <github@ysh.us>
2023-11-07 17:20:10 -05:00
Yuri Shkuro b4fe14a344 Add link to UI config schema
Signed-off-by: Yuri Shkuro <github@ysh.us>
2023-10-31 19:15:24 -04:00
Yuri Shkuro 97524d35c2 Add reference to quay.io
Signed-off-by: Yuri Shkuro <github@ysh.us>
2023-10-20 16:47:05 -04:00
Yuri Shkuro cefeab1b9b Add external link icon rendering
Signed-off-by: Yuri Shkuro <github@ysh.us>
2023-10-17 15:22:37 -04:00
Yuri Shkuro be8c268411 update-security
Signed-off-by: Yuri Shkuro <github@ysh.us>
2023-10-13 10:25:35 -04:00
github-actions[bot] 152e4b309c
Release release-1.50.0 (#657)
Release release-1.50.0. This PR is created from CI and is part of the
release process.

Signed-off-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
Co-authored-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
2023-10-08 15:48:42 +11:00
Yuri Shkuro a25acad72a Keep a progress log
Signed-off-by: Yuri Shkuro <github@ysh.us>
2023-10-04 12:52:46 -04:00
Yuri Shkuro 502ba1e4cd Provide org-level links to help-wanted issues
Signed-off-by: Yuri Shkuro <github@ysh.us>
2023-09-14 15:13:47 -04:00
Yuri Shkuro f1f6a5e8f6 Emphasize message about jaeger-agent
Signed-off-by: Yuri Shkuro <github@ysh.us>
2023-09-11 19:39:12 -04:00
Yuri Shkuro bf25cda794
Tag jaeger-agent as deprecated in Downloads (#656)
Step 1 of https://github.com/jaegertracing/jaeger/issues/4739

Signed-off-by: Yuri Shkuro <github@ysh.us>
2023-09-11 13:31:22 -04:00
Yuri Shkuro 39d36bd6b4
Update architecture diagrams to recommend OTEL SDK with OTLP (#655)
## Which problem is this PR solving?
- People keep asking in the chat about OTEL's "jaeger exporters", which
are being phased out

## Description of the changes
- Update 2023 architecture diagrams by replacing "Tracing SDK" with
"OpenTelemetry SDK (with OTLP exporter)"
- Since OTLP was already supported last year, but 2023 diagrams are only
used in docs since v1.43 (Mar 2023), it's ok to apply the updated
diagrams retroactively from v1.43

Signed-off-by: Yuri Shkuro <github@ysh.us>
2023-09-10 17:16:01 -04:00
Yuri Shkuro f080597012
Use better icons on home page and fix Slack icon (#654)
## Description of the changes
- update some material-ui icons to better match the features being
called out
- fix the size of Slack icon in the footer

Signed-off-by: Yuri Shkuro <github@ysh.us>
2023-09-09 15:35:01 -04:00
Yuri Shkuro e3af450e1c
Add welcome/contributing section to the home page (#653)
Signed-off-by: Yuri Shkuro <github@ysh.us>
2023-09-09 12:51:43 -04:00
github-actions[bot] e431e64e5f
Release release-1.49.0 (#652)
Release release-1.49.0. This PR is created from CI and is part of the
release process.

Signed-off-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
Co-authored-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
2023-09-07 14:32:23 -04:00
Yuri Shkuro 11cbedc154 Change copy-code button bottom margin
To prevent main text being shifted down

Signed-off-by: Yuri Shkuro <github@ysh.us>
2023-08-31 20:33:08 -04:00
Yuri Shkuro c53f99674d
Describe criteria for mentorship applications (#651)
Signed-off-by: Yuri Shkuro <github@ysh.us>
2023-08-30 17:25:29 -04:00
Yuri Shkuro b92f905142 Update Fall mentorship info
Signed-off-by: Yuri Shkuro <github@ysh.us>
2023-08-30 10:57:35 -04:00
Yuri Shkuro cbf4222c56
Fix instructions for running HotROD (#650)
## Description of the changes
- Address
https://github.com/jaegertracing/documentation/pull/648/files#r1302207961
- Fix Docker commands

## How was this change tested?
- Ran locally

Signed-off-by: Yuri Shkuro <github@ysh.us>
2023-08-24 17:36:35 -04:00
github-actions[bot] b8ac666f1d
Release release-1.48.0 (#649)
Release release-1.48.0. This PR is created from CI and is part of the
release process.

Signed-off-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
Co-authored-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
2023-08-22 02:37:57 -04:00
Yuri Shkuro 6d6d2c549a
Refresh the docs with better language (#648)
## Description of the changes
- Remove some references to OpenTracing
- Provide links to HotROD blog
- Update wording on the home page and some intro pages

Signed-off-by: Yuri Shkuro <github@ysh.us>
2023-08-22 02:32:02 -04:00
Yuri Shkuro bd4e37352c
Change Ukraine call to action to a top banner (#647)
## Description of the changes
- Make Ukraine banner visible on all pages, not just the home page
- Link to the official ukraine.ua website
- Inspired by namecheap.com's banner

Signed-off-by: Yuri Shkuro <github@ysh.us>
2023-08-21 14:48:36 -04:00
Yuri Shkuro 1b655f7081 Add links
Signed-off-by: Yuri Shkuro <github@ysh.us>
2023-08-14 13:57:47 -04:00
Yuri Shkuro 8456ad0cc1 Undo erroneous change of OTEL Collector -> jaeger-collector
Signed-off-by: Yuri Shkuro <github@ysh.us>
2023-08-10 11:37:08 -04:00
Yuri Shkuro b8e14b1cea Update get-in-touch
* add SO
* add link to Discussions
* remove reference to SDK repos

Signed-off-by: Yuri Shkuro <github@ysh.us>
2023-07-30 15:44:37 -04:00
Yuri Shkuro edda500ce0 Add a reference to OTEL Collector Troubleshooting guide
Signed-off-by: Yuri Shkuro <github@ysh.us>
2023-07-12 11:52:01 -04:00
github-actions[bot] 3fea5595d9
Release release-1.47.0 (#644) 2023-07-07 09:59:52 -04:00
Moritz Wiesinger 3183e363c3
Fix typo in Kubernetes installation docs (#643)
## Which problem is this PR solving?
- fixes some typos in the jaeger operator installation guide
- `ClusterBindingRole` -> `ClusterRoleBinding`

---------

Signed-off-by: Moritz Wiesinger <moritz.wiesinger@dynatrace.com>
2023-07-05 17:59:48 +10:00
Yuri Shkuro 93d33899eb [spm] Mention the new flag in Configuration section
Signed-off-by: Yuri Shkuro <github@ysh.us>
2023-06-05 11:25:37 -04:00
Yuri Shkuro ef5dd20e3c Clarify SpanMetrics Connector migration
* Add explicit reference to adding a new CLI flag
  * Resolves https://github.com/jaegertracing/jaeger/issues/4502
* Fix `[x][y]` links that are not rendered correctly in `{{< info >}}` banner

Signed-off-by: Yuri Shkuro <github@ysh.us>
2023-06-05 11:19:06 -04:00
github-actions[bot] 48388e88eb
Release release-1.46.0 (#642)
Release release-1.46.0. This PR is created from CI and is part of the
release process.

Signed-off-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
Co-authored-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
2023-06-05 00:30:26 -04:00
Yuri Shkuro bcce1811c2 Link to mentorships
Signed-off-by: Yuri Shkuro <github@ysh.us>
2023-06-04 23:59:47 -04:00
Yuri Shkuro 5c15edbf94 Add log template
Signed-off-by: Yuri Shkuro <github@ysh.us>
2023-06-04 15:44:21 -04:00
Albert f4772434a9
Update SPM docs to reflect support for spanmetrics connector (#640)
Updates the SPM documentation to reflect support for the spanmetrics connector.
Provides link referencing documentation that provides guidance for migrating to the spanmetrics connector.
Provides version compatibility guidance between jaeger and OTEL.
2023-06-03 23:01:52 +10:00
Albert c859bfe536
Add 'for mentees' and 'for mentors' pages (#641)
## Which problem is this PR solving?
- We are missing mentorship onboarding documentation, to offer guidance
to those new to making open source contributions.

## Short description of the changes
- Add separate "For Mentees" and "For Mentors" pages, containing various
guidelines on contributing to Jaeger and on the mentorship programs in
general.

Signed-off-by: albertteoh <see.kwang.teoh@gmail.com>
2023-06-02 18:01:20 -04:00
Yuri Shkuro d408b4a741 Update with new class of mentees
Signed-off-by: Yuri Shkuro <github@ysh.us>
2023-06-01 12:06:54 -04:00
Yuri Shkuro 9fd06a2950
Add mentorship page (#639) 2023-05-20 16:16:36 -04:00
Čedomir Krsmanović 16f0a66fbb
Fix OTEL specification sdk-environment-variables document URL (#638)
## Which problem is this PR solving?
- Upstream documentation in
https://github.com/open-telemetry/opentelemetry-specification repository
was relocated, leaving Jaeger documentation with broken links.

## Short description of the changes
- We are updating upstream URLs in Jaeger configuration.

Signed-off-by: krsmanovic <cedo.krsmanovic@gmail.com>
2023-05-19 17:20:02 -04:00
Rory ff6acc2148
Fix link to Operators info (#637)
CoreOS.com redirects to generic OpenShift page now

## Which problem is this PR solving?
Resolves #636

## Short description of the changes
Changed
https://coreos.com/operators/
To

https://kubernetes.io/docs/concepts/extend-kubernetes/operator/
-
2023-05-11 19:27:30 -04:00
Saarthak Maini 6732d5698e
Fix Broken Link (#635) 2023-05-09 09:22:16 -04:00
github-actions[bot] 9809c093e3
Release release-1.45.0 (#633)
Release release-1.45.0. This PR is created from CI and is part of the
release process.

Signed-off-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
Co-authored-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
2023-05-06 07:56:39 +10:00
Yuri Shkuro 13e258137e
Add question to FAQs about authentication (#631) 2023-04-25 21:38:51 -04:00
Yuri Shkuro 0cee2fa95e
Add troubleshooting steps for remote sampling (#630) 2023-04-23 18:21:52 -04:00
Saarthak Maini b87ff3a5d9
Consistent Naming For Jaeger Components (#629)
Fixes #612

Naming Convention Of:

- apis.md
- deployment.md
- faq.md
- getting-started.md

made consistent with the guidelines given in the issue

Signed-off-by: Saarthak <saarthakmaini@gmail.com>
2023-04-15 13:33:50 -04:00
Saarthak Maini d886371e7a
Consistent Naming For Jaeger Components (#628)
## Which problem is this PR solving?
- #612 

## Short description of the changes
Naming Convention of :
-  performance-tuning.md
- sampling.md
- security.md 
- troubleshooting.md 

made consistent with the guidelines given in issue

Signed-off-by: Saarthak <saarthakmaini@gmail.com>
2023-04-12 18:08:44 -04:00
Saarthak Maini 64ad8e3f3e
Consistent Naming For Jaeger Components (#626)
As stated in issue #612, this commit replaces the Capitalized component
names with binary names in operator.md file

## Short description of the changes

- Use of binary name, such as **jaeger-agent**, **jaeger-collector**,
**jaeger-query**
- Remove prefix "the"
- Make plural forms by adding s after the bold portion, i.e.
**jaeger-collector**s == jaeger-collectors
- Similarly, make possessive forms by adding 's after the bold portion,
i.e. **jaeger-collector**'s == jaeger-collector's

Signed-off-by: Saarthak <saarthakmaini@gmail.com>
2023-04-10 17:15:05 -04:00
github-actions[bot] e3c96010fc
Release release-1.44.0 (#627)
Release release-1.44.0. This PR is created from CI and is part of the
release process.

Signed-off-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
Co-authored-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
2023-04-10 16:59:41 -04:00
Albert 150dd4dba3
Add troubleshooting guide for 403 error (#625) 2023-04-08 10:58:30 -04:00
Maxim Korolyov 4213b9df45
add a note about scylladb as a storage backend to deployment.md (#623)
## Which problem is this PR solving?

This PR solves the lack of documentation regarding the use of ScyllaDB
as a drop-in replacement for Cassandra in Jaeger tracing server
deployment. By providing clear instructions on how to configure the
CASSANDRA_SERVERS environment variable, users can easily switch to
ScyllaDB for enhanced performance and compatibility without any
additional changes to their existing setup.

## Short description of the changes

This PR adds a note to the Jaeger tracing server deployment
documentation, explaining how to configure the system to use ScyllaDB as
a drop-in replacement for Cassandra by simply updating the
CASSANDRA_SERVERS environment variable to point to ScyllaDB hosts.

---------

Signed-off-by: Maxim Korolyov <mkorolyov@weatherwell.app>
Signed-off-by: Maxim Korolyov <korolyov.maxim@gmail.com>
2023-04-06 13:07:57 -04:00
Helio Frota 3c2076505f
Fix typos (#621)
Signed-off-by: Helio Frota <00hf11@gmail.com>
2023-04-05 02:16:37 -04:00
Jonah Kowall 162794986b
Updated roadmap with a few removals and an addition (#620) 2023-04-01 11:09:11 -04:00
Utsav Oza 4fc0dcefbe
Add reference link for Cassandra schema management (#619)
## Which problem is this PR solving?
- https://github.com/jaegertracing/jaeger/issues/4284

## Short description of the changes
- Adds a reference link for Cassandra schema management.

---------

Signed-off-by: Utsav Oza <utsavoza96@gmail.com>
2023-03-16 22:52:50 -04:00
github-actions[bot] 531466d6cf
Release release-1.43.0 (#618)
Release release-1.43.0. This PR is created from CI and is part of the
release process.

Signed-off-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
Co-authored-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
2023-03-16 10:53:29 +01:00
Albert 3f47b0d3b8
Add SDK, collector and trace storage in arch diagram (#617)
## Which problem is this PR solving?
- Resolves #616

## Short description of the changes
- Adds OTEL SDK, OTLP exporter, Jaeger collector and trace storage to
architecture diagram to provide a more complete picture of the
components involved for SPM.

Rendered diagram:

<img width="783" alt="Screenshot 2023-03-11 at 7 30 03 am"
src="https://user-images.githubusercontent.com/26584478/224422491-a9a6b33f-37b8-492d-9fd7-deb6da47c5bf.png">

---------

Signed-off-by: albertteoh <see.kwang.teoh@gmail.com>
2023-03-10 16:32:20 -05:00
Jonah Kowall a37d2834bd
Improved docs for supported backends, removed monitor tab and SPM experimental mentions. (#615) 2023-02-27 09:49:14 -05:00
Yuri Shkuro 941353d0fe
Use **jaeger-ingester** instead of Ingester (#613)
## Which problem is this PR solving?
- #612

## Short description of the changes
- per title

After this change:
```shell
$ grep -rine '[^-]ingester' content/docs/next-release
content/docs/next-release/architecture.md:125:### Ingester
content/docs/next-release/deployment.md:174:## Ingester
content/docs/next-release/deployment.md:706:into a Kafka topic. [**jaeger-ingester**](#ingester) is used to read from
content/docs/next-release/operator.md:286:**jaeger-ingester** can also be configured to autoscale on demand. By default, when no value for `.Spec.Ingester.Replicas` is provided, the Jaeger Operator will create a Horizontal Pod Autoscaler (HPA) configuration for **jaeger-ingester**. We recommend setting an explicit value for `.Spec.Ingester.MaxReplicas`, along with a reasonable value for the resources that **jaeger-ingester**'s pod is expected to consume. When no `.Spec.Ingester.MaxReplicas` is set, the operator will set `100` as its value. Read more about HPA on [Kubernetes' website](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/). The feature can be explicitly disabled by setting `.Spec.Ingester.Autoscale` to `false`. Here's an example, setting **jaeger-ingester**'s limits as well as the maximum number of replicas:
content/docs/next-release/operator.md:295:  ingester:
content/docs/next-release/operator.md:309:The only additional information required is to provide the details for accessing the Kafka platform, which is configured in the `collector` component (as producer) and `ingester` component (as consumer):
content/docs/next-release/operator.md:324:  ingester:
content/docs/next-release/operator.md:330:      ingester:
```

---------

Signed-off-by: Yuri Shkuro <github@ysh.us>
2023-02-20 12:55:23 -05:00
Guangwen Feng f6224cb825
Fix typo (#611) 2023-02-20 10:42:24 -05:00
Yuri Shkuro 523db89af5
Show deployments with OpenTelemetry Collector (#610)
## Which problem is this PR solving?
- https://github.com/jaegertracing/documentation/issues/608

## Short description of the changes
- Add new diagrams showing possible deployments with OTEL Collector

Signed-off-by: Yuri Shkuro <github@ysh.us>
2023-02-19 16:27:09 -05:00
Yuri Shkuro ddc8df0a95
De-emphasize jaeger-agent (#609)
## Which problem is this PR solving?
- https://github.com/jaegertracing/documentation/issues/608

## Short description of the changes
- Add warnings that Agent is no longer needed

---------

Signed-off-by: Yuri Shkuro <github@ysh.us>
2023-02-19 16:13:50 -05:00
Yuri Shkuro 53c3d39616
Update Architecture page with more emphasis on OTEL; deprecate agent (#607)
## Which problem is this PR solving?
- Related to https://github.com/jaegertracing/jaeger/issues/4241

## Short description of the changes
- Use new diagrams
- Emphasize OTEL more
- Mark Agent deprecated

Signed-off-by: Yuri Shkuro <github@ysh.us>
2023-02-19 15:36:33 -05:00
Yuri Shkuro fd2eeae56e Use logo with fixed transparency
Fixes #463

Signed-off-by: Yuri Shkuro <github@ysh.us>
2023-02-16 14:37:23 -05:00
Saarthak Maini 5d6eb845dd
Fix Broken Links (#605)
Replaced deprecated links with currently active links

Signed-off-by: Saarthak <saarthakmaini@gmail.com>

## Which problem is this PR solving?
Resolves #604

## Short description of the changes
- Updated the deprecated broken links with the currently available and
latest links

---------

Signed-off-by: Saarthak <saarthakmaini@gmail.com>
2023-02-14 23:26:53 -05:00
Yuri Shkuro e1fd40296c Spaces to tabs
Signed-off-by: Yuri Shkuro <github@ysh.us>
2023-02-10 15:59:06 -05:00
Yuri Shkuro 69a72d6547 Fix issing Docs menu on home page
Signed-off-by: Yuri Shkuro <github@ysh.us>
2023-02-10 15:57:17 -05:00
Yuri Shkuro 5004730332
Add test workflow (#603)
* Add test workflow that runs the build and checks local links
2023-02-10 15:45:50 -05:00
Yuri Shkuro 4f2787a52b Fix broken links
Signed-off-by: Yuri Shkuro <github@ysh.us>
2023-02-10 14:33:51 -05:00
Yuri Shkuro 62fafef710 Fix broken links
Signed-off-by: Yuri Shkuro <github@ysh.us>
2023-02-10 13:18:27 -05:00
Yuri Shkuro 60c00ad10b Fix Influxdb plugin link
Signed-off-by: Yuri Shkuro <github@ysh.us>
2023-02-10 10:40:58 -05:00
Kanahathi Mohideen 29b4851aca
Add documentation for jaeger ui PR#1178 (#602)
Updating the documentation for the linkPatterns change done in jaeger ui
in PR https://github.com/jaegertracing/jaeger-ui/pull/1178

Signed-off-by: Kanahathi Mohideen <kpmfazal@gmail.com>
2023-02-08 18:02:12 -05:00
Yuri Shkuro 0d006f026b
Remove Promscale from docs (#601)
[Promscale has been
discontinued](https://github.com/timescale/promscale/issues/1836#top)
2023-02-08 10:39:10 -05:00
github-actions[bot] 0bd2f40c20
Release release-1.42.0 (#600)
Release release-1.42.0. This PR is created from CI and is part of the
release process.

Signed-off-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
Co-authored-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
2023-02-05 17:22:22 -05:00
Yuri Shkuro a1cde56a05
Mark remote sampling API as stable (#599)
## Which problem is this PR solving?
- Related to
https://github.com/open-telemetry/opentelemetry-specification/issues/3126

## Short description of the changes
- Describe remote sampling API as official / stable, with examples.
- Mark `/` endpoint on the agent as deprecated / not recommended.
- Replace references to "Jaeger clients" with general "SDKs" where
appropriate.
- Add more warnings that Jaeger clients are deprecated.
- Mention OTLP/JSON format as accepted.
- Fix the positioning of the `Copy` button in the code snippets.
2023-01-25 19:05:08 -05:00
Yuri Shkuro 038c2c5946 Clarify /sampling endpoint in the agent
Signed-off-by: Yuri Shkuro <github@ysh.us>
2023-01-09 13:09:33 -05:00
Yuri Shkuro bf3fdec035 Describe /api/sampling endpoint in collector
Signed-off-by: Yuri Shkuro <github@ysh.us>
2023-01-09 13:03:47 -05:00
github-actions[bot] 4fccb87520
Release 1.41.0 (#598)
Signed-off-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>

Signed-off-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
Co-authored-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
2023-01-04 19:10:51 +11:00
Yuri Shkuro 6d06cc2da6 Fix grammar
Signed-off-by: Yuri Shkuro <github@ysh.us>
2022-12-19 19:36:21 -05:00
Yuri Shkuro 416776a7d8 Use new CNCF-Graduated logo
Signed-off-by: Yuri Shkuro <github@ysh.us>
2022-12-15 11:34:05 -05:00
Yuri Shkuro 871c43a939 Add .vscode/ to .gitignore
Signed-off-by: Yuri Shkuro <github@ysh.us>
2022-12-14 14:24:18 -05:00
Yuri Shkuro 4e3a846665
Document scaling of Ingesters (#597) 2022-12-14 14:22:14 -05:00
Joe Elliott 5202c2f2ba
remove note (#596)
Signed-off-by: Joe Elliott <number101010@gmail.com>

Signed-off-by: Joe Elliott <number101010@gmail.com>
2022-12-09 10:23:11 -05:00
github-actions[bot] ac7b08bdf2
Release 1.40.0 (#595)
Signed-off-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>

Signed-off-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
Co-authored-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
2022-12-09 10:05:38 -05:00
Piotr Klubinski c48d249fc1
added description about custom CNI issue (#582) 2022-12-06 09:50:16 -05:00
Yuri Shkuro 1990d788a6 Point to GitHub vulnerability reporting and clean-up text
Signed-off-by: Yuri Shkuro <github@ysh.us>
2022-11-21 12:11:11 -05:00
Yuri Shkuro b6d45d0309
Add instructions for validating checksums and signatures (#594) 2022-11-09 15:12:27 -05:00
Yuri Shkuro 974f2efab3 Fix typo
Resolves #593

Ran command:

```sh
grep -rl environmebt content | xargs sed -i '' 's/environmebt/environment/g'
```

Signed-off-by: Yuri Shkuro <github@ysh.us>
2022-11-06 13:21:03 -05:00
github-actions[bot] bb39918085
Release 1.39.0 (#592)
Signed-off-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>

Signed-off-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
Co-authored-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
2022-11-06 14:29:16 +01:00
Pavol Loffay 836dbff903 Remove branch from GHA release condition
Signed-off-by: Pavol Loffay <p.loffay@gmail.com>
2022-11-06 14:25:55 +01:00
Pavol Loffay 47232d5804 Update checkout action
Signed-off-by: Pavol Loffay <p.loffay@gmail.com>
2022-11-06 14:12:39 +01:00
Pavol Loffay d24e55f27d Remove permissions for release
Signed-off-by: Pavol Loffay <p.loffay@gmail.com>
2022-11-02 09:40:15 +01:00
Pavol Loffay 446151acc3 Add permissions for release
Signed-off-by: Pavol Loffay <p.loffay@gmail.com>
2022-11-02 09:02:44 +01:00
Arunprasad Rajkumar b3006922e6
Mention `PostgreSQL with Promscale` as Jaeger span storage (#591)
* Mention PostgreSQL with Promscale as Jaeger span storage

Promscale is known to Jaeger complaint[1] since v0.16.0[2].

[1] https://github.com/timescale/promscale/actions/runs/3293909868/jobs/5430887629#step:6:292-354
[2] https://github.com/timescale/promscale/releases/tag/0.16.0

Signed-off-by: Arunprasad Rajkumar <ar.arunprasad@gmail.com>

* Update content/docs/next-release/_index.md

Co-authored-by: alejandrodnm <alejandrodnm@gmail.com>
Signed-off-by: Arunprasad Rajkumar <ar.arunprasad@gmail.com>

Signed-off-by: Arunprasad Rajkumar <ar.arunprasad@gmail.com>
Co-authored-by: alejandrodnm <alejandrodnm@gmail.com>
2022-10-21 16:51:07 -04:00
Rajakavitha Kodhandapani 9c973cfaa6
Added a link to the documentation (#590) 2022-10-16 09:47:18 -04:00
Yuri Shkuro 28561f4333 Prevent release job from running when not applicable
Signed-off-by: Yuri Shkuro <github@ysh.us>
2022-10-08 16:51:16 -04:00
Yuri Shkuro 0c5c560738 Point to patch release 1.38.1
Signed-off-by: Yuri Shkuro <github@ysh.us>
2022-10-04 21:10:02 -04:00
Yuri Shkuro 5901a450fa
Add "do not use" warning to discontinued OTEL builds (#589) 2022-09-16 17:43:22 -04:00
github-actions[bot] a916209d69
Release 1.38.0 (#588)
Signed-off-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>

Signed-off-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
Co-authored-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
2022-09-16 17:40:11 +02:00
Yuri Shkuro 1c7ebb28d3
Bump Hugo to 0.102.3 (#587) 2022-09-06 12:33:52 -04:00
Vineeth Pothulapati fd2957980c
Update Promscale on native Jaeger ingest support (#586)
* update Promscale

Signed-off-by: Vineeth Pothulapati <vineethpothulapati@outlook.com>

* correction

Signed-off-by: Yuri Shkuro <github@ysh.us>

Signed-off-by: Vineeth Pothulapati <vineethpothulapati@outlook.com>
Signed-off-by: Yuri Shkuro <github@ysh.us>
Co-authored-by: Yuri Shkuro <github@ysh.us>
2022-09-05 00:43:16 -04:00
Yuri Shkuro 903a5fee57 Remove email group
Signed-off-by: Yuri Shkuro <github@ysh.us>
2022-08-26 14:50:41 -04:00
Yuri Shkuro f38e55512f Include OTLP ports
Signed-off-by: Yuri Shkuro <github@ysh.us>
2022-08-09 01:11:42 -04:00
Yuri Shkuro 860aa8713d Describe additional Docker images we publish
Signed-off-by: Yuri Shkuro <github@ysh.us>
2022-08-03 15:30:06 -04:00
github-actions[bot] e376091bf1
Release 1.37.0 (#585)
Signed-off-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>

Co-authored-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
2022-08-03 15:18:56 -04:00
Yuri Shkuro 4e7da9918b
Add description of remote-storage component (#584) 2022-08-03 15:05:07 -04:00
Yuri Shkuro 28d8697589 Add FAQ for multiple collectors
Signed-off-by: Yuri Shkuro <github@ysh.us>
2022-07-27 12:15:11 -04:00
Vineeth Pothulapati 51ea050dab
Add Promscale as supported backend for Jaeger (#583)
* Add Promscale as supported backend for Jaeger

Signed-off-by: Vineeth Pothulapati <vineethpothulapati@outlook.com>

* update on review comments

Signed-off-by: Vineeth Pothulapati <vineethpothulapati@outlook.com>

* update Promscale desc

Signed-off-by: Vineeth Pothulapati <vineethpothulapati@outlook.com>
2022-07-14 22:16:02 -04:00
github-actions[bot] 793fbc4036
Release 1.36.0 (#581)
Signed-off-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>

Co-authored-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
2022-07-05 22:22:53 +10:00
github-actions[bot] ae75f207e6
Release release-1.35.0 (#579)
* Release 1.35.0
* Truncate the list of versions shown in the Versions dropdown
2022-05-30 18:54:47 -04:00
Yuri Shkuro 1f2ac05c95 Document OTLP port numbers
Signed-off-by: Yuri Shkuro <github@ysh.us>
2022-05-30 18:39:11 -04:00
Yuri Shkuro 0217a54dae
Give more emphasis to OpenTelemetry (#578)
* Give more emphasis to OpenTelemetry

Signed-off-by: Yuri Shkuro <github@ysh.us>

* Apply suggestions from code review

Signed-off-by: Yuri Shkuro <github@ysh.us>
Co-authored-by: Albert <26584478+albertteoh@users.noreply.github.com>

Co-authored-by: Albert <26584478+albertteoh@users.noreply.github.com>
2022-05-27 12:11:20 -04:00
Yuri Shkuro 3ddf63a3ee
Remove shell completion configs (#577) 2022-05-26 22:50:27 -04:00
Alex 356d6b7aa2
fix: Strips HTML in title (#576) 2022-05-24 10:30:50 -04:00
Yuri Shkuro ba3b53f04a Explain trace ID formats in FAQ
Signed-off-by: Yuri Shkuro <github@ysh.us>
2022-05-18 16:20:59 -04:00
Yuri Shkuro eacb52f332 Bump patch release for binaries
Signed-off-by: Yuri Shkuro <github@ysh.us>
2022-05-16 12:24:46 -04:00
Yuri Shkuro 62c430d17f
Disable search on all docs except latest version (#575) 2022-05-14 11:30:15 -04:00
github-actions[bot] dc4960b824
Release 1.34.0 (#574)
Signed-off-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>

Co-authored-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
2022-05-13 14:38:06 +02:00
Yuri Shkuro 83703bdc5b Add SPM screenshot to Intro
Closes #563

Signed-off-by: Yuri Shkuro <github@ysh.us>
2022-05-12 11:30:51 -04:00
Albert 6e78ed840e
Add SPM screenshot (#573)
Signed-off-by: albertteoh <see.kwang.teoh@gmail.com>
2022-05-12 11:04:21 -04:00
Albert ffa59ac9f8
Add more troubleshooting tips including metrics (#572)
* Add more troubleshooting tips including metrics

Signed-off-by: albertteoh <see.kwang.teoh@gmail.com>
Signed-off-by: Albert Teoh <see.kwang.teoh@gmail.com>

* Apply suggestions from code review

Co-authored-by: Yuri Shkuro <yurishkuro@users.noreply.github.com>
Signed-off-by: Albert Teoh <see.kwang.teoh@gmail.com>

Co-authored-by: Yuri Shkuro <yurishkuro@users.noreply.github.com>
2022-05-11 18:31:23 -04:00
Yuri Shkuro 74ddbb0f58
Mention gRPC remote storage option (#571)
Signed-off-by: Yuri Shkuro <github@ysh.us>
2022-04-26 14:59:27 -04:00
Yuri Shkuro 7f1f07f182 Fix SPM text
Signed-off-by: Yuri Shkuro <github@ysh.us>
2022-04-14 11:14:31 -04:00
rbizos 90a0349d58
[fix] Advise to disable index templates when using ILM (prior to v1.33) (#566)
By following the documentation, the elasticsearch index template would
be overriden by the collector. The template create by the collector
would not have the ILM policy setup thus stopping the rollover to work.

Adding create-index-templates=false will prevent this issue.

Signed-off-by: Raphael Bizos <r.bizos@criteo.com>
2022-04-13 07:55:24 -04:00
github-actions[bot] 9aaf8219c7
Release 1.33.0 (#569)
Signed-off-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>

Co-authored-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
2022-04-12 14:37:24 -04:00
Albert e72f4c0a1d
ATM to SPM (#567) 2022-03-28 08:35:29 -04:00
Albert fce284c411
Remove collector from ATM arch diag (#565)
Signed-off-by: albertteoh <see.kwang.teoh@gmail.com>
2022-03-24 10:00:23 -04:00
Yuri Shkuro 7de81cb9e9 Reference OTEL migration guide
https://github.com/open-telemetry/opentelemetry.io/pull/1228

Signed-off-by: Yuri Shkuro <github@ysh.us>
2022-03-23 13:04:34 -04:00
Yuri Shkuro 85ee7847e4 Add banner in support of Ukraine
Signed-off-by: Yuri Shkuro <github@ysh.us>
2022-03-22 12:46:53 -04:00
Albert e9de995ccc
Remove ATM from roadmap (#564)
Signed-off-by: albertteoh <see.kwang.teoh@gmail.com>
2022-03-22 09:11:52 -04:00
Yuri Shkuro 9831b9bd73 Change wording for meetings, remove bi-weekly
Signed-off-by: Yuri Shkuro <github@ysh.us>
2022-03-17 13:01:06 -04:00
Ben B a7ce3da00f
mention cert-manager requirement for operator v1.31 and higher (#562)
Closes #560

Signed-off-by: Benedikt Bongartz <bongartz@klimlive.de>
2022-03-16 16:36:22 -04:00
Albert 2e184bed99
Add Aggregated Trace Metrics documentation (#556) 2022-03-16 09:42:59 -04:00
Daniel Mangum 485564942b
Fix broken link to storage backends tracking issue (#561)
Updates link to storage backends tracking issue to use a markdown named
link at the raw URL was being rendered incorrectly with the closing
parens included in the link.

Signed-off-by: hasheddan <georgedanielmangum@gmail.com>
2022-03-16 09:24:28 -04:00
Joe Elliott b9d8e231f7
Adaptive update (#558)
* removed coming soon from adaptive sampling

Signed-off-by: Joe Elliott <number101010@gmail.com>

* added note about SPAN_STORAGE_TYPE

Signed-off-by: Joe Elliott <number101010@gmail.com>
2022-03-14 15:41:11 -04:00
github-actions[bot] 793c558d1e
Release 1.32.0 (#554)
Signed-off-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>

Co-authored-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
2022-03-06 19:06:03 +11:00
Yuri Shkuro 7b3fb9f0ed gitignore .hugo_build.lock
Signed-off-by: Yuri Shkuro <github@ysh.us>
2022-02-15 15:13:29 -05:00
Yuri Shkuro 62ed0f8618
Upgrade hugo to 0.92 (#552) 2022-02-15 15:12:05 -05:00
Yuri Shkuro 545fb93e1c
Improve APIs page, mention gRPC reflection (#551)
Signed-off-by: Yuri Shkuro <github@ysh.us>
2022-02-14 07:56:20 +11:00
Ruben Vargas 524e640202
Rename all jaeger operator master references to main (#550)
Signed-off-by: Ruben Vargas <ruben.vp8510@gmail.com>
2022-02-10 21:33:50 -05:00
github-actions[bot] 4a4b714945
Release 1.31.0 (#549)
Signed-off-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>

Co-authored-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
2022-02-04 16:32:14 -05:00
Yuri Shkuro c2facf7aca Link to adaptive sampling blog post
Signed-off-by: Yuri Shkuro <github@ysh.us>
2022-01-18 23:23:22 -05:00
Yuri Shkuro 7769941187 Link to adaptive sampling blog post
Signed-off-by: Yuri Shkuro <github@ysh.us>
2022-01-18 23:21:35 -05:00
Yuri Shkuro 060e2cb4db Remove adaptive sampling from roadmap
Signed-off-by: Yuri Shkuro <github@ysh.us>
2022-01-17 11:21:50 -05:00
Yuri Shkuro 4324fe1955
Add link to adaptive sampling post (#548) 2022-01-17 11:15:01 -05:00
github-actions[bot] 4c2649b78c
Release 1.30.0 (#547)
Signed-off-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>

Co-authored-by: jaegertracingbot <jaegertracingbot+jaeger-tracing@googlegroups.com>
2022-01-11 19:26:21 +01:00
4252 changed files with 644781 additions and 76484 deletions

31
.cspell.yml Normal file
View File

@ -0,0 +1,31 @@
# For a description of configuration options, see
# https://www.streetsidesoftware.com/vscode-spell-checker/docs/configuration/
# cSpell:ignore textlint textlintrc
version: '0.2'
caseSensitive: true
ignorePaths:
- '*.svg'
- node_modules
- public
- tmp
patterns:
- name: CodeBlock
pattern: |
/
^(\s*[~`]{3,}) # code-block start
.* # all languages and options, e.g. shell {hl_lines=[12]}
[\s\S]*? # content
\1 # code-block end - cSpell:disable-next-line
/igmx
languageSettings:
- languageId: markdown
ignoreRegExpList:
- CodeBlock
dictionaryDefinitions:
- name: project-words
path: .cspell/project-words.txt
- name: project-names
path: .cspell/project-names.g.txt
dictionaries:
- project-words
- project-names

View File

@ -0,0 +1,56 @@
# Maintainers (current and former)
Yuri Shkuro yurishkuro
Pavol Loffay pavolloffay
Joe Farro
Juraci Paixão Kröhling
# Prometheus
Julius Volz
# Other names (sometimes from github links)
robbert
## GSOC 2025
Minh Nguyen
## LFX Mentorship March-May 2025 (Term 1)
Manik Mehta
Hariom Gupta
## LFX Mentorship Sep-Nov 2024 (Term 3)
Ankit Kurmi
Mehul Gautam
## LFX Mentorship June-August 2024 (Term 2)
Harshith Mente
Raghuram Kannan
Saransh Shankar
## LFX Mentorship March-May 2024 (Term 1)
Harshvir Potpose
James Ryans
Pushkar Mishra
## LFX Mentorship Sep-Nov 2023
Ansh Goyal
Prathamesh Mutkure
Yashwanth Reddy
## LFX Mentorship Jun-Aug 2023
Afzal Ansari
GLVS Kiriti
## Google Summer of Code 2023
Ha Anh Vu
## Outreachy Dec'20 - Mar'21
Ashmita Bohara
## Outreachy Dec'18 - Mar'19
Gaby Soria
## Outreachy May'18 - Aug'18
Prakriti Bansal
## Outreachy Dec'17 - Mar'18
Kara de la Marck

137
.cspell/project-words.txt Normal file
View File

@ -0,0 +1,137 @@
alertmanager
autoscale
autoscaler
bitnami
bootcamp
cassandra
certfile
clickhouse
cncf
configtls
containerd
cqlsh
cqlshrc
daemonset
darwin
datacenter
datasource
datastax
developercertificate
Docsy
downsampling
dropwizard
dsoie
eddsa
emsgsize
errorf
expvar
fargate
findRESubmatch
flink
fluentd
glvs
gobin
gopath
Hashicorp
hasparent
healthcheck
healthcheckv2
healthz
hostnames
hostport
htmltest
htpasswd
hugo
ingester
ingester's
ingesters
istio
istio's
jaegertracing
jaxrs
jdoe
jemalloc
keycloak
keyn
keyregistry
keyserver
keyspace
kube
kubernetes
logtostderr
logz
lookback
mailgroup
mentee
mentees
mentorships
metricsquery
metricsstore
metricstore
microsim
myapp
myappnamespace
mynamespace
myproject
myservice
myversion
navtitle
nginx
nssm
nvmrc
olap
openpgp
opensearch
openshift
opentelemetry
opentracing
openzipkin
operatorhub
otel
otelcol
otlp
outreachy
parentbased
podman
pprof
procs
prometheus
prometheusexporter
promscale
proto
protobuf
quickstart
ratelimited
ratelimiting
rawhtml
readyz
rebalance
reindex
reindexing
rolebinding
shortcode
spanmetrics
stackoverflow
statefulset
strimzi
strimzi's
struct
subpages
tchannel
thriftrw
tolerations
tracegen
uber
uberctx
unmarshal
unmarshaling
upsample
usercert
userkey
valuen
vlog
warnf
weaveworks
workqueue
xvzf
zipkin

11
.github/dependabot.yml vendored Normal file
View File

@ -0,0 +1,11 @@
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "daily"

View File

@ -1,19 +1,33 @@
name: Release
on:
create:
branches: [ main ]
tags: ["release-*.*.*"]
workflow_dispatch:
inputs:
version_v1:
required: true
type: string
description: "Version number for v1 docs, in #.#.# format"
version_v2:
required: true
type: string
description: "Version number for v2 docs, in #.#.# format"
dry_run:
required: true
type: boolean
description: Do a dry run.
jobs:
release:
prepare-release:
if: ${{ github.repository == 'jaegertracing/documentation' }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
with:
submodules: true
- uses: actions/setup-python@v2
- uses: actions/setup-python@v5
with:
python-version: 3.8
@ -24,12 +38,12 @@ jobs:
git config user.email "jaegertracingbot+jaeger-tracing@googlegroups.com"
# git config credential.helper "store --file=.git/credentials"
# echo "https://${{ secrets.JAEGERTRACINGBOT_GITHUB_TOKEN }}" > .git/credentials
export RELEASE_TAG=${GITHUB_REF##*/}
./scripts/release.sh
export DRY_RUN=${{ inputs.dry_run }}
./scripts/release.sh ${{ inputs.version_v1 }} ${{ inputs.version_v2 }}
- name: GH CLI create PR
run: |
export TAG=${GITHUB_REF##*/}
export TAG="${{ inputs.version_v2 }}/${{ inputs.version_v1 }}"
git checkout -b gen-release-${TAG} # branch is need for GH CLI
git push origin gen-release-${TAG} # branch has to be on remote before PR is opened
gh pr create --base main --title "Release ${TAG}" --body "Release ${TAG}. This PR is created from CI and is part of the release process."

36
.github/workflows/ci-test.yml vendored Normal file
View File

@ -0,0 +1,36 @@
name: Test
# cSpell:ignore github wjdp
on:
workflow_dispatch:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
build-and-check-links:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version-file: .nvmrc }
- run: npm install
- name: Build and check links
run: npm run check:links:all # command also builds the site
spellcheck:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version-file: .nvmrc }
- run: npm install
- run: npm run check:spelling
block-pr-from-main-branch:
runs-on: ubuntu-latest
steps:
- name: Ensure PR is not on main branch
uses: jaegertracing/jaeger/.github/actions/block-pr-from-main-branch@main

19
.gitignore vendored
View File

@ -1,7 +1,20 @@
public/
resources/
# Generated files
.cspell/*.g.txt
# npm assets
node_modules/
package-lock.json
# Hugo-generated assets
.hugo_build.lock
/public
/resources
/.netlify
.DS_Store
.idea
bin/
tmp/
.idea
.vscode/

View File

@ -1,3 +0,0 @@
DirectoryPath: public
IgnoreDirectoryMissingTrailingSlash: true
IgnoreAltMissing: true

View File

@ -0,0 +1,9 @@
DirectoryPath: public
CheckExternal: false
IgnoreAltMissing: true
IgnoreURLs:
- /livereload.js # cSpell:disable-line
- ^/docs/latest/ # ignore redirect of latest
# Valid URL, whether canonical (before reorg) or not (and handled via a redirect)
- ^/docs/1.[6-9]\d/
- ^\.\./\.\./sampling/

View File

@ -1,4 +1,21 @@
CacheExpires: 13300h # ~ 18 months
DirectoryPath: public
IgnoreDirectoryMissingTrailingSlash: true
CheckExternal: false
IgnoreAltMissing: true
IgnoreDirs:
- docs/1.*
IgnoreURLs:
- /livereload.js # cSpell:disable-line
- ^https://www.jaegertracing.io/js/lunr
# Valid URL, whether canonical (before reorg) or not (and handled via a redirect)
- ^/docs/1.[6-9]\d/sampling/
- ^/docs/latest/architecture/
# Valid URLs, but servers yield 403 or similar errors
- ^https://(twitter|x).com/[Jj]aeger[Tt]racing
- ^https://calendar.google.com/
- ^https://eng.uber.com/(distributed-tracing/)?
- ^https://war.ukraine.ua/support-ukraine/
- ^https://www.oracle.com/cloud
- ^https://stackoverflow.com/questions/tagged/jaeger
# Temporary: invalid URLs for which replacements need to be found
# Temporary: as we work on https://github.com/jaegertracing/documentation/issues/889
- ^https://github.com/jaegertracing/jaeger/(blob|tree)/(v2|main/(internal|model|pkg))

1
.nvmrc Normal file
View File

@ -0,0 +1 @@
lts/*

1
.prettierignore Normal file
View File

@ -0,0 +1 @@
**

View File

@ -118,9 +118,14 @@ then you just add a line to every git commit message:
using your real name (sorry, no pseudonyms or anonymous contributions.)
You can add the sign off when creating the git commit via `git commit -s`.
You can add the sign off when creating the git commit via `git commit -s`. Make sure that your name and email are correctly configured in your local git and match those on your GitHub account:
If you want this to be automatic you can set up some aliases:
```shell
git config --global user.name "FIRST_NAME LAST_NAME"
git config --global user.email "MY_NAME@example.com"
```
If you want signing to be automatic you can set up some aliases:
```
git config --add alias.amend "commit -s --amend"

114
Makefile
View File

@ -1,56 +1,84 @@
HTMLPROOFER = bundle exec htmlproofer
HUGO_THEME = jaeger-docs
THEME_DIR := themes/$(HUGO_THEME)
# Copyright (c) The Jaeger Authors.
# SPDX-License-Identifier: Apache-2.0
#
# cSpell:ignore refcache
client-libs-docs:
# invoke one group of commands in bash to allow pushd/popd
@for d in $(shell ls -d content/docs/*); do \
/bin/bash -c "pushd $$d/; \
rm -f client-libraries.md client-features.md; \
ln -s ../../_client_libs/client-libraries.md; \
ln -s ../../_client_libs/client-features.md; \
popd"; \
echo "sym-linked content/_client_libs/*.md -> $$d/"; \
done
HTMLTEST ?= htmltest
HTMLTEST_DIR ?= tmp/.htmltest
generate: client-libs-docs
# Use $(HTMLTEST) in PATH, if available; otherwise, we'll get a copy
ifeq (, $(shell which $(HTMLTEST)))
override HTMLTEST=$(HTMLTEST_DIR)/bin/htmltest
ifeq (, $(shell which $(HTMLTEST)))
GET_LINK_CHECKER_IF_NEEDED=get-link-checker
endif
endif
develop: generate
HUGO_PREVIEW=true hugo server \
--buildDrafts \
--buildFuture \
--ignoreCache
# generate currently doesn't do anything, but can be useful in the future.
generate:
develop: generate
npm run serve
clean:
rm -rf public
rm -rf $(HTMLTEST_DIR) public/* resources
netlify-production-build: generate
hugo --minify
get-link-checker:
rm -Rf $(HTMLTEST_DIR)/bin
curl https://raw.githubusercontent.com/wjdp/htmltest/master/godownloader.sh \
| bash -s -- -b $(HTMLTEST_DIR)/bin
netlify-deploy-preview: generate
HUGO_PREVIEW=true hugo \
--buildDrafts \
--buildFuture \
--baseURL $(DEPLOY_PRIME_URL) \
--minify
# Use --keep-going to ensure that the refcache gets saved even if there are
# link-checking errors.
check-links: $(GET_LINK_CHECKER_IF_NEEDED)
$(MAKE) --keep-going GET_LINK_CHECKER_IF_NEEDED= \
_restore-refcache _check-links _save-refcache
netlify-branch-deploy: generate
hugo \
--buildDrafts \
--buildFuture \
--baseURL $(DEPLOY_PRIME_URL) \
--minify
_restore-refcache:
mkdir -p $(HTMLTEST_DIR)
cp data/refcache.json $(HTMLTEST_DIR)/refcache.json
build: clean generate
hugo -v
_check-links:
$(HTMLTEST) --log-level 1 --conf .htmltest.yml
link-checker-setup:
curl https://raw.githubusercontent.com/wjdp/htmltest/master/godownloader.sh | bash
_save-refcache:
@echo "Saving refcache.json to data/refcache.json"
jq . $(HTMLTEST_DIR)/refcache.json > data/refcache.json
run-link-checker:
bin/htmltest
check-links-all: check-links check-links-older
check-internal-links: clean build link-checker-setup run-link-checker
check-links-older: $(GET_LINK_CHECKER_IF_NEEDED)
$(HTMLTEST) --log-level 1 --conf .htmltest.old-versions.yml
check-all-links: clean build link-checker-setup
bin/htmltest --conf .htmltest.external.yml
check-links-internal:
$(HTMLTEST) --log-level 1 --skip-external --conf .htmltest.yml
.cspell/project-names.g.txt: .cspell/project-names-src.txt
cat .cspell/project-names-src.txt | grep -v '^#' | grep -v '^\s*$$' | tr ' ' '\n' > .cspell/project-names.g.txt
_spellcheck: .cspell/project-names.g.txt
./scripts/spellcheck.sh
fetch-blog-feed:
curl -s -o assets/data/medium.xml https://medium.com/feed/jaegertracing
fetch-roadmap:
python3 scripts/generate_roadmap.py
# only x.y.0 semver values are valid for kicking off a new release.
SEMVER_REGEX := ^([0-9]+\.){2}0$$
VALID_VERSION := $(shell echo "$(VERSION)" | grep -E "$(SEMVER_REGEX)")
ifneq "$(VALID_VERSION)" "$(VERSION)"
validate-version:
@echo "ERROR: Invalid VERSION=$(VERSION). Must be in format x.y.0."
@false # Exit with an error code
else
validate-version:
@echo "VERSION=$(VERSION) is valid."
endif
# `make start-release VERSION=x.y.0
start-release: validate-version
git tag release-$(VERSION)
git push upstream release-$(VERSION)

View File

@ -2,28 +2,32 @@
# Jaeger website
This repo houses all the assets used to build the Jaeger website, available at https://jaegertracing.io.
This repo houses all the assets used to build the Jaeger website, available at <https://jaegertracing.io>.
The site is built with [Hugo](https://gohugo.io/) and hosted by [Netlify](https://www.netlify.com/).
## Setup
Install the "extended" Hugo binary from [hugo/releases](https://github.com/gohugoio/hugo/releases) (use one of the `hugo_extended_*` binaries) or
use a package manager if it is available for your operating system.
Install the active LTS version of Node.js, then run the following command from
the directory of this repo's clone:
> The "extended" version of Hugo supports [Sass](https://sass-lang.org), which is necessary to build the site locally.
```bash
npm install
```
The currently used version of Hugo is defined in the [`netlify.toml`](./netlify.toml) configuration file.
This will also install the required version of Hugo.
## Running the site locally
If you want to develop the site locally, you can run a single command (assuming that you've run the [setup](#setup)):
```bash
$ make develop
make develop
```
This will start up a local server on localhost port 1313. When you make changes to either the content of the website (in [`content`](content)) *or* to the Sass and JavaScript assets of the page (in [`themes/jaeger-docs/assets`](themes/jaeger-docs/assets)), the browser will automatically update to reflect those changes (usually in under one second).
Alternatively, you can run `npm run serve`.
These commands will start up a local server on [localhost:1313](http://localhost:1313). When you make changes to either the content of the website (in [`content`](content)) *or* to the Sass and JavaScript assets of the page (in [`themes/jaeger-docs/assets`](themes/jaeger-docs/assets)), the browser will automatically update to reflect those changes (usually in under one second).
## Publishing the site
@ -77,6 +81,50 @@ You can check internal links by running `make check-internal-links` and all link
When new pages are added to the documentation, please add a corresponding entry to [themes/jaeger-docs/layouts/index.redirects](./themes/jaeger-docs/layouts/index.redirects).
## Generating Roadmap page
To generate the `content/roadmap.md` document, run `make fetch-roadmap`.
This script fetches issues from the [GitHub project board](https://github.com/orgs/jaegertracing/projects/4/views/1?layout=table), extracts the required information, and generates the roadmap document. Make sure to set the `GITHUB_TOKEN` environment variable with your GitHub API token before running the script, or save the token in `~/.github_token` file (protect the file so only you can read it: `chmod 0600 <file>`). Personal tokens can be created at https://github.com/settings/tokens/.
## Updating Medium Blog Feed
The homepage displays the latest blog posts from the [Jaeger Medium blog](https://medium.com/jaegertracing).
To avoid network calls during builds and to ensure fast, reliable local development, the Medium RSS feed is downloaded and stored as a static XML file.
### Prerequisites
Ensure you have [`curl`](https://curl.se/) installed on your system to download the RSS feed.
Most Linux and macOS systems already have `curl` pre-installed.
You can verify installation by running:
```bash
curl --version
```
### To update the Medium blog feed
Run the following command to fetch and save the feed locally as XML:
```bash
make fetch-blog-feed
```
This will download the RSS feed from Medium and save it to:
```bash
assets/data/medium.xml
```
After updating, commit the changes:
```bash
git add assets/data/medium.xml
git commit -m "chore: update Medium blog feed"
```
### How it's used
The Hugo site reads and parses data/medium.xml using resources.Get and transform.Unmarshal.
This converts the XML into structured data at build time, allowing full control over the content without relying on live network requests.
## License
[Apache 2.0 License](./LICENSE).

View File

@ -1,32 +1,23 @@
# Release instructions
Each Jaeger version is documented in a separate directory e.g. [content/docs/1.8/](./content/docs/1.8/). A special directory [content/docs/next-release/](./content/docs/next-release/) is reserved for the changes to be published as the next version. If you are adding documentation for features that are not yet released in the main Jaeger repository, add your changes to the `next-release` directory. If you're adding documentation for already released features, you may need to make the same change twice, i.e. in the most recent release (e.g. `1.8`) and in the `next-release` directories.
Jaeger v2 next-release documentation is in the `next-release-v2` directory.
<!-- BEGIN_CHECKLIST -->
Before creating a new release:
- Make sure all outstanding PRs for that version are merged to `next-release` directory.
- Make sure the actual Jaeger release is done and Docker images for the new version are published.
- If there are new Jaeger binaries or new storage options added to the release, make sure the CLI docs config file `data/cli/next-release/config.json` is updated accordingly (see below).
- Make sure you have git remote `upstream` pointing to the official repository, e.g.
`git remote add upstream git@github.com:jaegertracing/documentation.git`
- Make sure you are on your `main` branch.
Then create a release by pushing a tag corresponding to the jaegertracing/jaeger version `release-X.Y.Z`, e.g.
```shell
git tag release-1.12.0
git push upstream release-1.12.0
```
- Wait for the [CI job](https://github.com/jaegertracing/documentation/actions) to create a
[pull request](https://github.com/jaegertracing/documentation/pulls) with the documentation
changes for the new version.
To create a new release:
- Manually trigger the [Release](https://github.com/jaegertracing/documentation/actions/workflows/ci-release.yml) workflow on GitHub. It will ask for v1 and v2 version numbers (same versions as in the main Jaeger repo), and create a [pull request](https://github.com/jaegertracing/documentation/pulls) with the documentation changes.
- Approve and merge that pull request.
- Because the site is statically generated, the release is completed after the merge.
TODO: shouldn't the tag only specify major/minor, not patch? I don't think the process will work twice for the same major.minor
<!-- END_CHECKLIST -->
### Auto-generated documentation for CLI flags
The docs for the Jaeger CLI tools are generated by the automated release process described above using the Python script [`scripts/gen-cli-data.py`](./scripts/gen-cli-data.py). It uses the configuration file `data/cli/next-release/config.json` (automatically copied to `data/cli/${NEXT_VERSION}/config.json`) that describes which Jaeger binaries to include in the documentation, and which storage options each binary supports. The script invokes the `docs` command on the respective Docker images for each binary and creates a set of YAML files under `data/cli/${NEXT_VERSION}/`, which are then used by the template engine to render the CLI docs.

137
assets/data/medium.xml Normal file

File diff suppressed because one or more lines are too long

View File

@ -1,36 +0,0 @@
baseURL = "https://www.jaegertracing.io"
title = "Jaeger: open source, end-to-end distributed tracing"
languageCode = "en"
pygmentsCodeFences = true
pygmentsUseClasses = true
disableKinds = ["taxonomy", "taxonomyTerm"]
canonifyURLs = true
theme = "jaeger-docs"
googleAnalytics = "UA-148208642-1"
[mediaTypes."text/netlify"]
delimiter = ""
[outputFormats.REDIRECTS]
mediaType = "text/netlify"
baseName = "_redirects"
[outputs]
home = [ "HTML", "JSON", "REDIRECTS" ]
[params]
tagline = "Monitor and troubleshoot transactions in complex distributed systems"
githubrepo = "jaegertracing/jaeger"
twitterhandle = "JaegerTracing"
mediumhandle = "jaegertracing"
opengraphimage = "img/jaeger-icon-color.png"
latest = "1.29"
binariesLatest = "1.29.0"
versions = ["1.29","1.28","1.27","1.26","1.25","1.24","1.23","1.22","1.21","1.20","1.19","1.18","1.17","1.16","1.15","1.14","1.13","1.12","1.11", "1.10", "1.9", "1.8", "1.7", "1.6"]
[navbar]
[[links]]
title = "Docs"
url = "/docs"

View File

@ -1,18 +0,0 @@
---
title: Client Library Features
widescreen: true
hasparent: true
weight: 5
---
{{< warning >}}
Jaeger clients are being retired. Please refer to this [notice](../client-libraries/#deprecating-jaeger-clients).
{{< /warning >}}
The table below provides a feature matrix for the existing client libraries. Cells marked with `?` indicate that it's not known if the given client supports the given feature and additional research & documentation update is required.
{{< info >}}
The table is auto-generated from [data/clients.yaml](https://github.com/jaegertracing/documentation/blob/main/data/clients.yaml)
{{< /info >}}
{{< featuresTable >}}

View File

@ -1,238 +0,0 @@
---
title: Client Libraries
weight: 5
children:
- title: Client Features
url: client-features
---
{{< warning >}}
Jaeger clients are being retired.
{{< /warning >}}
## Deprecating Jaeger clients
The Jaeger clients have faithfully served our community for several years. We pioneered many new features, such as remotely controlled samplers and per-operation / adaptive sampling, which were critical to the success of distributed tracing deployments at large organizations. However, now that the larger community in OpenTelemetry has caught up with the Jaeger clients in terms of feature parity and there is full support for exporting data to Jaeger, we believe it is time to **decommission Jaeger's native clients and refocus the efforts on the OpenTelemetry SDKs**.
For new applications, we recommend using the [OpenTelemetry](https://opentelemetry.io/) APIs and SDKs. For existing applications that are already instrumented with the OpenTracing API, we recommend replacing the Jaeger clients with the corresponding OpenTelemetry SDKs and the OpenTracing shim/bridge available in most languages supported by Jaeger.
### Timeline
We plan to continue accepting pull requests and making new releases of Jaeger clients **through the end of 2021**. In January 2022 we will enter a code freeze period **for 6 months**, during which time we will no longer accept pull requests with new features, with the exception of security-related fixes. After that we will archive the client library repositories and will no longer accept new changes.
### Migration to OpenTelemetry
The OpenTelemetry project is working on publishing the migration guides from OpenTracing API to OpenTelemetry SDKs via OpenTracing bridges/shims. There may be different levels of maturity and features in the SDKs. We will keep updating the information below as more of it becomes available.
#### Baggage support
OpenTelemetry implements baggage propagation differently from OpenTracing and they are not completely equivalent. In OpenTelemetry the `context` layer sits below the tracing API and relies on immutable context objects, whereas baggage in OpenTracing is stored in a `span` which is mutable (and may occasionally lead to tricky race conditions when starting children spans).
#### We need your help!
If you find inaccuracies or have information that can be added, please open an issue or a PR to the [documentation repo](https://github.com/jaegertracing/documentation). If some features are missing and you need them, please open tickets in the respective OpenTelemetry repos or contibute. For example, Jaeger's remote samplers are not yet implemented in every OpenTelemetry SDK, but porting them from the Jaeger codebase is a fairly straightforward task.
#### Copying Jaeger code
We encourage OpenTelemetry SDK authors to copy relevant pieces of the Jaeger clients instead of depending on Jaeger modules directly. This is why we use a liberal APL2 license. When copying code, the correct way to respect the license requirements is to keep the copyright notices. For example, Jaeger authors did the same with the code originally written at Uber:
```
// Copyright (c) 2019 The Jaeger Authors.
// Copyright (c) 2017 Uber Technologies, Inc.
// ... <rest of Apache notice> ...
```
#### Java
* OpenTelemetry SDK: https://github.com/open-telemetry/opentelemetry-java
* Remote sampling: [sdk-extensions/jaeger-remote-sampler](https://github.com/open-telemetry/opentelemetry-java/tree/main/sdk-extensions/jaeger-remote-sampler)
* Internal SDK metrics: n/a
* OpenTracing Bridge: [opentracing-shim](https://github.com/open-telemetry/opentelemetry-java/tree/main/opentracing-shim)
* Migration Guide: ["Migrating from Jaeger client to OpenTelemetry SDK"][blog-otel-java]
#### Python
* OpenTelemetry SDK: https://github.com/open-telemetry/opentelemetry-python
* Remote sampling: ?
* Internal SDK metrics: n/a
* OpenTracing Bridge: [opentelemetry-opentracing-shim](https://github.com/open-telemetry/opentelemetry-python/tree/main/shim/opentelemetry-opentracing-shim)
* Migration Guide: available in the shim's README
#### Node.js
* OpenTelemetry SDK: https://github.com/open-telemetry/opentelemetry-js
* Remote sampling: ?
* Internal SDK metrics: n/a
* OpenTracing Bridge: [opentelemetry-shim-opentracing](https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-shim-opentracing)
* Migration Guide: available in the shim's README and the corresponding readthedocs
#### Go
* OpenTelemetry SDK: https://github.com/open-telemetry/opentelemetry-go
* Remote sampling: https://github.com/open-telemetry/opentelemetry-go-contrib/pull/936
* Internal SDK metrics: n/a
* OpenTracing Bridge: [bridge/opentracing](https://github.com/open-telemetry/opentelemetry-go/tree/main/bridge/opentracing)
* Migration Guide: ?
#### C# / .NET
* OpenTelemetry SDK: https://github.com/open-telemetry/opentelemetry-dotnet
* Remote sampling: ?
* Internal SDK metrics: n/a
* OpenTracing Bridge: [OpenTelemetry.Shims.OpenTracing](https://github.com/open-telemetry/opentelemetry-dotnet/tree/main/src/OpenTelemetry.Shims.OpenTracing)
* Migration Guide: available in the shim's README, but is very terse
#### C++
* OpenTelemetry SDK: https://github.com/open-telemetry/opentelemetry-cpp
* Remote sampling: ?
* Internal SDK metrics: n/a
* OpenTracing Bridge: n/a
* Migration Guide: n/a
## Intro
All Jaeger client libraries support the [OpenTracing APIs](http://opentracing.io). The following resources provide more information about instrumenting your application with OpenTracing:
* [OpenTracing tutorials](https://github.com/yurishkuro/opentracing-tutorial) for Java, Go, Python, Node.js and C#
* A deep dive blog post [Tracing HTTP request latency in Go][http-latency-medium]
* The official OpenTracing documentation and other materials at [opentracing.io](http://opentracing.io)
* The [`opentracing-contrib` org on GitHub](https://github.com/opentracing-contrib) contains many repositories with off-the-shelf instrumentation for many popular frameworks, including JAXRS & Dropwizard (Java), Flask & Django (Python), Go std library, etc.
The rest of this page contains information about configuring and instantiating a Jaeger tracer in an application that is already instrumented with OpenTracing API.
## Terminology
We use the terms *client library*, *instrumentation library*, and *tracer* interchangeably in this document.
## Supported Libraries
The following client libraries are officially supported:
{{< clientsTable >}}
Libraries in other languages are currently under development, please see [issue #366](https://github.com/jaegertracing/jaeger/issues/366).
## Initializing Jaeger Tracer
The initialization syntax is slightly different in each languages, please refer to the README's in the respective repositories.
The general pattern is to not create the Tracer explicitly, but use a Configuration class to do that. Configuration allows
simpler parameterization of the Tracer, such as changing the default sampler or the location of Jaeger agent.
## Tracer Internals
### Sampling
See [Architecture | Sampling](../sampling#client-sampling-configuration).
### Reporters
Jaeger tracers use **reporters** to process finished {{< tip "spans" "span" >}}. Typically Jaeger libraries ship with the following reporters:
* **NullReporter** does nothing with the span. It can be useful in unit tests.
* **LoggingReporter** simply logs the fact that a span was finished, usually by printing the trace and span ID and the operation name.
* **CompositeReporter** takes a list of other reporters and invokes them one by one.
* **RemoteReporter** (default) buffers a certain number of finished spans in memory and uses a **sender** to submit a batch of spans out of process to Jaeger backend. The sender is responsible for serializing the span to the wire format (e.g. Thrift or JSON) and communicating with the backend components (e.g. over UDP or HTTP).
#### EMSGSIZE and UDP buffer limits
By default Jaeger libraries use a UDP sender to report finished {{< tip "spans" "span" >}} to the `jaeger-agent` daemon.
The default max packet size is 65,000 bytes, which can be transmitted without segmentation when
connecting to the agent via loopback interface. However, some OSs (in particular, MacOS), limit
the max buffer size for UDP packets, as raised in [this GitHub issue](https://github.com/uber/jaeger-client-node/issues/124).
If you run into issue with `EMSGSIZE` errors, consider raising the limits in your kernel (see the issue for examples).
You can also configure the client libraries to use a smaller max packet size, but that may cause
issues if you have large spans, e.g. if you log big chunks of data. Spans that exceed max packet size
are dropped by the clients (with metrics emitted to indicate that). Another alternative is
to use non-UDP transports, such as [HttpSender in Java][HttpSender] (not currently available for all languages).
### Metrics
Jaeger tracers emit various metrics about how many spans or traces they have started and finished, how many of them were sampled or not sampled, if there were any errors in decoding trace context from inbound requests or reporting spans to the backend.
TODO standardize and describe the metric names and labels (issues [#572](https://github.com/jaegertracing/jaeger/issues/572), [#611](https://github.com/jaegertracing/jaeger/issues/611)).
## Propagation Format
When `SpanContext` is encoded on the wire as part of the request to another service, Jaeger client libraries default to the Jaeger native propagation format specified below. In addition, Jaeger clients support [Zipkin B3 format](https://github.com/openzipkin/b3-propagation) and [W3C Trace-Context](https://github.com/w3c/distributed-tracing).
### Trace/Span Identity
#### Key
`uber-trace-id`
* Case-insensitive in HTTP
* Lower-case in protocols that preserve header case
#### Value
`{trace-id}:{span-id}:{parent-span-id}:{flags}`
* `{trace-id}`
* 64-bit or 128-bit random number in base16 format
* Can be variable length, shorter values are 0-padded on the left
* Receivers MUST accept hex-strings shorter than 32 characters and 0-pad them on the left
* Senders SHOULD generate hex strings of exactly 16 or 32 characters in length
* Clients in some languages support 128-bit, migration pending
* Value of 0 is not valid
* `{span-id}`
* 64-bit random number in base16 format
* Can be variable length, shorter values are 0-padded on the left
* Receivers MUST accept hex-strings shorter than 16 characters and 0-pad them on the left
* Senders SHOULD generate hex strings of exactly 16 characters in length
* Value of 0 is not valid
* `{parent-span-id}`
* 64-bit value in base16 format representing parent span id
* Deprecated, most Jaeger clients ignore on the receiving side, but still include it on the sending side
* 0 value is valid and means “root span” (when not ignored)
* `{flags}`
* One byte bitmap, as one or two hex digits (leading zero may be omitted)
* Bit 1 (right-most, least significant, bit mask `0x01`) is "sampled" flag
* 1 means the trace is sampled and all downstream services are advised to respect that
* 0 means the trace is not sampled and all downstream services are advised to respect that
* Were considering a new feature that allows downstream services to upsample if they find their tracing level is too low
* Bit 2 (bit mask `0x02` ) is "debug" flag
* Debug flag should only be set when the sampled flag is set
* Instructs the backend to try really hard not to drop this trace
* Bit 3 (bit mask `0x04` ) is not used
* Bit 4 (bit mask `0x08` ) is "firehose" flag
* Spans tagged as "firehose" are excluded from being indexed in the storage
* The traces can only be retrieved by trace ID (usually available from other sources, like logs)
* Other bits are unused
### Baggage
* Key: `uberctx-{baggage-key}`
* Value: `{baggage-value}` as a string (see Value Encoding below)
* Limitation: since HTTP headers dont preserve the case, Jaeger recommends baggage keys to be lowercase-kebab-case,
e.g. `my-baggage-key-1`.
Example: the following code sequence:
```
span.SetBaggageItem("key1", "value1")
span.SetBaggageItem("key2", "value2")
```
will result in the following HTTP headers:
```
uberctx-key1: value1
uberctx-key2: value2
```
#### Value Encoding
OpenTracing defines two formats for plain text headers: `HTTP_HEADERS` and `TEXT_MAP`. The former was introduced to deal with restrictions imposed by the HTTP protocol on the context of the headers, whereas the latter does not impose any restrictions, e.g. it can be used with Kafka Record Headers. The main difference between these two formats in the Jaeger SDKs is that the baggage values are URL-encoded when using the `HTTP_HEADERS` propagation format.
Example: when using the `HTTP_HEADERS` propagation format, the following code sequence:
```
span.SetBaggageItem("key1", "value 1 / blah")
```
will result in the following HTTP header:
```
uberctx-key1: value%201%20%2F%20blah
```
[HttpSender]: https://github.com/jaegertracing/jaeger-client-java/blob/master/jaeger-thrift/src/main/java/io/jaegertracing/thrift/internal/senders/HttpSender.java
[http-latency-medium]: https://medium.com/@YuriShkuro/tracing-http-request-latency-in-go-with-opentracing-7cc1282a100a
[blog-otel-java]: https://medium.com/jaegertracing/migrating-from-jaeger-client-to-opentelemetry-sdk-bd337d796759

3
content/_index.md Normal file
View File

@ -0,0 +1,3 @@
---
title: 'Jaeger: open source, distributed tracing platform'
---

View File

@ -1,2 +0,0 @@
*/client-libraries.md
*/client-features.md

View File

@ -1,66 +0,0 @@
---
title: Introduction
weight: 1
---
Welcome to Jaeger's documentation portal! Below, you'll find information for beginners and experienced Jaeger users.
If you can't find what you are looking for, or have an issue not covered here, we'd love to [hear from you](/get-in-touch).
## About
Jaeger, inspired by [Dapper][dapper] and [OpenZipkin](http://zipkin.io),
is a distributed tracing system released as open source by [Uber Technologies][ubeross].
It is used for monitoring and troubleshooting microservices-based distributed systems, including:
* Distributed context propagation
* Distributed transaction monitoring
* Root cause analysis
* Service dependency analysis
* Performance / latency optimization
Uber published a blog post, [Evolving Distributed Tracing at Uber](https://eng.uber.com/distributed-tracing/), where they explain the history and reasons for the architectural choices made in Jaeger.
## Features
* [OpenTracing](http://opentracing.io/) compatible data model and instrumentation libraries
* in [Go](https://github.com/jaegertracing/jaeger-client-go), [Java](https://github.com/jaegertracing/jaeger-client-java), [Node](https://github.com/jaegertracing/jaeger-client-node), [Python](https://github.com/jaegertracing/jaeger-client-python)
and [C++](https://github.com/jaegertracing/cpp-client)
* Uses consistent upfront sampling with individual per service/endpoint probabilities
* Multiple storage backends: Cassandra, Elasticsearch, memory.
* Adaptive sampling (coming soon)
* Post-collection data processing pipeline (coming soon)
See [Features](./features/) page for more details.
## Technical Specs
* Backend components implemented in Go
* React/Javascript UI
* Supported storage backends:
* [Cassandra 3.4+](./deployment/#cassandra)
* [Elasticsearch 5.x, 6.x](./deployment/#elasticsearch)
* [Kafka](./deployment/#kafka)
* memory storage
## Quick Start
See [running a docker all in one image](getting-started#all-in-one).
## Screenshots
### Traces View
[![Traces View](/img/traces-ss.png)](/img/traces-ss.png)
### Trace Detail View
[![Detail View](/img/trace-detail-ss.png)](/img/trace-detail-ss.png)
## Related links
- [Evolving Distributed tracing At Uber Engineering](https://eng.uber.com/distributed-tracing/)
- [Tracing HTTP request latency in Go with OpenTracing](https://medium.com/opentracing/tracing-http-request-latency-in-go-with-opentracing-7cc1282a100a)
- [Distributed Tracing with Jaeger & Prometheus on Kubernetes](https://blog.openshift.com/openshift-commons-briefing-82-distributed-tracing-with-jaeger-prometheus-on-kubernetes/)
- [Using Jaeger with Istio](https://istio.io/docs/tasks/telemetry/distributed-tracing.html)
- [Using Jaeger with Envoy](https://www.envoyproxy.io/docs/envoy/latest/start/sandboxes/jaeger_tracing.html)
[dapper]: https://research.google.com/pubs/pub36356.html
[ubeross]: http://uber.github.io

View File

@ -1,355 +0,0 @@
---
title: Deployment
weight: 7
children:
- title: Frontend/UI
url: frontend-ui
---
The main Jaeger backend components are released as Docker images on Docker Hub:
Component | Repository
--------------------- | ---
**jaeger-agent** | [hub.docker.com/r/jaegertracing/jaeger-agent/](https://hub.docker.com/r/jaegertracing/jaeger-agent/)
**jaeger-collector** | [hub.docker.com/r/jaegertracing/jaeger-collector/](https://hub.docker.com/r/jaegertracing/jaeger-collector/)
**jaeger-query** | [hub.docker.com/r/jaegertracing/jaeger-query/](https://hub.docker.com/r/jaegertracing/jaeger-query/)
**jaeger-ingester** | [hub.docker.com/r/jaegertracing/jaeger-ingester/](https://hub.docker.com/r/jaegertracing/jaeger-ingester/)
There are orchestration templates for running Jaeger with:
* Kubernetes: [github.com/jaegertracing/jaeger-kubernetes](https://github.com/jaegertracing/jaeger-kubernetes),
* OpenShift: [github.com/jaegertracing/jaeger-openshift](https://github.com/jaegertracing/jaeger-openshift).
## Configuration Options
Jaeger binaries can be configured in a number of ways (in the order of decreasing priority):
* command line arguments,
* environment variables,
* configuration files in JSON, TOML, YAML, HCL, or Java properties formats.
To see the complete list of options, run the binary with `help` command. Options that are specific to a certain storage backend are only listed if the storage type is selected. For example, to see all available options in the Collector with Cassandra storage:
```sh
$ docker run --rm \
-e SPAN_STORAGE_TYPE=cassandra \
jaegertracing/jaeger-collector:{{< currentVersion >}} \
help
```
In order to provide configuration parameters via environment variables, find the respective command line option and convert its name to UPPER_SNAKE_CASE, for example:
Command line option | Environment variable
-----------------------------------|-------------------------------
`--cassandra.connections-per-host` | `CASSANDRA_CONNECTIONS_PER_HOST`
`--metrics-backend` | `METRICS_BACKEND`
## Agent
Jaeger client libraries expect **jaeger-agent** process to run locally on each host.
The agent exposes the following ports:
Port | Protocol | Function
---- | ------- | ---
5775 | UDP | accept zipkin.thrift over compact thrift protocol
6831 | UDP | accept jaeger.thrift over compact thrift protocol
6832 | UDP | accept jaeger.thrift over binary thrift protocol
5778 | HTTP | serve configs, sampling strategies
It can be executed directly on the host or via Docker, as follows:
```sh
## make sure to expose only the ports you use in your deployment scenario!
docker run \
--rm \
-p5775:5775/udp \
-p6831:6831/udp \
-p6832:6832/udp \
-p5778:5778/tcp \
jaegertracing/jaeger-agent:{{< currentVersion >}}
```
### Discovery System Integration
The agents can connect point to point to a single collector address, which could be
load balanced by another infrastructure component (e.g. DNS) across multiple collectors.
The agent can also be configured with a static list of collector addresses.
On Docker, a command like the following can be used:
```sh
docker run \
--rm \
-p5775:5775/udp \
-p6831:6831/udp \
-p6832:6832/udp \
-p5778:5778/tcp \
jaegertracing/jaeger-agent:{{< currentVersion >}} \
--reporter.tchannel.host-port=jaeger-collector.jaeger-infra.svc:14267
```
Or add `--reporter.type=grpc` and `--reporter.grpc.host-port=jaeger-collector.jaeger-infra.svc:14250` to use gRPC
communication with the collector. Then the `tchannel` option can be removed.
When using gRPC, you have several options for load balancing and name resolution:
* Single connection and no load balancing. This is the default if you specify a single `host:port`. (example: `--reporter.grpc.host-port=jaeger-collector.jaeger-infra.svc:14250`)
* Static list of hostnames and round-robin load balancing. This is what you get with a comma-separated list of addresses. (example: `reporter.grpc.host-port=jaeger-collector1:14250,jaeger-collector2:14250,jaeger-collector3:14250`)
* Dynamic DNS resolution and round-robin load balancing. To get this behaviour, prefix the address with `dns:///` and gRPC will attempt to resolve the hostname using SRV records (for [external load balancing](https://github.com/grpc/grpc/blob/master/doc/load-balancing.md)), TXT records (for [service configs](https://github.com/grpc/grpc/blob/master/doc/service_config.md)), and A records. Refer to the [gRPC Name Resolution docs](https://github.com/grpc/grpc/blob/master/doc/naming.md) and the [dns_resolver.go implementation](https://github.com/grpc/grpc-go/blob/master/resolver/dns/dns_resolver.go) for more info. (example: `--reporter.grpc.host-port=dns:///jaeger-collector.jaeger-infra.svc:14250`)
In the future we will support different service discovery systems to dynamically load balance
across several collectors ([issue 213](https://github.com/jaegertracing/jaeger/issues/213)).
## Collectors
The collectors are stateless and thus many instances of **jaeger-collector** can be run in parallel.
Collectors require almost no configuration, except for the location of Cassandra cluster,
via `--cassandra.keyspace` and `--cassandra.servers` options, or the location of Elasticsearch cluster, via
`--es.server-urls`, depending on which storage is specified. To see all command line options run
```sh
go run ./cmd/collector/main.go -h
```
or, if you don't have the source code
```sh
docker run -it --rm jaegertracing/jaeger-collector:{{< currentVersion >}} -h
```
At default settings the collector exposes the following ports:
Port | Protocol | Function
----- | ------- | ---
14267 | TChannel | used by **jaeger-agent** to send spans in jaeger.thrift format
14250 | gRPC | used by **jaeger-agent** to send spans in model.proto format
14268 | HTTP | can accept spans directly from clients in jaeger.thrift format over binary thrift protocol
9411 | HTTP | can accept Zipkin spans in JSON or Thrift (disabled by default)
14269 | HTTP | Health check at **/**
## Storage Backends
Collectors require a persistent storage backend. Cassandra and Elasticsearch are the primary supported storage backends. Additional backends are [discussed here](https://github.com/jaegertracing/jaeger/issues/638).
The storage type can be passed via `SPAN_STORAGE_TYPE` environment variable. Valid values are `cassandra`, `elasticsearch`, `kafka` (only as a buffer) and `memory` (only for all-in-one binary).
As of version 1.6.0, it's possible to use multiple storage types at the same time by providing a comma-separated list of valid types to the `SPAN_STORAGE_TYPE` environment variable.
It's important to note that all listed storage types are used for writing, but only the first type in the list will be used for reading and archiving.
### Memory
The in-memory storage is not intended for production workloads. It's intended as a simple solution to get started quickly and
data will be lost once the process is gone.
By default, there's no limit in the amount of traces stored in memory but a limit can be established by passing an
integer value via `--memory.max-traces`.
### Cassandra
Supported versions: 3.4+
Deploying Cassandra itself is out of scope for our documentation. One good
source of documentation is the [Apache Cassandra Docs](https://cassandra.apache.org/doc/latest/).
#### Configuration
##### Minimal
```sh
docker run \
-e SPAN_STORAGE_TYPE=cassandra \
-e CASSANDRA_SERVERS=<...> \
jaegertracing/jaeger-collector:{{< currentVersion >}}
```
##### All options
To view the full list of configuration options, you can run the following command:
```sh
docker run \
-e SPAN_STORAGE_TYPE=cassandra \
jaegertracing/jaeger-collector:{{< currentVersion >}} \
--help
```
#### Schema script
A script is provided to initialize Cassandra keyspace and schema
using Cassandra's interactive shell [`cqlsh`][cqlsh]:
```sh
MODE=test sh ./plugin/storage/cassandra/schema/create.sh | cqlsh
```
For production deployment, pass `MODE=prod DATACENTER={datacenter}` arguments to the script,
where `{datacenter}` is the name used in the Cassandra configuration / network topology.
The script also allows overriding TTL, keyspace name, replication factor, etc.
Run the script without arguments to see the full list of recognized parameters.
#### TLS support
Jaeger supports TLS client to node connections as long as you've configured
your Cassandra cluster correctly. After verifying with e.g. `cqlsh`, you can
configure the collector and query like so:
```sh
docker run \
-e CASSANDRA_SERVERS=<...> \
-e CASSANDRA_TLS=true \
-e CASSANDRA_TLS_SERVER_NAME="CN-in-certificate" \
-e CASSANDRA_TLS_KEY=<path to client key file> \
-e CASSANDRA_TLS_CERT=<path to client cert file> \
-e CASSANDRA_TLS_CA=<path to your CA cert file> \
jaegertracing/jaeger-collector:{{< currentVersion >}}
```
The schema tool also supports TLS. You need to make a custom cqlshrc file like
so:
```
# Creating schema in a cassandra cluster requiring client TLS certificates.
#
# Create a volume for the schema docker container containing four files:
# cqlshrc: this file
# ca-cert: the cert authority for your keys
# client-key: the keyfile for your client
# client-cert: the cert file matching client-key
#
# if there is any sort of DNS mismatch and you want to ignore server validation
# issues, then uncomment validate = false below.
#
# When running the container, map this volume to /root/.cassandra and set the
# environment variable CQLSH_SSL=--ssl
[ssl]
certfile = ~/.cassandra/ca-cert
userkey = ~/.cassandra/client-key
usercert = ~/.cassandra/client-cert
# validate = false
```
### Elasticsearch
Supported in Jaeger since 0.6.0
Supported versions: 5.x, 6.x
Elasticsearch does not require initialization other than
[installing and running Elasticsearch](https://www.elastic.co/downloads/elasticsearch).
Once it is running, pass the correct configuration values to the Jaeger collector and query service.
#### Configuration
##### Minimal
```sh
docker run \
-e SPAN_STORAGE_TYPE=elasticsearch \
-e ES_SERVER_URLS=<...> \
jaegertracing/jaeger-collector:{{< currentVersion >}}
```
##### All options
To view the full list of configuration options, you can run the following command:
```sh
docker run \
-e SPAN_STORAGE_TYPE=elasticsearch \
jaegertracing/jaeger-collector:{{< currentVersion >}} \
--help
```
See the [README](https://github.com/jaegertracing/jaeger/tree/master/plugin/storage/es/README.md) for an in-depth overview of how Jaeger uses Elasticsearch for storage.
#### Shards and Replicas for Elasticsearch indices
Shards and replicas are some configuration values to take special attention to, because this is decided upon
index creation. [This article](https://qbox.io/blog/optimizing-elasticsearch-how-many-shards-per-index) goes into
more information about choosing how many shards should be chosen for optimization.
### Kafka
Supported in Jaeger since 1.6.0
Supported Kafka versions: 0.9+
Starting from version 1.7.0, a new component [Ingester](#ingester) was added to support reading from Kafka and storing it in another storage backend (Elasticsearch or Cassandra).
Writing to Kafka is particularly useful for building post-processing data pipelines.
#### Configuration
##### Minimal
```sh
docker run \
-e SPAN_STORAGE_TYPE=kafka \
-e KAFKA_BROKERS=<...> \
-e KAFKA_TOPIC=<...> \
jaegertracing/jaeger-collector:{{< currentVersion >}}
```
##### All options
To view the full list of configuration options, you can run the following command:
```sh
docker run \
-e SPAN_STORAGE_TYPE=kafka \
jaegertracing/jaeger-collector:{{< currentVersion >}} \
--help
```
#### Topic & partitions
Unless your Kafka cluster is configured to automatically create topics, you will need to create it ahead of time. You can refer to [the Kafka quickstart documentation](https://kafka.apache.org/documentation/#quickstart_createtopic) to learn how.
You can find more information about topics and partitions in general in the [official documentation](https://kafka.apache.org/documentation/#intro_topics). [This article](https://www.confluent.io/blog/how-to-choose-the-number-of-topicspartitions-in-a-kafka-cluster/) provide more details about how to choose the number of partitions.
## Ingester
**jaeger-ingester** is a service which reads span data from Kafka topic and writes it to another storage backend (Elasticsearch or Cassandra).
Port | Protocol | Function
----- | ------- | ---
14270 | HTTP | Health check at **/**
14271 | HTTP | Metrics endpoint
To view all exposed configuration options run the following command:
```sh
docker run \
-e SPAN_STORAGE_TYPE=cassandra \
jaegertracing/jaeger-ingester:{{< currentVersion >}}
--help
```
## Query Service & UI
**jaeger-query** serves the API endpoints and a React/Javascript UI.
The service is stateless and is typically run behind a load balancer, such as **nginx**.
At default settings the query service exposes the following port(s):
Port | Protocol | Function
----- | ------- | ---
16686 | HTTP | **/api/*** endpoints and Jaeger UI at **/**
16687 | HTTP | Health check at **/**
### Minimal deployment example (Elasticsearch backend):
```sh
docker run -d --rm \
-p 16686:16686 \
-p 16687:16687 \
-e SPAN_STORAGE_TYPE=elasticsearch \
-e ES_SERVER_URLS=http://<ES_SERVER_IP>:<ES_SERVER_PORT> \
jaegertracing/jaeger-query:{{< currentVersion >}}
```
### UI Base Path
The base path for all **jaeger-query** HTTP routes can be set to a non-root value, e.g. `/jaeger` would cause all UI URLs to start with `/jaeger`. This can be useful when running **jaeger-query** behind a reverse proxy.
The base path can be configured via the `--query.base-path` command line parameter or the `QUERY_BASE_PATH` environment variable.
### UI Customization and Embedding
Please refer to the [dedicated Frontend/UI page](../frontend-ui/).
## Aggregation Jobs for Service Dependencies
Production deployments need an external process which aggregates data and creates dependency links between services.
Project [spark-dependencies](https://github.com/jaegertracing/spark-dependencies) is a Spark job which derives
dependency links and stores them directly to the storage.
## Configuration
All binaries accepts command line properties and environmental variables which are managed by
by [viper](https://github.com/spf13/viper) and [cobra](https://github.com/spf13/cobra).
The names of environmental properties are capital letters and characters `-` and `.` are replaced with `_`.
To list all configuration properties call `jaeger-binary -h`.
[cqlsh]: http://cassandra.apache.org/doc/latest/tools/cqlsh.html

View File

@ -1,57 +0,0 @@
---
title: Features
weight: 3
---
Jaeger is used for monitoring and troubleshooting microservices-based distributed systems, including:
* Distributed context propagation
* Distributed transaction monitoring
* Root cause analysis
* Service dependency analysis
* Performance / latency optimization
## High Scalability
Jaeger backend is designed to have no single points of failure and to scale with the business needs.
For example, any given Jaeger installation at Uber is typically processing several billion {{< tip "spans" "span" >}} per day.
## Native support for OpenTracing
Jaeger backend, Web UI, and instrumentation libraries have been designed from ground up to support the OpenTracing standard.
* Represent {{< tip "traces" "trace" >}} as {{< tip "directed acyclic graphs" "directed acyclic graph" >}} (not just trees) via [span references](https://github.com/opentracing/specification/blob/master/specification.md#references-between-spans)
* Support strongly typed span _tags_ and _structured logs_
* Support general distributed context propagation mechanism via _baggage_
## Multiple storage backends
Jaeger supports two popular open source NoSQL databases as trace storage backends: Cassandra 3.4+ and Elasticsearch 5.x/6.x.
There are ongoing community experiments using other databases, such as ScyllaDB, InfluxDB, Amazon DynamoDB. Jaeger also ships
with a simple in-memory storage for testing setups.
## Modern Web UI
Jaeger Web UI is implemented in Javascript using popular open source frameworks like React. Several performance
improvements have been released in v1.0 to allow the UI to efficiently deal with large volumes of data, and to display
{{< tip "traces" "trace" >}} with tens of thousands of {{< tip "spans" "span" >}} (e.g. we tried a trace with 80,000 spans).
## Cloud Native Deployment
Jaeger backend is distributed as a collection of Docker images. The binaries support various configuration methods,
including command line options, environment variables, and configuration files in multiple formats (yaml, toml, etc.)
Deployment to Kubernetes clusters is assisted by [Kubernetes templates](https://github.com/jaegertracing/jaeger-kubernetes)
and a [Helm chart](https://github.com/kubernetes/charts/tree/master/incubator/jaeger).
## Observability
All Jaeger backend components expose [Prometheus](https://prometheus.io/) metrics by default (other metrics backends are
also supported). Logs are written to standard out using the structured logging library [zap](https://github.com/uber-go/zap).
## Backwards compatibility with Zipkin
Although we recommend instrumenting applications with OpenTracing API and binding to Jaeger client libraries to benefit
from advanced features not available elsewhere, if your organization has already invested in the instrumentation
using Zipkin libraries, you do not have to rewrite all that code. Jaeger provides backwards compatibility with Zipkin
by accepting spans in Zipkin formats (Thrift or JSON v1/v2) over HTTP. Switching from Zipkin backend is just a matter
of routing the traffic from Zipkin libraries to the Jaeger backend.

View File

@ -1,196 +0,0 @@
---
title: Frontend/UI
hasparent: true
weight: 10
---
## Configuration
Several aspects of the UI can be configured:
* The Dependencies section can be enabled / configured
* Google Analytics tracking can be enabled / configured
* Additional menu options can be added to the global nav
These options can be configured by a JSON configuration file. The `--query.ui-config` command line parameter of the query service must then be set to the path to the JSON file when the query service is started.
An example configuration file:
```json
{
"dependencies": {
"dagMaxNumServices": 200,
"menuEnabled": true
},
"archiveEnabled": true,
"tracking": {
"gaID": "UA-000000-2",
"trackErrors": true
},
"menu": [
{
"label": "About Jaeger",
"items": [
{
"label": "GitHub",
"url": "https://github.com/jaegertracing/jaeger"
},
{
"label": "Docs",
"url": "http://jaeger.readthedocs.io/en/latest/"
}
]
}
]
}
```
`dependencies.dagMaxNumServices` defines the maximum number of services allowed before the DAG dependency view is disabled. Default: `200`.
`dependencies.menuEnabled` enables (`true`) or disables (`false`) the dependencies menu button. Default: `true`.
`archiveEnabled` enables (`true`) or disables (`false`) the archive traces button. Default: `false`. It requires a configuration of an archive storage in Query service. Archived traces are only accessible directly by ID, they are not searchable.
`tracking.gaID` defines the Google Analytics tracking ID. This is required for Google Analytics tracking, and setting it to a non-`null` value enables Google Analytics tracking. Default: `null`.
`tracking.trackErrors` enables (`true`) or disables (`false`) error tracking via Google Analytics. Errors can only be tracked if a valid Google Analytics ID is provided. For additional details on error tracking via Google Analytics see the [tracking README](https://github.com/jaegertracing/jaeger-ui/blob/c622330546afc1be59a42f874bcc1c2fadf7e69a/src/utils/tracking/README.md) in the UI repo. Default: `true`.
`menu` allows additional links to be added to the global nav. The additional links are right-aligned.
In the sample JSON config above, the configured menu will have a dropdown labeled "About Jaeger" with sub-options for "GitHub" and "Docs". The format for a link in the top right menu is as follows:
```json
{
"label": "Some text here",
"url": "https://example.com"
}
```
Links can either be members of the `menu` Array, directly, or they can be grouped into a dropdown menu option. The format for a group of links is:
```json
{
"label": "Dropdown button",
"items": [ ]
}
```
The `items` Array should contain one or more link configurations.
## Embedded Mode
Starting with version 1.9, Jaeger UI provides an "embedded" layout mode which is intended to support integrating Jaeger UI into other applications. Currently (as of `v0`), the approach taken is to remove various UI elements from the page to make the UI better suited for space-constrained layouts.
The embedded mode is induced and configured via URL query parameters.
To enter embedded mode, the `uiEmbed=v0` query parameter and value must be added to the URL. For example, the following URL will show the trace with ID `abc123` in embedded mode:
```
http://localhost:16686/trace/abc123?uiEmbed=v0
```
`uiEmbed=v0` is required.
Further, each page supported has an <img src="/img/frontend-ui/embed-open-icon.png" style="width: 20px; height:20px;display:inline;" alt="Embed open window"> button added that will open the non-embedded page in a new tab.
The following pages support embedded mode:
* Search Page
* Trace Page
### Search Page
To integrate the Search Trace Page to our application we have to indicate to the Jaeger UI that we want to use the embed mode with `uiEmbed=v0`.
For example:
```
http://localhost:16686/search?
service=my-service&
start=1543917759557000&
end=1543921359557000&
limit=20&
lookback=1h&
maxDuration&
minDuration&
uiEmbed=v0
```
![Embed Search Traces](/img/frontend-ui/embed-search-traces.png)
#### Configuration options
The following query parameter can be used to configure the layout of the search page :
* `uiSearchHideGraph=1` - disables the display of the scatter plot above the search results
```
http://localhost:16686/search?
service=my-service&
start=1543917759557000&
end=1543921359557000&
limit=20&
lookback=1h&
maxDuration&
minDuration&
uiEmbed=v0&
uiSearchHideGraph=1
```
![Embed Search Traces without Graph](/img/frontend-ui/embed-search-traces-hide-graph.png)
### Trace Page
To integrate the Trace Page to our application we have to indicate to the Jaeger UI that we want to use the embed mode with `uiEmbed=v0`.
For example:
```sh
http://localhost:16686/trace/{trace-id}?uiEmbed=v0
```
![Embed Trace view](/img/frontend-ui/embed-trace-view.png)
If we have navigated to this view from the search traces page we'll have a button to go back to the results page.
![Embed Trace view](/img/frontend-ui/embed-trace-view-with-back-button.png)
#### Configuration options
The following query parameters can be used to configure the layout of the trace page :
* `uiTimelineCollapseTitle=1` causes the trace header to start out collapsed, which hides the summary and the minimap.
```
http://localhost:16686/trace/{trace-id}?
uiEmbed=v0&
uiTimelineCollapseTitle=1
```
![Embed Trace view](/img/frontend-ui/embed-trace-view-with-collapse.png)
* `uiTimelineHideMinimap=1` removes the minimap, entirely, regardless of whether the trace header is expanded or not.
```
http://localhost:16686/trace/{trace-id}?
uiEmbed=v0&
uiTimelineHideMinimap=1
```
![Embed Trace view](/img/frontend-ui/embed-trace-view-with-hide-minimap.png)
* `uiTimelineHideSummary=1` - removes the trace summary information (number of services, etc.) entirely, regardless of whether the trace header is expanded or not.
```
http://localhost:16686/trace/{trace-id}?
uiEmbed=v0&
uiTimelineHideSummary=1
```
![Embed Trace view](/img/frontend-ui/embed-trace-view-with-hide-summary.png)
We can also combine the options:
```
http://localhost:16686/trace/{trace-id}?
uiEmbed=v0&
uiTimelineHideMinimap=1&
uiTimelineHideSummary=1
```
![Embed Trace view](/img/frontend-ui/embed-trace-view-with-hide-details-and-hide-minimap.png)

View File

@ -1,129 +0,0 @@
---
title: Getting started
description: Get up and running with Jaeger in your local environment
weight: 2
---
## Instrumentation
Your applications must be instrumented before they can send tracing data to Jaeger backend. Check the [Client Libraries](../client-libraries) section for information about how to use the OpenTracing API and how to initialize and configure Jaeger tracers.
## All in One
All-in-one is an executable designed for quick local testing, launches the Jaeger UI, collector, query, and agent, with an in memory storage component.
The simplest way to start the all-in-one is to use the pre-built image published to DockerHub (a single command line).
```bash
$ docker run -d --name jaeger \
-e COLLECTOR_ZIPKIN_HTTP_PORT=9411 \
-p 5775:5775/udp \
-p 6831:6831/udp \
-p 6832:6832/udp \
-p 5778:5778 \
-p 16686:16686 \
-p 14268:14268 \
-p 9411:9411 \
jaegertracing/all-in-one:{{< currentVersion >}}
```
Or run the `jaeger-all-in-one(.exe)` executable from the [binary distribution archives][download]:
```bash
$ jaeger-all-in-one --collector.zipkin.http-port=9411
```
You can then navigate to `http://localhost:16686` to access the Jaeger UI.
The container exposes the following ports:
Port | Protocol | Component | Function
----- | ------- | --------- | ---
5775 | UDP | agent | accept `zipkin.thrift` over compact thrift protocol (deprecated, used by legacy clients only)
6831 | UDP | agent | accept `jaeger.thrift` over compact thrift protocol
6832 | UDP | agent | accept `jaeger.thrift` over binary thrift protocol
5778 | HTTP | agent | serve configs
16686 | HTTP | query | serve frontend
14268 | HTTP | collector | accept `jaeger.thrift` directly from clients
14250 | HTTP | collector | accept `model.proto`
9411 | HTTP | collector | Zipkin compatible endpoint (optional)
## Kubernetes and OpenShift
* Kubernetes templates: https://github.com/jaegertracing/jaeger-kubernetes
* Kubernetes Operator: https://github.com/jaegertracing/jaeger-operator
* OpenShift templates: https://github.com/jaegertracing/jaeger-openshift
## Sample App: HotROD
HotROD (Rides on Demand) is a demo application that consists of several microservices and
illustrates the use of the [OpenTracing API](http://opentracing.io).
A tutorial / walkthrough is available in the blog post:
[Take OpenTracing for a HotROD ride][hotrod-tutorial].
It can be run standalone, but requires Jaeger backend to view the traces.
### Features
- Discover architecture of the whole system via data-driven dependency
diagram.
- View request timeline and errors; understand how the app works.
- Find sources of latency and lack of concurrency.
- Highly contextualized logging.
- Use baggage propagation to:
- Diagnose inter-request contention (queueing).
- Attribute time spent in a service.
- Use open source libraries with OpenTracing integration to get
vendor-neutral instrumentation for free.
### Prerequisites
- You need Go 1.11 or higher installed on your machine to run from source.
- Requires a [running Jaeger backend](#all-in-one) to view the traces.
### Running
#### From Source
```bash
mkdir -p $GOPATH/src/github.com/jaegertracing
cd $GOPATH/src/github.com/jaegertracing
git clone git@github.com:jaegertracing/jaeger.git jaeger
cd jaeger
make install
go run ./examples/hotrod/main.go all
```
#### From docker
```bash
$ docker run --rm -it \
--link jaeger \
-p8080-8083:8080-8083 \
-e JAEGER_AGENT_HOST="jaeger" \
jaegertracing/example-hotrod:{{< currentVersion >}} \
all
```
#### From binary distribution
Run `example-hotrod(.exe)` executable from the [binary distribution archives][download]:
```bash
$ example-hotrod all
```
Then navigate to `http://localhost:8080`.
## Migrating from Zipkin
Collector service exposes Zipkin compatible REST API `/api/v1/spans` which accepts both Thrift and JSON. Also there is `/api/v2/spans` for JSON only.
By default it's disabled. It can be enabled with `--collector.zipkin.http-port=9411`.
Zipkin Thrift IDL file can be found in [jaegertracing/jaeger-idl](https://github.com/jaegertracing/jaeger-idl/blob/master/thrift/zipkincore.thrift).
It's compatible with [openzipkin/zipkin-api](https://github.com/openzipkin/zipkin-api/blob/master/thrift/zipkinCore.thrift)
[hotrod-tutorial]: https://medium.com/@YuriShkuro/take-opentracing-for-a-hotrod-ride-f6e3141f7941
[download]: ../../../download/

View File

@ -1,66 +0,0 @@
---
title: Introduction
weight: 1
---
Welcome to Jaeger's documentation portal! Below, you'll find information for beginners and experienced Jaeger users.
If you can't find what you are looking for, or have an issue not covered here, we'd love to [hear from you](/get-in-touch).
## About
Jaeger, inspired by [Dapper][dapper] and [OpenZipkin](http://zipkin.io),
is a distributed tracing system released as open source by [Uber Technologies][ubeross].
It is used for monitoring and troubleshooting microservices-based distributed systems, including:
* Distributed context propagation
* Distributed transaction monitoring
* Root cause analysis
* Service dependency analysis
* Performance / latency optimization
Uber published a blog post, [Evolving Distributed Tracing at Uber](https://eng.uber.com/distributed-tracing/), where they explain the history and reasons for the architectural choices made in Jaeger.
## Features
* [OpenTracing](http://opentracing.io/) compatible data model and instrumentation libraries
* in [Go](https://github.com/jaegertracing/jaeger-client-go), [Java](https://github.com/jaegertracing/jaeger-client-java), [Node](https://github.com/jaegertracing/jaeger-client-node), [Python](https://github.com/jaegertracing/jaeger-client-python)
and [C++](https://github.com/jaegertracing/cpp-client)
* Uses consistent upfront sampling with individual per service/endpoint probabilities
* Multiple storage backends: Cassandra, Elasticsearch, memory.
* Adaptive sampling (coming soon)
* Post-collection data processing pipeline (coming soon)
See [Features](./features/) page for more details.
## Technical Specs
* Backend components implemented in Go
* React/Javascript UI
* Supported storage backends:
* [Cassandra 3.4+](./deployment/#cassandra)
* [Elasticsearch 5.x, 6.x](./deployment/#elasticsearch)
* [Kafka](./deployment/#kafka)
* memory storage
## Quick Start
See [running a docker all in one image](getting-started#all-in-one).
## Screenshots
### Traces View
[![Traces View](/img/traces-ss.png)](/img/traces-ss.png)
### Trace Detail View
[![Detail View](/img/trace-detail-ss.png)](/img/trace-detail-ss.png)
## Related links
- [Evolving Distributed tracing At Uber Engineering](https://eng.uber.com/distributed-tracing/)
- [Tracing HTTP request latency in Go with OpenTracing](https://medium.com/opentracing/tracing-http-request-latency-in-go-with-opentracing-7cc1282a100a)
- [Distributed Tracing with Jaeger & Prometheus on Kubernetes](https://blog.openshift.com/openshift-commons-briefing-82-distributed-tracing-with-jaeger-prometheus-on-kubernetes/)
- [Using Jaeger with Istio](https://istio.io/docs/tasks/telemetry/distributed-tracing.html)
- [Using Jaeger with Envoy](https://www.envoyproxy.io/docs/envoy/latest/start/sandboxes/jaeger_tracing.html)
[dapper]: https://research.google.com/pubs/pub36356.html
[ubeross]: http://uber.github.io

View File

@ -1,355 +0,0 @@
---
title: Deployment
weight: 7
children:
- title: Frontend/UI
url: frontend-ui
---
The main Jaeger backend components are released as Docker images on Docker Hub:
Component | Repository
--------------------- | ---
**jaeger-agent** | [hub.docker.com/r/jaegertracing/jaeger-agent/](https://hub.docker.com/r/jaegertracing/jaeger-agent/)
**jaeger-collector** | [hub.docker.com/r/jaegertracing/jaeger-collector/](https://hub.docker.com/r/jaegertracing/jaeger-collector/)
**jaeger-query** | [hub.docker.com/r/jaegertracing/jaeger-query/](https://hub.docker.com/r/jaegertracing/jaeger-query/)
**jaeger-ingester** | [hub.docker.com/r/jaegertracing/jaeger-ingester/](https://hub.docker.com/r/jaegertracing/jaeger-ingester/)
There are orchestration templates for running Jaeger with:
* Kubernetes: [github.com/jaegertracing/jaeger-kubernetes](https://github.com/jaegertracing/jaeger-kubernetes),
* OpenShift: [github.com/jaegertracing/jaeger-openshift](https://github.com/jaegertracing/jaeger-openshift).
## Configuration Options
Jaeger binaries can be configured in a number of ways (in the order of decreasing priority):
* command line arguments,
* environment variables,
* configuration files in JSON, TOML, YAML, HCL, or Java properties formats.
To see the complete list of options, run the binary with `help` command. Options that are specific to a certain storage backend are only listed if the storage type is selected. For example, to see all available options in the Collector with Cassandra storage:
```sh
$ docker run --rm \
-e SPAN_STORAGE_TYPE=cassandra \
jaegertracing/jaeger-collector:{{< currentVersion >}} \
help
```
In order to provide configuration parameters via environment variables, find the respective command line option and convert its name to UPPER_SNAKE_CASE, for example:
Command line option | Environment variable
-----------------------------------|-------------------------------
`--cassandra.connections-per-host` | `CASSANDRA_CONNECTIONS_PER_HOST`
`--metrics-backend` | `METRICS_BACKEND`
## Agent
Jaeger client libraries expect **jaeger-agent** process to run locally on each host.
The agent exposes the following ports:
Port | Protocol | Function
---- | ------- | ---
5775 | UDP | accept zipkin.thrift over compact thrift protocol
6831 | UDP | accept jaeger.thrift over compact thrift protocol
6832 | UDP | accept jaeger.thrift over binary thrift protocol
5778 | HTTP | serve configs, sampling strategies
It can be executed directly on the host or via Docker, as follows:
```sh
## make sure to expose only the ports you use in your deployment scenario!
docker run \
--rm \
-p5775:5775/udp \
-p6831:6831/udp \
-p6832:6832/udp \
-p5778:5778/tcp \
jaegertracing/jaeger-agent:{{< currentVersion >}}
```
### Discovery System Integration
The agents can connect point to point to a single collector address, which could be
load balanced by another infrastructure component (e.g. DNS) across multiple collectors.
The agent can also be configured with a static list of collector addresses.
On Docker, a command like the following can be used:
```sh
docker run \
--rm \
-p5775:5775/udp \
-p6831:6831/udp \
-p6832:6832/udp \
-p5778:5778/tcp \
jaegertracing/jaeger-agent:{{< currentVersion >}} \
--reporter.grpc.host-port=jaeger-collector.jaeger-infra.svc:14250
```
Or use `--reporter.tchannel.host-port=jaeger-collector.jaeger-infra.svc:14267` to use
legacy tchannel reporter.
When using gRPC, you have several options for load balancing and name resolution:
* Single connection and no load balancing. This is the default if you specify a single `host:port`. (example: `--reporter.grpc.host-port=jaeger-collector.jaeger-infra.svc:14250`)
* Static list of hostnames and round-robin load balancing. This is what you get with a comma-separated list of addresses. (example: `reporter.grpc.host-port=jaeger-collector1:14250,jaeger-collector2:14250,jaeger-collector3:14250`)
* Dynamic DNS resolution and round-robin load balancing. To get this behaviour, prefix the address with `dns:///` and gRPC will attempt to resolve the hostname using SRV records (for [external load balancing](https://github.com/grpc/grpc/blob/master/doc/load-balancing.md)), TXT records (for [service configs](https://github.com/grpc/grpc/blob/master/doc/service_config.md)), and A records. Refer to the [gRPC Name Resolution docs](https://github.com/grpc/grpc/blob/master/doc/naming.md) and the [dns_resolver.go implementation](https://github.com/grpc/grpc-go/blob/master/resolver/dns/dns_resolver.go) for more info. (example: `--reporter.grpc.host-port=dns:///jaeger-collector.jaeger-infra.svc:14250`)
## Collectors
The collectors are stateless and thus many instances of **jaeger-collector** can be run in parallel.
Collectors require almost no configuration, except for the location of Cassandra cluster,
via `--cassandra.keyspace` and `--cassandra.servers` options, or the location of Elasticsearch cluster, via
`--es.server-urls`, depending on which storage is specified. To see all command line options run
```sh
go run ./cmd/collector/main.go -h
```
or, if you don't have the source code
```sh
docker run -it --rm jaegertracing/jaeger-collector:{{< currentVersion >}} -h
```
At default settings the collector exposes the following ports:
Port | Protocol | Function
----- | ------- | ---
14267 | TChannel | used by **jaeger-agent** to send spans in jaeger.thrift format
14250 | gRPC | used by **jaeger-agent** to send spans in model.proto format
14268 | HTTP | can accept spans directly from clients in jaeger.thrift format over binary thrift protocol
9411 | HTTP | can accept Zipkin spans in JSON or Thrift (disabled by default)
14269 | HTTP | Health check at **/**
## Storage Backends
Collectors require a persistent storage backend. Cassandra and Elasticsearch are the primary supported storage backends. Additional backends are [discussed here](https://github.com/jaegertracing/jaeger/issues/638).
The storage type can be passed via `SPAN_STORAGE_TYPE` environment variable. Valid values are `cassandra`, `elasticsearch`, `kafka` (only as a buffer) and `memory` (only for all-in-one binary).
As of version 1.6.0, it's possible to use multiple storage types at the same time by providing a comma-separated list of valid types to the `SPAN_STORAGE_TYPE` environment variable.
It's important to note that all listed storage types are used for writing, but only the first type in the list will be used for reading and archiving.
### Memory
The in-memory storage is not intended for production workloads. It's intended as a simple solution to get started quickly and
data will be lost once the process is gone.
By default, there's no limit in the amount of traces stored in memory but a limit can be established by passing an
integer value via `--memory.max-traces`.
### Cassandra
Supported versions: 3.4+
Deploying Cassandra itself is out of scope for our documentation. One good
source of documentation is the [Apache Cassandra Docs](https://cassandra.apache.org/doc/latest/).
#### Configuration
##### Minimal
```sh
docker run \
-e SPAN_STORAGE_TYPE=cassandra \
-e CASSANDRA_SERVERS=<...> \
jaegertracing/jaeger-collector:{{< currentVersion >}}
```
##### All options
To view the full list of configuration options, you can run the following command:
```sh
docker run \
-e SPAN_STORAGE_TYPE=cassandra \
jaegertracing/jaeger-collector:{{< currentVersion >}} \
--help
```
#### Schema script
A script is provided to initialize Cassandra keyspace and schema
using Cassandra's interactive shell [`cqlsh`][cqlsh]:
```sh
MODE=test sh ./plugin/storage/cassandra/schema/create.sh | cqlsh
```
For production deployment, pass `MODE=prod DATACENTER={datacenter}` arguments to the script,
where `{datacenter}` is the name used in the Cassandra configuration / network topology.
The script also allows overriding TTL, keyspace name, replication factor, etc.
Run the script without arguments to see the full list of recognized parameters.
#### TLS support
Jaeger supports TLS client to node connections as long as you've configured
your Cassandra cluster correctly. After verifying with e.g. `cqlsh`, you can
configure the collector and query like so:
```sh
docker run \
-e CASSANDRA_SERVERS=<...> \
-e CASSANDRA_TLS=true \
-e CASSANDRA_TLS_SERVER_NAME="CN-in-certificate" \
-e CASSANDRA_TLS_KEY=<path to client key file> \
-e CASSANDRA_TLS_CERT=<path to client cert file> \
-e CASSANDRA_TLS_CA=<path to your CA cert file> \
jaegertracing/jaeger-collector:{{< currentVersion >}}
```
The schema tool also supports TLS. You need to make a custom cqlshrc file like
so:
```
# Creating schema in a cassandra cluster requiring client TLS certificates.
#
# Create a volume for the schema docker container containing four files:
# cqlshrc: this file
# ca-cert: the cert authority for your keys
# client-key: the keyfile for your client
# client-cert: the cert file matching client-key
#
# if there is any sort of DNS mismatch and you want to ignore server validation
# issues, then uncomment validate = false below.
#
# When running the container, map this volume to /root/.cassandra and set the
# environment variable CQLSH_SSL=--ssl
[ssl]
certfile = ~/.cassandra/ca-cert
userkey = ~/.cassandra/client-key
usercert = ~/.cassandra/client-cert
# validate = false
```
### Elasticsearch
Supported in Jaeger since 0.6.0
Supported versions: 5.x, 6.x
Elasticsearch does not require initialization other than
[installing and running Elasticsearch](https://www.elastic.co/downloads/elasticsearch).
Once it is running, pass the correct configuration values to the Jaeger collector and query service.
#### Configuration
##### Minimal
```sh
docker run \
-e SPAN_STORAGE_TYPE=elasticsearch \
-e ES_SERVER_URLS=<...> \
jaegertracing/jaeger-collector:{{< currentVersion >}}
```
##### All options
To view the full list of configuration options, you can run the following command:
```sh
docker run \
-e SPAN_STORAGE_TYPE=elasticsearch \
jaegertracing/jaeger-collector:{{< currentVersion >}} \
--help
```
See the [README](https://github.com/jaegertracing/jaeger/tree/master/plugin/storage/es/README.md) for an in-depth overview of how Jaeger uses Elasticsearch for storage.
#### Shards and Replicas for Elasticsearch indices
Shards and replicas are some configuration values to take special attention to, because this is decided upon
index creation. [This article](https://qbox.io/blog/optimizing-elasticsearch-how-many-shards-per-index) goes into
more information about choosing how many shards should be chosen for optimization.
### Kafka
Supported in Jaeger since 1.6.0
Supported Kafka versions: 0.9+
Kafka can be used as an intermediary buffer between collector and an actual storage.
The collector is configured with `SPAN_STORAGE_TYPE=kafka` that makes it write all received spans
into a Kafka topic. A new component [Ingester](#ingester), added in version 1.7.0, is used to read from
Kafka and store spans in another storage backend (Elasticsearch or Cassandra).
Writing to Kafka is particularly useful for building post-processing data pipelines.
#### Configuration
##### Minimal
```sh
docker run \
-e SPAN_STORAGE_TYPE=kafka \
-e KAFKA_BROKERS=<...> \
-e KAFKA_TOPIC=<...> \
jaegertracing/jaeger-collector:{{< currentVersion >}}
```
##### All options
To view the full list of configuration options, you can run the following command:
```sh
docker run \
-e SPAN_STORAGE_TYPE=kafka \
jaegertracing/jaeger-collector:{{< currentVersion >}} \
--help
```
#### Topic & partitions
Unless your Kafka cluster is configured to automatically create topics, you will need to create it ahead of time. You can refer to [the Kafka quickstart documentation](https://kafka.apache.org/documentation/#quickstart_createtopic) to learn how.
You can find more information about topics and partitions in general in the [official documentation](https://kafka.apache.org/documentation/#intro_topics). [This article](https://www.confluent.io/blog/how-to-choose-the-number-of-topicspartitions-in-a-kafka-cluster/) provide more details about how to choose the number of partitions.
## Ingester
**jaeger-ingester** is a service which reads span data from Kafka topic and writes it to another storage backend (Elasticsearch or Cassandra).
Port | Protocol | Function
----- | ------- | ---
14270 | HTTP | Health check at **/**
14271 | HTTP | Metrics endpoint
To view all exposed configuration options run the following command:
```sh
docker run \
-e SPAN_STORAGE_TYPE=cassandra \
jaegertracing/jaeger-ingester:{{< currentVersion >}}
--help
```
## Query Service & UI
**jaeger-query** serves the API endpoints and a React/Javascript UI.
The service is stateless and is typically run behind a load balancer, such as **nginx**.
At default settings the query service exposes the following port(s):
Port | Protocol | Function
----- | ------- | ---
16686 | HTTP | **/api/*** endpoints and Jaeger UI at **/**
16687 | HTTP | Health check at **/**
### Minimal deployment example (Elasticsearch backend):
```sh
docker run -d --rm \
-p 16686:16686 \
-p 16687:16687 \
-e SPAN_STORAGE_TYPE=elasticsearch \
-e ES_SERVER_URLS=http://<ES_SERVER_IP>:<ES_SERVER_PORT> \
jaegertracing/jaeger-query:{{< currentVersion >}}
```
### UI Base Path
The base path for all **jaeger-query** HTTP routes can be set to a non-root value, e.g. `/jaeger` would cause all UI URLs to start with `/jaeger`. This can be useful when running **jaeger-query** behind a reverse proxy.
The base path can be configured via the `--query.base-path` command line parameter or the `QUERY_BASE_PATH` environment variable.
### UI Customization and Embedding
Please refer to the [dedicated Frontend/UI page](../frontend-ui/).
## Aggregation Jobs for Service Dependencies
Production deployments need an external process which aggregates data and creates dependency links between services.
Project [spark-dependencies](https://github.com/jaegertracing/spark-dependencies) is a Spark job which derives
dependency links and stores them directly to the storage.
## Configuration
All binaries accepts command line properties and environmental variables which are managed by
by [viper](https://github.com/spf13/viper) and [cobra](https://github.com/spf13/cobra).
The names of environmental properties are capital letters and characters `-` and `.` are replaced with `_`.
To list all configuration properties call `jaeger-binary -h`.
[cqlsh]: http://cassandra.apache.org/doc/latest/tools/cqlsh.html

View File

@ -1,16 +0,0 @@
---
title: Frequently Asked Questions
description: Answers to some frequently asked questions about Jaeger.
weight: 11
---
## Why is the Dependencies page empty?
The Dependencies page shows a graph of services traced by Jaeger and connections between them. When you are using `all-in-one` binary with in-memory storage, the graph is calculated on-demand from all the traces stored in memory. However, if you are using a real distributed storage like Cassandra or Elasticsearch, it is too expensive to scan all the data in the database to build the service graph. Instead, the Jaeger project provides "big data" jobs that can be used to extract the service graph data from traces:
* https://github.com/jaegertracing/spark-dependencies - the older Spark job that can be run periodically
* https://github.com/jaegertracing/jaeger-analytics - the new (experimental) streaming Flink jobs that run continuously and build the service graph in smaller time intervals
## Why do I not see any spans in Jaeger?
Please refer to the [Troubleshooting](../troubleshooting/) guide.

View File

@ -1,57 +0,0 @@
---
title: Features
weight: 3
---
Jaeger is used for monitoring and troubleshooting microservices-based distributed systems, including:
* Distributed context propagation
* Distributed transaction monitoring
* Root cause analysis
* Service dependency analysis
* Performance / latency optimization
## High Scalability
Jaeger backend is designed to have no single points of failure and to scale with the business needs.
For example, any given Jaeger installation at Uber is typically processing several billion {{< tip "spans" "span" >}} per day.
## Native support for OpenTracing
Jaeger backend, Web UI, and instrumentation libraries have been designed from ground up to support the OpenTracing standard.
* Represent {{< tip "traces" "trace" >}} as {{< tip "directed acyclic graphs" "directed acyclic graph" >}} (not just trees) via [span references](https://github.com/opentracing/specification/blob/master/specification.md#references-between-spans)
* Support strongly typed span _tags_ and _structured logs_
* Support general distributed context propagation mechanism via _baggage_
## Multiple storage backends
Jaeger supports two popular open source NoSQL databases as trace storage backends: Cassandra 3.4+ and Elasticsearch 5.x/6.x.
There are ongoing community experiments using other databases, such as ScyllaDB, InfluxDB, Amazon DynamoDB. Jaeger also ships
with a simple in-memory storage for testing setups.
## Modern Web UI
Jaeger Web UI is implemented in Javascript using popular open source frameworks like React. Several performance
improvements have been released in v1.0 to allow the UI to efficiently deal with large volumes of data, and to display
{{< tip "traces" "trace" >}} with tens of thousands of {{< tip "spans" "span" >}} (e.g. we tried a trace with 80,000 spans).
## Cloud Native Deployment
Jaeger backend is distributed as a collection of Docker images. The binaries support various configuration methods,
including command line options, environment variables, and configuration files in multiple formats (yaml, toml, etc.).
Deployment to Kubernetes clusters is assisted by a [Kubernetes operator](https://github.com/jaegertracing/jaeger-operator), [Kubernetes templates](https://github.com/jaegertracing/jaeger-kubernetes)
and a [Helm chart](https://github.com/kubernetes/charts/tree/master/incubator/jaeger).
## Observability
All Jaeger backend components expose [Prometheus](https://prometheus.io/) metrics by default (other metrics backends are
also supported). Logs are written to standard out using the structured logging library [zap](https://github.com/uber-go/zap).
## Backwards compatibility with Zipkin
Although we recommend instrumenting applications with OpenTracing API and binding to Jaeger client libraries to benefit
from advanced features not available elsewhere, if your organization has already invested in the instrumentation
using Zipkin libraries, you do not have to rewrite all that code. Jaeger provides backwards compatibility with Zipkin
by accepting spans in Zipkin formats (Thrift or JSON v1/v2) over HTTP. Switching from Zipkin backend is just a matter
of routing the traffic from Zipkin libraries to the Jaeger backend.

View File

@ -1,196 +0,0 @@
---
title: Frontend/UI
hasparent: true
weight: 10
---
## Configuration
Several aspects of the UI can be configured:
* The Dependencies section can be enabled / configured
* Google Analytics tracking can be enabled / configured
* Additional menu options can be added to the global nav
These options can be configured by a JSON configuration file. The `--query.ui-config` command line parameter of the query service must then be set to the path to the JSON file when the query service is started.
An example configuration file:
```json
{
"dependencies": {
"dagMaxNumServices": 200,
"menuEnabled": true
},
"archiveEnabled": true,
"tracking": {
"gaID": "UA-000000-2",
"trackErrors": true
},
"menu": [
{
"label": "About Jaeger",
"items": [
{
"label": "GitHub",
"url": "https://github.com/jaegertracing/jaeger"
},
{
"label": "Docs",
"url": "http://jaeger.readthedocs.io/en/latest/"
}
]
}
]
}
```
`dependencies.dagMaxNumServices` defines the maximum number of services allowed before the DAG dependency view is disabled. Default: `200`.
`dependencies.menuEnabled` enables (`true`) or disables (`false`) the dependencies menu button. Default: `true`.
`archiveEnabled` enables (`true`) or disables (`false`) the archive traces button. Default: `false`. It requires a configuration of an archive storage in Query service. Archived traces are only accessible directly by ID, they are not searchable.
`tracking.gaID` defines the Google Analytics tracking ID. This is required for Google Analytics tracking, and setting it to a non-`null` value enables Google Analytics tracking. Default: `null`.
`tracking.trackErrors` enables (`true`) or disables (`false`) error tracking via Google Analytics. Errors can only be tracked if a valid Google Analytics ID is provided. For additional details on error tracking via Google Analytics see the [tracking README](https://github.com/jaegertracing/jaeger-ui/blob/c622330546afc1be59a42f874bcc1c2fadf7e69a/src/utils/tracking/README.md) in the UI repo. Default: `true`.
`menu` allows additional links to be added to the global nav. The additional links are right-aligned.
In the sample JSON config above, the configured menu will have a dropdown labeled "About Jaeger" with sub-options for "GitHub" and "Docs". The format for a link in the top right menu is as follows:
```json
{
"label": "Some text here",
"url": "https://example.com"
}
```
Links can either be members of the `menu` Array, directly, or they can be grouped into a dropdown menu option. The format for a group of links is:
```json
{
"label": "Dropdown button",
"items": [ ]
}
```
The `items` Array should contain one or more link configurations.
## Embedded Mode
Starting with version 1.9, Jaeger UI provides an "embedded" layout mode which is intended to support integrating Jaeger UI into other applications. Currently (as of `v0`), the approach taken is to remove various UI elements from the page to make the UI better suited for space-constrained layouts.
The embedded mode is induced and configured via URL query parameters.
To enter embedded mode, the `uiEmbed=v0` query parameter and value must be added to the URL. For example, the following URL will show the trace with ID `abc123` in embedded mode:
```
http://localhost:16686/trace/abc123?uiEmbed=v0
```
`uiEmbed=v0` is required.
Further, each page supported has an <img src="/img/frontend-ui/embed-open-icon.png" style="width: 20px; height:20px;display:inline;" alt="Embed open window"> button added that will open the non-embedded page in a new tab.
The following pages support embedded mode:
* Search Page
* Trace Page
### Search Page
To integrate the Search Trace Page to our application we have to indicate to the Jaeger UI that we want to use the embed mode with `uiEmbed=v0`.
For example:
```
http://localhost:16686/search?
service=my-service&
start=1543917759557000&
end=1543921359557000&
limit=20&
lookback=1h&
maxDuration&
minDuration&
uiEmbed=v0
```
![Embed Search Traces](/img/frontend-ui/embed-search-traces.png)
#### Configuration options
The following query parameter can be used to configure the layout of the search page :
* `uiSearchHideGraph=1` - disables the display of the scatter plot above the search results
```
http://localhost:16686/search?
service=my-service&
start=1543917759557000&
end=1543921359557000&
limit=20&
lookback=1h&
maxDuration&
minDuration&
uiEmbed=v0&
uiSearchHideGraph=1
```
![Embed Search Traces without Graph](/img/frontend-ui/embed-search-traces-hide-graph.png)
### Trace Page
To integrate the Trace Page to our application we have to indicate to the Jaeger UI that we want to use the embed mode with `uiEmbed=v0`.
For example:
```sh
http://localhost:16686/trace/{trace-id}?uiEmbed=v0
```
![Embed Trace view](/img/frontend-ui/embed-trace-view.png)
If we have navigated to this view from the search traces page we'll have a button to go back to the results page.
![Embed Trace view](/img/frontend-ui/embed-trace-view-with-back-button.png)
#### Configuration options
The following query parameters can be used to configure the layout of the trace page :
* `uiTimelineCollapseTitle=1` causes the trace header to start out collapsed, which hides the summary and the minimap.
```
http://localhost:16686/trace/{trace-id}?
uiEmbed=v0&
uiTimelineCollapseTitle=1
```
![Embed Trace view](/img/frontend-ui/embed-trace-view-with-collapse.png)
* `uiTimelineHideMinimap=1` removes the minimap, entirely, regardless of whether the trace header is expanded or not.
```
http://localhost:16686/trace/{trace-id}?
uiEmbed=v0&
uiTimelineHideMinimap=1
```
![Embed Trace view](/img/frontend-ui/embed-trace-view-with-hide-minimap.png)
* `uiTimelineHideSummary=1` - removes the trace summary information (number of services, etc.) entirely, regardless of whether the trace header is expanded or not.
```
http://localhost:16686/trace/{trace-id}?
uiEmbed=v0&
uiTimelineHideSummary=1
```
![Embed Trace view](/img/frontend-ui/embed-trace-view-with-hide-summary.png)
We can also combine the options:
```
http://localhost:16686/trace/{trace-id}?
uiEmbed=v0&
uiTimelineHideMinimap=1&
uiTimelineHideSummary=1
```
![Embed Trace view](/img/frontend-ui/embed-trace-view-with-hide-details-and-hide-minimap.png)

View File

@ -1,129 +0,0 @@
---
title: Getting started
description: Get up and running with Jaeger in your local environment
weight: 2
---
## Instrumentation
Your applications must be instrumented before they can send tracing data to Jaeger backend. Check the [Client Libraries](../client-libraries) section for information about how to use the OpenTracing API and how to initialize and configure Jaeger tracers.
## All in One
All-in-one is an executable designed for quick local testing, launches the Jaeger UI, collector, query, and agent, with an in memory storage component.
The simplest way to start the all-in-one is to use the pre-built image published to DockerHub (a single command line).
```bash
$ docker run -d --name jaeger \
-e COLLECTOR_ZIPKIN_HTTP_PORT=9411 \
-p 5775:5775/udp \
-p 6831:6831/udp \
-p 6832:6832/udp \
-p 5778:5778 \
-p 16686:16686 \
-p 14268:14268 \
-p 9411:9411 \
jaegertracing/all-in-one:{{< currentVersion >}}
```
Or run the `jaeger-all-in-one(.exe)` executable from the [binary distribution archives][download]:
```bash
$ jaeger-all-in-one --collector.zipkin.http-port=9411
```
You can then navigate to `http://localhost:16686` to access the Jaeger UI.
The container exposes the following ports:
Port | Protocol | Component | Function
----- | ------- | --------- | ---
5775 | UDP | agent | accept `zipkin.thrift` over compact thrift protocol (deprecated, used by legacy clients only)
6831 | UDP | agent | accept `jaeger.thrift` over compact thrift protocol
6832 | UDP | agent | accept `jaeger.thrift` over binary thrift protocol
5778 | HTTP | agent | serve configs
16686 | HTTP | query | serve frontend
14268 | HTTP | collector | accept `jaeger.thrift` directly from clients
14250 | HTTP | collector | accept `model.proto`
9411 | HTTP | collector | Zipkin compatible endpoint (optional)
## Kubernetes and OpenShift
* Kubernetes templates: https://github.com/jaegertracing/jaeger-kubernetes
* Kubernetes Operator: https://github.com/jaegertracing/jaeger-operator
* OpenShift templates: https://github.com/jaegertracing/jaeger-openshift
## Sample App: HotROD
HotROD (Rides on Demand) is a demo application that consists of several microservices and
illustrates the use of the [OpenTracing API](http://opentracing.io).
A tutorial / walkthrough is available in the blog post:
[Take OpenTracing for a HotROD ride][hotrod-tutorial].
It can be run standalone, but requires Jaeger backend to view the traces.
### Features
- Discover architecture of the whole system via data-driven dependency
diagram.
- View request timeline and errors; understand how the app works.
- Find sources of latency and lack of concurrency.
- Highly contextualized logging.
- Use baggage propagation to:
- Diagnose inter-request contention (queueing).
- Attribute time spent in a service.
- Use open source libraries with OpenTracing integration to get
vendor-neutral instrumentation for free.
### Prerequisites
- You need Go 1.11 or higher installed on your machine to run from source.
- Requires a [running Jaeger backend](#all-in-one) to view the traces.
### Running
#### From Source
```bash
mkdir -p $GOPATH/src/github.com/jaegertracing
cd $GOPATH/src/github.com/jaegertracing
git clone git@github.com:jaegertracing/jaeger.git jaeger
cd jaeger
make install
go run ./examples/hotrod/main.go all
```
#### From docker
```bash
$ docker run --rm -it \
--link jaeger \
-p8080-8083:8080-8083 \
-e JAEGER_AGENT_HOST="jaeger" \
jaegertracing/example-hotrod:{{< currentVersion >}} \
all
```
#### From binary distribution
Run `example-hotrod(.exe)` executable from the [binary distribution archives][download]:
```bash
$ example-hotrod all
```
Then navigate to `http://localhost:8080`.
## Migrating from Zipkin
Collector service exposes Zipkin compatible REST API `/api/v1/spans` which accepts both Thrift and JSON. Also there is `/api/v2/spans` for JSON only.
By default it's disabled. It can be enabled with `--collector.zipkin.http-port=9411`.
Zipkin Thrift IDL file can be found in [jaegertracing/jaeger-idl](https://github.com/jaegertracing/jaeger-idl/blob/master/thrift/zipkincore.thrift).
It's compatible with [openzipkin/zipkin-api](https://github.com/openzipkin/zipkin-api/blob/master/thrift/zipkinCore.thrift)
[hotrod-tutorial]: https://medium.com/@YuriShkuro/take-opentracing-for-a-hotrod-ride-f6e3141f7941
[download]: ../../../download/

View File

@ -1,66 +0,0 @@
---
title: Introduction
weight: 1
---
Welcome to Jaeger's documentation portal! Below, you'll find information for beginners and experienced Jaeger users.
If you can't find what you are looking for, or have an issue not covered here, we'd love to [hear from you](/get-in-touch).
## About
Jaeger, inspired by [Dapper][dapper] and [OpenZipkin](http://zipkin.io),
is a distributed tracing system released as open source by [Uber Technologies][ubeross].
It is used for monitoring and troubleshooting microservices-based distributed systems, including:
* Distributed context propagation
* Distributed transaction monitoring
* Root cause analysis
* Service dependency analysis
* Performance / latency optimization
Uber published a blog post, [Evolving Distributed Tracing at Uber](https://eng.uber.com/distributed-tracing/), where they explain the history and reasons for the architectural choices made in Jaeger.
## Features
* [OpenTracing](http://opentracing.io/) compatible data model and instrumentation libraries
* in [Go](https://github.com/jaegertracing/jaeger-client-go), [Java](https://github.com/jaegertracing/jaeger-client-java), [Node](https://github.com/jaegertracing/jaeger-client-node), [Python](https://github.com/jaegertracing/jaeger-client-python)
and [C++](https://github.com/jaegertracing/cpp-client)
* Uses consistent upfront sampling with individual per service/endpoint probabilities
* Multiple storage backends: Cassandra, Elasticsearch, memory.
* Adaptive sampling (coming soon)
* Post-collection data processing pipeline (coming soon)
See [Features](./features/) page for more details.
## Technical Specs
* Backend components implemented in Go
* React/Javascript UI
* Supported storage backends:
* [Cassandra 3.4+](./deployment/#cassandra)
* [Elasticsearch 5.x, 6.x](./deployment/#elasticsearch)
* [Kafka](./deployment/#kafka)
* memory storage
## Quick Start
See [running a docker all in one image](getting-started#all-in-one).
## Screenshots
### Traces View
[![Traces View](/img/traces-ss.png)](/img/traces-ss.png)
### Trace Detail View
[![Detail View](/img/trace-detail-ss.png)](/img/trace-detail-ss.png)
## Related links
- [Evolving Distributed tracing At Uber Engineering](https://eng.uber.com/distributed-tracing/)
- [Tracing HTTP request latency in Go with OpenTracing](https://medium.com/opentracing/tracing-http-request-latency-in-go-with-opentracing-7cc1282a100a)
- [Distributed Tracing with Jaeger & Prometheus on Kubernetes](https://blog.openshift.com/openshift-commons-briefing-82-distributed-tracing-with-jaeger-prometheus-on-kubernetes/)
- [Using Jaeger with Istio](https://istio.io/docs/tasks/telemetry/distributed-tracing.html)
- [Using Jaeger with Envoy](https://www.envoyproxy.io/docs/envoy/latest/start/sandboxes/jaeger_tracing.html)
[dapper]: https://research.google.com/pubs/pub36356.html
[ubeross]: http://uber.github.io

View File

@ -1,396 +0,0 @@
---
title: Deployment
weight: 7
children:
- title: Frontend/UI
url: frontend-ui
---
The main Jaeger backend components are released as Docker images on Docker Hub:
Component | Repository
--------------------- | ---
**jaeger-agent** | [hub.docker.com/r/jaegertracing/jaeger-agent/](https://hub.docker.com/r/jaegertracing/jaeger-agent/)
**jaeger-collector** | [hub.docker.com/r/jaegertracing/jaeger-collector/](https://hub.docker.com/r/jaegertracing/jaeger-collector/)
**jaeger-query** | [hub.docker.com/r/jaegertracing/jaeger-query/](https://hub.docker.com/r/jaegertracing/jaeger-query/)
**jaeger-ingester** | [hub.docker.com/r/jaegertracing/jaeger-ingester/](https://hub.docker.com/r/jaegertracing/jaeger-ingester/)
There are orchestration templates for running Jaeger with:
* Kubernetes: [github.com/jaegertracing/jaeger-kubernetes](https://github.com/jaegertracing/jaeger-kubernetes),
* OpenShift: [github.com/jaegertracing/jaeger-openshift](https://github.com/jaegertracing/jaeger-openshift).
## Configuration Options
Jaeger binaries can be configured in a number of ways (in the order of decreasing priority):
* command line arguments,
* environment variables,
* configuration files in JSON, TOML, YAML, HCL, or Java properties formats.
To see the complete list of options, run the binary with `help` command. Options that are specific to a certain storage backend are only listed if the storage type is selected. For example, to see all available options in the Collector with Cassandra storage:
```sh
$ docker run --rm \
-e SPAN_STORAGE_TYPE=cassandra \
jaegertracing/jaeger-collector:{{< currentVersion >}} \
help
```
In order to provide configuration parameters via environment variables, find the respective command line option and convert its name to UPPER_SNAKE_CASE, for example:
Command line option | Environment variable
-----------------------------------|-------------------------------
`--cassandra.connections-per-host` | `CASSANDRA_CONNECTIONS_PER_HOST`
`--metrics-backend` | `METRICS_BACKEND`
## Agent
Jaeger client libraries expect **jaeger-agent** process to run locally on each host.
The agent exposes the following ports:
Port | Protocol | Function
----- | ------- | ---
6831 | UDP | accept [jaeger.thrift][jaeger-thrift] in `compact` Thrift protocol used by most current Jaeger clients
6832 | UDP | accept [jaeger.thrift][jaeger-thrift] in `binary` Thrift protocol used by Node.js Jaeger client (because [thriftrw][thriftrw] npm package does not support `compact` protocol)
5778 | HTTP | serve configs, sampling strategies
5775 | UDP | accept [zipkin.thrift][zipkin-thrift] in `compact` Thrift protocol (deprecated; only used by very old Jaeger clients, circa 2016)
14271 | HTTP | Healthcheck at `/` and metrics at `/metrics`
It can be executed directly on the host or via Docker, as follows:
```sh
## make sure to expose only the ports you use in your deployment scenario!
docker run \
--rm \
-p6831:6831/udp \
-p6832:6832/udp \
-p5778:5778/tcp \
-p5775:5775/udp \
jaegertracing/jaeger-agent:{{< currentVersion >}}
```
### Discovery System Integration
The agents can connect point to point to a single collector address, which could be
load balanced by another infrastructure component (e.g. DNS) across multiple collectors.
The agent can also be configured with a static list of collector addresses.
On Docker, a command like the following can be used:
```sh
docker run \
--rm \
-p5775:5775/udp \
-p6831:6831/udp \
-p6832:6832/udp \
-p5778:5778/tcp \
jaegertracing/jaeger-agent:{{< currentVersion >}} \
--reporter.grpc.host-port=jaeger-collector.jaeger-infra.svc:14250
```
Or use `--reporter.tchannel.host-port=jaeger-collector.jaeger-infra.svc:14267` to use
legacy tchannel reporter.
When using gRPC, you have several options for load balancing and name resolution:
* Single connection and no load balancing. This is the default if you specify a single `host:port`. (example: `--reporter.grpc.host-port=jaeger-collector.jaeger-infra.svc:14250`)
* Static list of hostnames and round-robin load balancing. This is what you get with a comma-separated list of addresses. (example: `reporter.grpc.host-port=jaeger-collector1:14250,jaeger-collector2:14250,jaeger-collector3:14250`)
* Dynamic DNS resolution and round-robin load balancing. To get this behaviour, prefix the address with `dns:///` and gRPC will attempt to resolve the hostname using SRV records (for [external load balancing](https://github.com/grpc/grpc/blob/master/doc/load-balancing.md)), TXT records (for [service configs](https://github.com/grpc/grpc/blob/master/doc/service_config.md)), and A records. Refer to the [gRPC Name Resolution docs](https://github.com/grpc/grpc/blob/master/doc/naming.md) and the [dns_resolver.go implementation](https://github.com/grpc/grpc-go/blob/master/resolver/dns/dns_resolver.go) for more info. (example: `--reporter.grpc.host-port=dns:///jaeger-collector.jaeger-infra.svc:14250`)
### Agent level tags
Jaeger supports agent level tags, that can be added to the process tags of all spans passing through the agent. This is supported through the command line flag `--jaeger.tags=key1=value1,key2=value2,...,keyn=valuen`. Tags can also be set through an environment flag like so - `--jaeger.tags=key=${envFlag:defaultValue}` - The tag value will be set to the value of the `envFlag` environment key and `defaultValue` if not set. This feature is not supported for the tchannel reporter, enabled using the flags `--collector.host-port` or `--reporter.tchannel.host-port`.
## Collectors
The collectors are stateless and thus many instances of **jaeger-collector** can be run in parallel.
Collectors require almost no configuration, except for the location of Cassandra cluster,
via `--cassandra.keyspace` and `--cassandra.servers` options, or the location of Elasticsearch cluster, via
`--es.server-urls`, depending on which storage is specified. To see all command line options run
```sh
go run ./cmd/collector/main.go -h
```
or, if you don't have the source code
```sh
docker run -it --rm jaegertracing/jaeger-collector:{{< currentVersion >}} -h
```
At default settings the collector exposes the following ports:
Port | Protocol | Function
----- | ------- | ---
14267 | TChannel | used by **jaeger-agent** to send spans in jaeger.thrift format
14250 | gRPC | used by **jaeger-agent** to send spans in model.proto format
14268 | HTTP | can accept spans directly from clients in jaeger.thrift format over binary thrift protocol
9411 | HTTP | can accept Zipkin spans in JSON or Thrift (disabled by default)
14269 | HTTP | Healthcheck at `/` and metrics at `/metrics`
## Storage Backends
Collectors require a persistent storage backend. Cassandra and Elasticsearch are the primary supported storage backends. Additional backends are [discussed here](https://github.com/jaegertracing/jaeger/issues/638).
The storage type can be passed via `SPAN_STORAGE_TYPE` environment variable. Valid values are `cassandra`, `elasticsearch`, `kafka` (only as a buffer), `grpc-plugin`, `badger` (only with all-in-one) and `memory` (only with all-in-one).
As of version 1.6.0, it's possible to use multiple storage types at the same time by providing a comma-separated list of valid types to the `SPAN_STORAGE_TYPE` environment variable.
It's important to note that all listed storage types are used for writing, but only the first type in the list will be used for reading and archiving.
### Memory
The in-memory storage is not intended for production workloads. It's intended as a simple solution to get started quickly and
data will be lost once the process is gone.
By default, there's no limit in the amount of traces stored in memory but a limit can be established by passing an
integer value via `--memory.max-traces`.
### Badger - local storage
Experimental since Jaeger 1.9
[Badger](https://github.com/dgraph-io/badger) is an embedded local storage, only available
with **all-in-one** distribution. By default it acts as an ephemeral storage using a temporary filesystem.
This can be overridden by using the `--badger.ephemeral=false` option.
```sh
docker run \
-e SPAN_STORAGE_TYPE=badger \
-e BADGER_EPHEMERAL=false \
-e BADGER_DIRECTORY_VALUE=/badger/data \
-e BADGER_DIRECTORY_KEY=/badger/key \
-v <storage_dir_on_host>:/badger \
-p 16686:16686 \
jaegertracing/all-in-one:{{< currentVersion >}}
```
### Cassandra
Supported versions: 3.4+
Deploying Cassandra itself is out of scope for our documentation. One good
source of documentation is the [Apache Cassandra Docs](https://cassandra.apache.org/doc/latest/).
#### Configuration
##### Minimal
```sh
docker run \
-e SPAN_STORAGE_TYPE=cassandra \
-e CASSANDRA_SERVERS=<...> \
jaegertracing/jaeger-collector:{{< currentVersion >}}
```
##### All options
To view the full list of configuration options, you can run the following command:
```sh
docker run \
-e SPAN_STORAGE_TYPE=cassandra \
jaegertracing/jaeger-collector:{{< currentVersion >}} \
--help
```
#### Schema script
A script is provided to initialize Cassandra keyspace and schema
using Cassandra's interactive shell [`cqlsh`][cqlsh]:
```sh
MODE=test sh ./plugin/storage/cassandra/schema/create.sh | cqlsh
```
For production deployment, pass `MODE=prod DATACENTER={datacenter}` arguments to the script,
where `{datacenter}` is the name used in the Cassandra configuration / network topology.
The script also allows overriding TTL, keyspace name, replication factor, etc.
Run the script without arguments to see the full list of recognized parameters.
#### TLS support
Jaeger supports TLS client to node connections as long as you've configured
your Cassandra cluster correctly. After verifying with e.g. `cqlsh`, you can
configure the collector and query like so:
```sh
docker run \
-e CASSANDRA_SERVERS=<...> \
-e CASSANDRA_TLS=true \
-e CASSANDRA_TLS_SERVER_NAME="CN-in-certificate" \
-e CASSANDRA_TLS_KEY=<path to client key file> \
-e CASSANDRA_TLS_CERT=<path to client cert file> \
-e CASSANDRA_TLS_CA=<path to your CA cert file> \
jaegertracing/jaeger-collector:{{< currentVersion >}}
```
The schema tool also supports TLS. You need to make a custom cqlshrc file like
so:
```
# Creating schema in a cassandra cluster requiring client TLS certificates.
#
# Create a volume for the schema docker container containing four files:
# cqlshrc: this file
# ca-cert: the cert authority for your keys
# client-key: the keyfile for your client
# client-cert: the cert file matching client-key
#
# if there is any sort of DNS mismatch and you want to ignore server validation
# issues, then uncomment validate = false below.
#
# When running the container, map this volume to /root/.cassandra and set the
# environment variable CQLSH_SSL=--ssl
[ssl]
certfile = ~/.cassandra/ca-cert
userkey = ~/.cassandra/client-key
usercert = ~/.cassandra/client-cert
# validate = false
```
### Elasticsearch
Supported in Jaeger since 0.6.0
Supported versions: 5.x, 6.x
Elasticsearch does not require initialization other than
[installing and running Elasticsearch](https://www.elastic.co/downloads/elasticsearch).
Once it is running, pass the correct configuration values to the Jaeger collector and query service.
#### Configuration
##### Minimal
```sh
docker run \
-e SPAN_STORAGE_TYPE=elasticsearch \
-e ES_SERVER_URLS=<...> \
jaegertracing/jaeger-collector:{{< currentVersion >}}
```
##### All options
To view the full list of configuration options, you can run the following command:
```sh
docker run \
-e SPAN_STORAGE_TYPE=elasticsearch \
jaegertracing/jaeger-collector:{{< currentVersion >}} \
--help
```
See the [README](https://github.com/jaegertracing/jaeger/tree/master/plugin/storage/es/README.md) for an in-depth overview of how Jaeger uses Elasticsearch for storage.
#### Shards and Replicas for Elasticsearch indices
Shards and replicas are some configuration values to take special attention to, because this is decided upon
index creation. [This article](https://qbox.io/blog/optimizing-elasticsearch-how-many-shards-per-index) goes into
more information about choosing how many shards should be chosen for optimization.
### Kafka
Supported in Jaeger since 1.6.0
Supported Kafka versions: 0.9+
Kafka can be used as an intermediary buffer between collector and an actual storage.
The collector is configured with `SPAN_STORAGE_TYPE=kafka` that makes it write all received spans
into a Kafka topic. A new component [Ingester](#ingester), added in version 1.7.0, is used to read from
Kafka and store spans in another storage backend (Elasticsearch or Cassandra).
Writing to Kafka is particularly useful for building post-processing data pipelines.
#### Configuration
##### Minimal
```sh
docker run \
-e SPAN_STORAGE_TYPE=kafka \
-e KAFKA_BROKERS=<...> \
-e KAFKA_TOPIC=<...> \
jaegertracing/jaeger-collector:{{< currentVersion >}}
```
##### All options
To view the full list of configuration options, you can run the following command:
```sh
docker run \
-e SPAN_STORAGE_TYPE=kafka \
jaegertracing/jaeger-collector:{{< currentVersion >}} \
--help
```
#### Topic & partitions
Unless your Kafka cluster is configured to automatically create topics, you will need to create it ahead of time. You can refer to [the Kafka quickstart documentation](https://kafka.apache.org/documentation/#quickstart_createtopic) to learn how.
You can find more information about topics and partitions in general in the [official documentation](https://kafka.apache.org/documentation/#intro_topics). [This article](https://www.confluent.io/blog/how-to-choose-the-number-of-topicspartitions-in-a-kafka-cluster/) provide more details about how to choose the number of partitions.
### Storage plugin
Jaeger supports gRPC based storage plugins. For more information refer to [jaeger/plugin/storage/grpc](https://github.com/jaegertracing/jaeger/tree/master/plugin/storage/grpc)
Available plugins:
* [InfluxDB](https://github.com/influxdata/jaeger-influxdb/)
```sh
docker run \
-e SPAN_STORAGE_TYPE=grpc-plugin \
-e GRPC_STORAGE_PLUGIN_BINARY=<...> \
-e GRPC_STORAGE_PLUGIN_CONFIGURATION_FILE=<...> \
jaegertracing/all-in-one:{{< currentVersion >}}
```
## Ingester
**jaeger-ingester** is a service which reads span data from Kafka topic and writes it to another storage backend (Elasticsearch or Cassandra).
Port | Protocol | Function
----- | ------- | ---
14270 | HTTP | Healthcheck at `/` and metrics at `/metrics`
To view all exposed configuration options run the following command:
```sh
docker run \
-e SPAN_STORAGE_TYPE=cassandra \
jaegertracing/jaeger-ingester:{{< currentVersion >}}
--help
```
## Query Service & UI
**jaeger-query** serves the API endpoints and a React/Javascript UI.
The service is stateless and is typically run behind a load balancer, such as **nginx**.
At default settings the query service exposes the following port(s):
Port | Protocol | Function
----- | ------- | ---
16686 | HTTP | `/api/*` endpoints and Jaeger UI at `/`
16687 | HTTP | Healthcheck at `/` and metrics at `/metrics`
### Minimal deployment example (Elasticsearch backend):
```sh
docker run -d --rm \
-p 16686:16686 \
-p 16687:16687 \
-e SPAN_STORAGE_TYPE=elasticsearch \
-e ES_SERVER_URLS=http://<ES_SERVER_IP>:<ES_SERVER_PORT> \
jaegertracing/jaeger-query:{{< currentVersion >}}
```
### UI Base Path
The base path for all **jaeger-query** HTTP routes can be set to a non-root value, e.g. `/jaeger` would cause all UI URLs to start with `/jaeger`. This can be useful when running **jaeger-query** behind a reverse proxy.
The base path can be configured via the `--query.base-path` command line parameter or the `QUERY_BASE_PATH` environment variable.
### UI Customization and Embedding
Please refer to the [dedicated Frontend/UI page](../frontend-ui/).
## Aggregation Jobs for Service Dependencies
Production deployments need an external process which aggregates data and creates dependency links between services.
Project [spark-dependencies](https://github.com/jaegertracing/spark-dependencies) is a Spark job which derives
dependency links and stores them directly to the storage.
## Configuration
All binaries accepts command line properties and environmental variables which are managed by
by [viper](https://github.com/spf13/viper) and [cobra](https://github.com/spf13/cobra).
The names of environmental properties are capital letters and characters `-` and `.` are replaced with `_`.
To list all configuration properties call `jaeger-binary -h`.
[cqlsh]: http://cassandra.apache.org/doc/latest/tools/cqlsh.html
[zipkin-thrift]: https://github.com/jaegertracing/jaeger-idl/blob/master/thrift/zipkincore.thrift
[jaeger-thrift]: https://github.com/jaegertracing/jaeger-idl/blob/master/thrift/jaeger.thrift
[thriftrw]: https://www.npmjs.com/package/thriftrw

View File

@ -1,16 +0,0 @@
---
title: Frequently Asked Questions
description: Answers to some frequently asked questions about Jaeger.
weight: 11
---
## Why is the Dependencies page empty?
The Dependencies page shows a graph of services traced by Jaeger and connections between them. When you are using `all-in-one` binary with in-memory storage, the graph is calculated on-demand from all the traces stored in memory. However, if you are using a real distributed storage like Cassandra or Elasticsearch, it is too expensive to scan all the data in the database to build the service graph. Instead, the Jaeger project provides "big data" jobs that can be used to extract the service graph data from traces:
* https://github.com/jaegertracing/spark-dependencies - the older Spark job that can be run periodically
* https://github.com/jaegertracing/jaeger-analytics - the new (experimental) streaming Flink jobs that run continuously and build the service graph in smaller time intervals
## Why do I not see any spans in Jaeger?
Please refer to the [Troubleshooting](../troubleshooting/) guide.

View File

@ -1,57 +0,0 @@
---
title: Features
weight: 3
---
Jaeger is used for monitoring and troubleshooting microservices-based distributed systems, including:
* Distributed context propagation
* Distributed transaction monitoring
* Root cause analysis
* Service dependency analysis
* Performance / latency optimization
## High Scalability
Jaeger backend is designed to have no single points of failure and to scale with the business needs.
For example, any given Jaeger installation at Uber is typically processing several billion {{< tip "spans" "span" >}} per day.
## Native support for OpenTracing
Jaeger backend, Web UI, and instrumentation libraries have been designed from ground up to support the OpenTracing standard.
* Represent {{< tip "traces" "trace" >}} as {{< tip "directed acyclic graphs" "directed acyclic graph" >}} (not just trees) via [span references](https://github.com/opentracing/specification/blob/master/specification.md#references-between-spans)
* Support strongly typed span _tags_ and _structured logs_
* Support general distributed context propagation mechanism via _baggage_
## Multiple storage backends
Jaeger supports two popular open source NoSQL databases as trace storage backends: Cassandra 3.4+ and Elasticsearch 5.x/6.x.
There are ongoing community experiments using other databases, such as ScyllaDB, InfluxDB, Amazon DynamoDB. Jaeger also ships
with a simple in-memory storage for testing setups.
## Modern Web UI
Jaeger Web UI is implemented in Javascript using popular open source frameworks like React. Several performance
improvements have been released in v1.0 to allow the UI to efficiently deal with large volumes of data, and to display
{{< tip "traces" "trace" >}} with tens of thousands of {{< tip "spans" "span" >}} (e.g. we tried a trace with 80,000 spans).
## Cloud Native Deployment
Jaeger backend is distributed as a collection of Docker images. The binaries support various configuration methods,
including command line options, environment variables, and configuration files in multiple formats (yaml, toml, etc.).
Deployment to Kubernetes clusters is assisted by a [Kubernetes operator](https://github.com/jaegertracing/jaeger-operator), [Kubernetes templates](https://github.com/jaegertracing/jaeger-kubernetes)
and a [Helm chart](https://github.com/kubernetes/charts/tree/master/incubator/jaeger).
## Observability
All Jaeger backend components expose [Prometheus](https://prometheus.io/) metrics by default (other metrics backends are
also supported). Logs are written to standard out using the structured logging library [zap](https://github.com/uber-go/zap).
## Backwards compatibility with Zipkin
Although we recommend instrumenting applications with OpenTracing API and binding to Jaeger client libraries to benefit
from advanced features not available elsewhere, if your organization has already invested in the instrumentation
using Zipkin libraries, you do not have to rewrite all that code. Jaeger provides backwards compatibility with Zipkin
by accepting spans in Zipkin formats (Thrift or JSON v1/v2) over HTTP. Switching from Zipkin backend is just a matter
of routing the traffic from Zipkin libraries to the Jaeger backend.

View File

@ -1,196 +0,0 @@
---
title: Frontend/UI
hasparent: true
weight: 10
---
## Configuration
Several aspects of the UI can be configured:
* The Dependencies section can be enabled / configured
* Google Analytics tracking can be enabled / configured
* Additional menu options can be added to the global nav
These options can be configured by a JSON configuration file. The `--query.ui-config` command line parameter of the query service must then be set to the path to the JSON file when the query service is started.
An example configuration file:
```json
{
"dependencies": {
"dagMaxNumServices": 200,
"menuEnabled": true
},
"archiveEnabled": true,
"tracking": {
"gaID": "UA-000000-2",
"trackErrors": true
},
"menu": [
{
"label": "About Jaeger",
"items": [
{
"label": "GitHub",
"url": "https://github.com/jaegertracing/jaeger"
},
{
"label": "Docs",
"url": "http://jaeger.readthedocs.io/en/latest/"
}
]
}
]
}
```
`dependencies.dagMaxNumServices` defines the maximum number of services allowed before the DAG dependency view is disabled. Default: `200`.
`dependencies.menuEnabled` enables (`true`) or disables (`false`) the dependencies menu button. Default: `true`.
`archiveEnabled` enables (`true`) or disables (`false`) the archive traces button. Default: `false`. It requires a configuration of an archive storage in Query service. Archived traces are only accessible directly by ID, they are not searchable.
`tracking.gaID` defines the Google Analytics tracking ID. This is required for Google Analytics tracking, and setting it to a non-`null` value enables Google Analytics tracking. Default: `null`.
`tracking.trackErrors` enables (`true`) or disables (`false`) error tracking via Google Analytics. Errors can only be tracked if a valid Google Analytics ID is provided. For additional details on error tracking via Google Analytics see the [tracking README](https://github.com/jaegertracing/jaeger-ui/blob/c622330546afc1be59a42f874bcc1c2fadf7e69a/src/utils/tracking/README.md) in the UI repo. Default: `true`.
`menu` allows additional links to be added to the global nav. The additional links are right-aligned.
In the sample JSON config above, the configured menu will have a dropdown labeled "About Jaeger" with sub-options for "GitHub" and "Docs". The format for a link in the top right menu is as follows:
```json
{
"label": "Some text here",
"url": "https://example.com"
}
```
Links can either be members of the `menu` Array, directly, or they can be grouped into a dropdown menu option. The format for a group of links is:
```json
{
"label": "Dropdown button",
"items": [ ]
}
```
The `items` Array should contain one or more link configurations.
## Embedded Mode
Starting with version 1.9, Jaeger UI provides an "embedded" layout mode which is intended to support integrating Jaeger UI into other applications. Currently (as of `v0`), the approach taken is to remove various UI elements from the page to make the UI better suited for space-constrained layouts.
The embedded mode is induced and configured via URL query parameters.
To enter embedded mode, the `uiEmbed=v0` query parameter and value must be added to the URL. For example, the following URL will show the trace with ID `abc123` in embedded mode:
```
http://localhost:16686/trace/abc123?uiEmbed=v0
```
`uiEmbed=v0` is required.
Further, each page supported has an <img src="/img/frontend-ui/embed-open-icon.png" style="width: 20px; height:20px;display:inline;" alt="Embed open window"> button added that will open the non-embedded page in a new tab.
The following pages support embedded mode:
* Search Page
* Trace Page
### Search Page
To integrate the Search Trace Page to our application we have to indicate to the Jaeger UI that we want to use the embed mode with `uiEmbed=v0`.
For example:
```
http://localhost:16686/search?
service=my-service&
start=1543917759557000&
end=1543921359557000&
limit=20&
lookback=1h&
maxDuration&
minDuration&
uiEmbed=v0
```
![Embed Search Traces](/img/frontend-ui/embed-search-traces.png)
#### Configuration options
The following query parameter can be used to configure the layout of the search page :
* `uiSearchHideGraph=1` - disables the display of the scatter plot above the search results
```
http://localhost:16686/search?
service=my-service&
start=1543917759557000&
end=1543921359557000&
limit=20&
lookback=1h&
maxDuration&
minDuration&
uiEmbed=v0&
uiSearchHideGraph=1
```
![Embed Search Traces without Graph](/img/frontend-ui/embed-search-traces-hide-graph.png)
### Trace Page
To integrate the Trace Page to our application we have to indicate to the Jaeger UI that we want to use the embed mode with `uiEmbed=v0`.
For example:
```sh
http://localhost:16686/trace/{trace-id}?uiEmbed=v0
```
![Embed Trace view](/img/frontend-ui/embed-trace-view.png)
If we have navigated to this view from the search traces page we'll have a button to go back to the results page.
![Embed Trace view](/img/frontend-ui/embed-trace-view-with-back-button.png)
#### Configuration options
The following query parameters can be used to configure the layout of the trace page :
* `uiTimelineCollapseTitle=1` causes the trace header to start out collapsed, which hides the summary and the minimap.
```
http://localhost:16686/trace/{trace-id}?
uiEmbed=v0&
uiTimelineCollapseTitle=1
```
![Embed Trace view](/img/frontend-ui/embed-trace-view-with-collapse.png)
* `uiTimelineHideMinimap=1` removes the minimap, entirely, regardless of whether the trace header is expanded or not.
```
http://localhost:16686/trace/{trace-id}?
uiEmbed=v0&
uiTimelineHideMinimap=1
```
![Embed Trace view](/img/frontend-ui/embed-trace-view-with-hide-minimap.png)
* `uiTimelineHideSummary=1` - removes the trace summary information (number of services, etc.) entirely, regardless of whether the trace header is expanded or not.
```
http://localhost:16686/trace/{trace-id}?
uiEmbed=v0&
uiTimelineHideSummary=1
```
![Embed Trace view](/img/frontend-ui/embed-trace-view-with-hide-summary.png)
We can also combine the options:
```
http://localhost:16686/trace/{trace-id}?
uiEmbed=v0&
uiTimelineHideMinimap=1&
uiTimelineHideSummary=1
```
![Embed Trace view](/img/frontend-ui/embed-trace-view-with-hide-details-and-hide-minimap.png)

View File

@ -1,129 +0,0 @@
---
title: Getting started
description: Get up and running with Jaeger in your local environment
weight: 2
---
## Instrumentation
Your applications must be instrumented before they can send tracing data to Jaeger backend. Check the [Client Libraries](../client-libraries) section for information about how to use the OpenTracing API and how to initialize and configure Jaeger tracers.
## All in One
All-in-one is an executable designed for quick local testing, launches the Jaeger UI, collector, query, and agent, with an in memory storage component.
The simplest way to start the all-in-one is to use the pre-built image published to DockerHub (a single command line).
```bash
$ docker run -d --name jaeger \
-e COLLECTOR_ZIPKIN_HTTP_PORT=9411 \
-p 5775:5775/udp \
-p 6831:6831/udp \
-p 6832:6832/udp \
-p 5778:5778 \
-p 16686:16686 \
-p 14268:14268 \
-p 9411:9411 \
jaegertracing/all-in-one:{{< currentVersion >}}
```
Or run the `jaeger-all-in-one(.exe)` executable from the [binary distribution archives][download]:
```bash
$ jaeger-all-in-one --collector.zipkin.http-port=9411
```
You can then navigate to `http://localhost:16686` to access the Jaeger UI.
The container exposes the following ports:
Port | Protocol | Component | Function
----- | ------- | --------- | ---
5775 | UDP | agent | accept `zipkin.thrift` over compact thrift protocol (deprecated, used by legacy clients only)
6831 | UDP | agent | accept `jaeger.thrift` over compact thrift protocol
6832 | UDP | agent | accept `jaeger.thrift` over binary thrift protocol
5778 | HTTP | agent | serve configs
16686 | HTTP | query | serve frontend
14268 | HTTP | collector | accept `jaeger.thrift` directly from clients
14250 | HTTP | collector | accept `model.proto`
9411 | HTTP | collector | Zipkin compatible endpoint (optional)
## Kubernetes and OpenShift
* Kubernetes templates: https://github.com/jaegertracing/jaeger-kubernetes
* Kubernetes Operator: https://github.com/jaegertracing/jaeger-operator
* OpenShift templates: https://github.com/jaegertracing/jaeger-openshift
## Sample App: HotROD
HotROD (Rides on Demand) is a demo application that consists of several microservices and
illustrates the use of the [OpenTracing API](http://opentracing.io).
A tutorial / walkthrough is available in the blog post:
[Take OpenTracing for a HotROD ride][hotrod-tutorial].
It can be run standalone, but requires Jaeger backend to view the traces.
### Features
- Discover architecture of the whole system via data-driven dependency
diagram.
- View request timeline and errors; understand how the app works.
- Find sources of latency and lack of concurrency.
- Highly contextualized logging.
- Use baggage propagation to:
- Diagnose inter-request contention (queueing).
- Attribute time spent in a service.
- Use open source libraries with OpenTracing integration to get
vendor-neutral instrumentation for free.
### Prerequisites
- You need Go 1.11 or higher installed on your machine to run from source.
- Requires a [running Jaeger backend](#all-in-one) to view the traces.
### Running
#### From Source
```bash
mkdir -p $GOPATH/src/github.com/jaegertracing
cd $GOPATH/src/github.com/jaegertracing
git clone git@github.com:jaegertracing/jaeger.git jaeger
cd jaeger
make install
go run ./examples/hotrod/main.go all
```
#### From docker
```bash
$ docker run --rm -it \
--link jaeger \
-p8080-8083:8080-8083 \
-e JAEGER_AGENT_HOST="jaeger" \
jaegertracing/example-hotrod:{{< currentVersion >}} \
all
```
#### From binary distribution
Run `example-hotrod(.exe)` executable from the [binary distribution archives][download]:
```bash
$ example-hotrod all
```
Then navigate to `http://localhost:8080`.
## Migrating from Zipkin
Collector service exposes Zipkin compatible REST API `/api/v1/spans` which accepts both Thrift and JSON. Also there is `/api/v2/spans` for JSON only.
By default it's disabled. It can be enabled with `--collector.zipkin.http-port=9411`.
Zipkin Thrift IDL file can be found in [jaegertracing/jaeger-idl](https://github.com/jaegertracing/jaeger-idl/blob/master/thrift/zipkincore.thrift).
It's compatible with [openzipkin/zipkin-api](https://github.com/openzipkin/zipkin-api/blob/master/thrift/zipkinCore.thrift)
[hotrod-tutorial]: https://medium.com/@YuriShkuro/take-opentracing-for-a-hotrod-ride-f6e3141f7941
[download]: ../../../download/

View File

@ -1,71 +0,0 @@
---
title: Introduction
weight: 1
children:
- title: Features
url: features
---
Welcome to Jaeger's documentation portal! Below, you'll find information for beginners and experienced Jaeger users.
If you can't find what you are looking for, or have an issue not covered here, we'd love to [hear from you](/get-in-touch).
## About
Jaeger, inspired by [Dapper][dapper] and [OpenZipkin](http://zipkin.io),
is a distributed tracing system released as open source by [Uber Technologies][ubeross].
It is used for monitoring and troubleshooting microservices-based distributed systems, including:
* Distributed context propagation
* Distributed transaction monitoring
* Root cause analysis
* Service dependency analysis
* Performance / latency optimization
Uber published a blog post, [Evolving Distributed Tracing at Uber](https://eng.uber.com/distributed-tracing/), where they explain the history and reasons for the architectural choices made in Jaeger. [Yuri Shkuro](https://shkuro.com), creator of Jaeger, also published a book [Mastering Distributed Tracing](https://shkuro.com/books/2019-mastering-distributed-tracing/) that covers in-depth many aspects of Jaeger design and operation, as well as distributed tracing in general.
## Features
* [OpenTracing](http://opentracing.io/) compatible data model and instrumentation libraries
* in [Go](https://github.com/jaegertracing/jaeger-client-go), [Java](https://github.com/jaegertracing/jaeger-client-java), [Node](https://github.com/jaegertracing/jaeger-client-node), [Python](https://github.com/jaegertracing/jaeger-client-python)
and [C++](https://github.com/jaegertracing/cpp-client)
* Uses consistent upfront sampling with individual per service/endpoint probabilities
* Multiple storage backends: Cassandra, Elasticsearch, memory.
* Adaptive sampling (coming soon)
* Post-collection data processing pipeline (coming soon)
See [Features](./features/) page for more details.
## Technical Specs
* Backend components implemented in Go
* React/Javascript UI
* Supported storage backends:
* [Cassandra 3.4+](./deployment/#cassandra)
* [Elasticsearch 5.x, 6.x](./deployment/#elasticsearch)
* [Kafka](./deployment/#kafka)
* memory storage
## Quick Start
See [running a docker all in one image](getting-started#all-in-one).
## Screenshots
### Traces View
[![Traces View](/img/traces-ss.png)](/img/traces-ss.png)
### Trace Detail View
[![Detail View](/img/trace-detail-ss.png)](/img/trace-detail-ss.png)
## Related links
- [Evolving Distributed tracing At Uber Engineering](https://eng.uber.com/distributed-tracing/)
- [Mastering Distributed Tracing](https://shkuro.com/books/2019-mastering-distributed-tracing/)
- [Tracing HTTP request latency in Go with OpenTracing](https://medium.com/opentracing/tracing-http-request-latency-in-go-with-opentracing-7cc1282a100a)
- [Distributed Tracing with Jaeger & Prometheus on Kubernetes](https://blog.openshift.com/openshift-commons-briefing-82-distributed-tracing-with-jaeger-prometheus-on-kubernetes/)
- [Using Jaeger with Istio](https://istio.io/docs/tasks/telemetry/distributed-tracing.html)
- [Using Jaeger with Envoy](https://www.envoyproxy.io/docs/envoy/latest/start/sandboxes/jaeger_tracing.html)
[dapper]: https://research.google.com/pubs/pub36356.html
[ubeross]: http://uber.github.io

View File

@ -1,87 +0,0 @@
---
title: APIs
hasparent: true
---
Jaeger components implement various APIs for saving or retrieving trace data.
The following labels are used to describe API compatibility guarantees.
* **stable** - the API guarantees backwards compatibility. If breaking changes are going to be made in the future, they will result in a new API version, e.g. `/api/v2` URL prefix or a different namespace in the IDL.
* **internal** - the APIs intended for internal communications between Jaeger components and not recommended for use by external components.
* **deprecated** - the APIs that are only maintained for legacy reasons and will be phased out in the future.
## Span reporting APIs
Agent and Collector are the two components of the Jaeger backend that can receive spans. At this time they support two sets of non-overlapping APIs.
### Thrift over UDP (stable)
The Agent can only receive spans over UDP in Thrift format. The primary API is a UDP packet that contains a Thrift-encoded `Batch` struct defined in [jaeger.thrift][jaeger.thrift] IDL file, located in the [jaeger-idl][jaeger-idl] repository. Most Jaeger Clients use Thrift's `compact` encoding, however some client libraries do not support it (notably, Node.js) and use Thrift's `binary` encoding (sent to a different UDP port). The Agent's API is defined by [agent.thrift][agent.thrift] IDL file.
For legacy reasons, the Agent also accepts spans in Zipkin format, however, only very old versions of Jaeger clients can send data in that format and it is officially deprecated.
### Protobuf via gRPC (stable)
In a typical Jaeger deployment, Agents receive spans from Clients and forward them to Collectors. Since Jaeger version 1.11 the official and recommended protocol between Agents and Collectors is gRPC with Protobuf.
The Protobuf IDL [collector.proto][collector.proto] is currently located in the main Jaeger repository, under [model/proto/api_v2][collector.proto]. In the future it will be moved to [jaeger-idl][jaeger-idl] repository ([jaeger-idl/issues/55](https://github.com/jaegertracing/jaeger-idl/issues/55)).
### Thrift over HTTP (stable)
In some cases it is not feasible to deploy Jaeger Agent next to the application, for example, when the application code is running as AWS Lambda function. In these scenarios the Jaeger Clients can be configured to submit spans directly to the Collectors over HTTP/HTTPS.
The same [jaeger.thrift][jaeger.thrift] payload can be submitted in HTTP POST request to `/api/traces` endpoint, for example, `https://jaeger-collector:14268/api/traces`. The `Batch` struct needs to be encoded using Thrift's `binary` encoding, and the HTTP request should specify the content type header:
```
Content-Type: application/vnd.apache.thrift.binary
```
### JSON over HTTP (n/a)
There is no official Jaeger JSON format that can be accepted by the collector. In the future the Protobuf-generated JSON may be supported.
### Thrift via TChannel (deprecated)
Agent and Collector can communicate using TChannel protocol. This protocol is generally not supported by the routing infrastructure and has been deprecated. It will be eventually removed from Jaeger.
### Zipkin Formats (stable)
Jaeger Collector can also accept spans in several Zipkin data format, namely JSON v1/v2 and Thrift. The Collector needs to be configured to enable Zipkin HTTP server, e.g. on port 9411 used by Zipkin collectors. The server enables two endpoints that expect POST requests:
* `/api/v1/spans` for submitting spans in Zipkin JSON v1 or Zipkin Thrift format.
* `/api/v2/spans` for submitting spans in Zipkin JSON v2.
## Trace retrieval APIs
Traces saved in the storage can be retrieved by calling Jaeger Query Service.
### gRPC/Protobuf (stable)
The recommended way for programmatically retrieving traces and other data is via gRPC endpoint defined in [query.proto][query.proto] IDL file (located in the main Jaeger repository, similar to [collector.proto][collector.proto]).
### HTTP JSON (internal)
Jaeger UI communicates with Jaeger Query Service via JSON API. For example, a trace can be retrieved via GET request to `https://jaeger-query:16686/api/traces/{trace-id-hex-string}`. This JSON API is intentionally undocumented and subject to change.
## Clients configuration (internal)
Client libraries not only submit finished spans to Jaeger backend, but also periodically poll the Agents for various configurations, such as sampling strategies. The schema for the payload is defined by [sampling.thrift][sampling.thrift], encoded as JSON using Thrift's built-in JSON generation capabilities.
## Service dependencies graph (internal)
Can be retrieved from Query Service at `/api/dependencies` endpoint. The GET request expects two parameters:
* `endTs` (number of milliseconds since epoch) - the end of the time interval
* `lookback` (in milliseconds) - the length the time interval (i.e. start-time + lookback = end-time).
The returned JSON is a list of edges represented as tuples `(caller, callee, count)`.
For programmatic access to service graph, the recommended API is gRPC/Protobuf described above.
[jaeger-idl]: https://github.com/jaegertracing/jaeger-idl/
[jaeger.thrift]: https://github.com/jaegertracing/jaeger-idl/blob/master/thrift/jaeger.thrift
[agent.thrift]: https://github.com/jaegertracing/jaeger-idl/blob/master/thrift/agent.thrift
[sampling.thrift]: https://github.com/jaegertracing/jaeger-idl/blob/master/thrift/sampling.thrift
[collector.proto]: https://github.com/jaegertracing/jaeger/blob/master/model/proto/api_v2/collector.proto
[query.proto]: https://github.com/jaegertracing/jaeger/blob/master/model/proto/api_v2/query.proto

View File

@ -1,13 +0,0 @@
---
title: CLI flags
widescreen: true
hasparent: true
---
This is auto-generated documentation for CLI flags supported by Jaeger binaries.
* CLI flags for some binaries change depending on the `SPAN_STORAGE_TYPE` environment variable. Relevant variations are included below.
* Some binaries support _commands_ (mostly informational), such as `env`, `docs`, and `version`. These commands are not included here.
* All parameters can be also provided via environment variables, by changing all letters to upper-case and replacing all punctuation characters with underscore `_`. For example, the value for the flag `--cassandra.connections-per-host` can be provided via `CASSANDRA_CONNECTIONS_PER_HOST` environment variable.
{{< cli/tools-list >}}

View File

@ -1,397 +0,0 @@
---
title: Deployment
weight: 4
children:
- title: Operator for Kubernetes
navtitle: Kubernetes
url: operator
- title: Frontend/UI
url: frontend-ui
- title: CLI Flags
url: cli
---
The main Jaeger backend components are released as Docker images on Docker Hub:
Component | Repository
--------------------- | ---
**jaeger-agent** | [hub.docker.com/r/jaegertracing/jaeger-agent/](https://hub.docker.com/r/jaegertracing/jaeger-agent/)
**jaeger-collector** | [hub.docker.com/r/jaegertracing/jaeger-collector/](https://hub.docker.com/r/jaegertracing/jaeger-collector/)
**jaeger-query** | [hub.docker.com/r/jaegertracing/jaeger-query/](https://hub.docker.com/r/jaegertracing/jaeger-query/)
**jaeger-ingester** | [hub.docker.com/r/jaegertracing/jaeger-ingester/](https://hub.docker.com/r/jaegertracing/jaeger-ingester/)
There are orchestration templates for running Jaeger with:
* Kubernetes: [github.com/jaegertracing/jaeger-kubernetes](https://github.com/jaegertracing/jaeger-kubernetes),
* OpenShift: [github.com/jaegertracing/jaeger-openshift](https://github.com/jaegertracing/jaeger-openshift).
## Configuration Options
Jaeger binaries can be configured in a number of ways (in the order of decreasing priority):
* command line arguments,
* environment variables,
* configuration files in JSON, TOML, YAML, HCL, or Java properties formats.
To see the complete list of options, run the binary with `help` command. Options that are specific to a certain storage backend are only listed if the storage type is selected. For example, to see all available options in the Collector with Cassandra storage:
```sh
$ docker run --rm \
-e SPAN_STORAGE_TYPE=cassandra \
jaegertracing/jaeger-collector:{{< currentVersion >}} \
help
```
In order to provide configuration parameters via environment variables, find the respective command line option and convert its name to UPPER_SNAKE_CASE, for example:
Command line option | Environment variable
-----------------------------------|-------------------------------
`--cassandra.connections-per-host` | `CASSANDRA_CONNECTIONS_PER_HOST`
`--metrics-backend` | `METRICS_BACKEND`
## Agent
Jaeger client libraries expect **jaeger-agent** process to run locally on each host.
The agent exposes the following ports:
Port | Protocol | Function
----- | ------- | ---
6831 | UDP | accept [jaeger.thrift][jaeger-thrift] in `compact` Thrift protocol used by most current Jaeger clients
6832 | UDP | accept [jaeger.thrift][jaeger-thrift] in `binary` Thrift protocol used by Node.js Jaeger client (because [thriftrw][thriftrw] npm package does not support `compact` protocol)
5778 | HTTP | serve configs, sampling strategies
5775 | UDP | accept [zipkin.thrift][zipkin-thrift] in `compact` Thrift protocol (deprecated; only used by very old Jaeger clients, circa 2016)
14271 | HTTP | Healthcheck at `/` and metrics at `/metrics`
It can be executed directly on the host or via Docker, as follows:
```sh
## make sure to expose only the ports you use in your deployment scenario!
docker run \
--rm \
-p6831:6831/udp \
-p6832:6832/udp \
-p5778:5778/tcp \
-p5775:5775/udp \
jaegertracing/jaeger-agent:{{< currentVersion >}}
```
### Discovery System Integration
The agents can connect point to point to a single collector address, which could be
load balanced by another infrastructure component (e.g. DNS) across multiple collectors.
The agent can also be configured with a static list of collector addresses.
On Docker, a command like the following can be used:
```sh
docker run \
--rm \
-p5775:5775/udp \
-p6831:6831/udp \
-p6832:6832/udp \
-p5778:5778/tcp \
jaegertracing/jaeger-agent:{{< currentVersion >}} \
--reporter.grpc.host-port=jaeger-collector.jaeger-infra.svc:14250
```
Or use `--reporter.tchannel.host-port=jaeger-collector.jaeger-infra.svc:14267` to use
legacy tchannel reporter.
When using gRPC, you have several options for load balancing and name resolution:
* Single connection and no load balancing. This is the default if you specify a single `host:port`. (example: `--reporter.grpc.host-port=jaeger-collector.jaeger-infra.svc:14250`)
* Static list of hostnames and round-robin load balancing. This is what you get with a comma-separated list of addresses. (example: `reporter.grpc.host-port=jaeger-collector1:14250,jaeger-collector2:14250,jaeger-collector3:14250`)
* Dynamic DNS resolution and round-robin load balancing. To get this behaviour, prefix the address with `dns:///` and gRPC will attempt to resolve the hostname using SRV records (for [external load balancing](https://github.com/grpc/grpc/blob/master/doc/load-balancing.md)), TXT records (for [service configs](https://github.com/grpc/grpc/blob/master/doc/service_config.md)), and A records. Refer to the [gRPC Name Resolution docs](https://github.com/grpc/grpc/blob/master/doc/naming.md) and the [dns_resolver.go implementation](https://github.com/grpc/grpc-go/blob/master/resolver/dns/dns_resolver.go) for more info. (example: `--reporter.grpc.host-port=dns:///jaeger-collector.jaeger-infra.svc:14250`)
### Agent level tags
Jaeger supports agent level tags, that can be added to the process tags of all spans passing through the agent. This is supported through the command line flag `--jaeger.tags=key1=value1,key2=value2,...,keyn=valuen`. Tags can also be set through an environment flag like so - `--jaeger.tags=key=${envFlag:defaultValue}` - The tag value will be set to the value of the `envFlag` environment key and `defaultValue` if not set.
## Collectors
The collectors are stateless and thus many instances of **jaeger-collector** can be run in parallel.
Collectors require almost no configuration, except for the location of Cassandra cluster,
via `--cassandra.keyspace` and `--cassandra.servers` options, or the location of Elasticsearch cluster, via
`--es.server-urls`, depending on which storage is specified. To see all command line options run
```sh
go run ./cmd/collector/main.go -h
```
or, if you don't have the source code
```sh
docker run -it --rm jaegertracing/jaeger-collector:{{< currentVersion >}} -h
```
At default settings the collector exposes the following ports:
Port | Protocol | Function
----- | ------- | ---
14267 | TChannel | used by **jaeger-agent** to send spans in jaeger.thrift format
14250 | gRPC | used by **jaeger-agent** to send spans in model.proto format
14268 | HTTP | can accept spans directly from clients in jaeger.thrift format over binary thrift protocol
9411 | HTTP | can accept Zipkin spans in JSON or Thrift (disabled by default)
14269 | HTTP | Healthcheck at `/` and metrics at `/metrics`
## Storage Backends
Collectors require a persistent storage backend. Cassandra and Elasticsearch are the primary supported storage backends. Additional backends are [discussed here](https://github.com/jaegertracing/jaeger/issues/638).
The storage type can be passed via `SPAN_STORAGE_TYPE` environment variable. Valid values are `cassandra`, `elasticsearch`, `kafka` (only as a buffer), `grpc-plugin`, `badger` (only with all-in-one) and `memory` (only with all-in-one).
As of version 1.6.0, it's possible to use multiple storage types at the same time by providing a comma-separated list of valid types to the `SPAN_STORAGE_TYPE` environment variable.
It's important to note that all listed storage types are used for writing, but only the first type in the list will be used for reading and archiving.
### Memory
The in-memory storage is not intended for production workloads. It's intended as a simple solution to get started quickly and
data will be lost once the process is gone.
By default, there's no limit in the amount of traces stored in memory but a limit can be established by passing an
integer value via `--memory.max-traces`.
### Badger - local storage
Experimental since Jaeger 1.9
[Badger](https://github.com/dgraph-io/badger) is an embedded local storage, only available
with **all-in-one** distribution. By default it acts as an ephemeral storage using a temporary filesystem.
This can be overridden by using the `--badger.ephemeral=false` option.
```sh
docker run \
-e SPAN_STORAGE_TYPE=badger \
-e BADGER_EPHEMERAL=false \
-e BADGER_DIRECTORY_VALUE=/badger/data \
-e BADGER_DIRECTORY_KEY=/badger/key \
-v <storage_dir_on_host>:/badger \
-p 16686:16686 \
jaegertracing/all-in-one:{{< currentVersion >}}
```
### Cassandra
Supported versions: 3.4+
Deploying Cassandra itself is out of scope for our documentation. One good
source of documentation is the [Apache Cassandra Docs](https://cassandra.apache.org/doc/latest/).
#### Configuration
##### Minimal
```sh
docker run \
-e SPAN_STORAGE_TYPE=cassandra \
-e CASSANDRA_SERVERS=<...> \
jaegertracing/jaeger-collector:{{< currentVersion >}}
```
##### All options
To view the full list of configuration options, you can run the following command:
```sh
docker run \
-e SPAN_STORAGE_TYPE=cassandra \
jaegertracing/jaeger-collector:{{< currentVersion >}} \
--help
```
#### Schema script
A script is provided to initialize Cassandra keyspace and schema
using Cassandra's interactive shell [`cqlsh`][cqlsh]:
```sh
MODE=test sh ./plugin/storage/cassandra/schema/create.sh | cqlsh
```
For production deployment, pass `MODE=prod DATACENTER={datacenter}` arguments to the script,
where `{datacenter}` is the name used in the Cassandra configuration / network topology.
The script also allows overriding TTL, keyspace name, replication factor, etc.
Run the script without arguments to see the full list of recognized parameters.
#### TLS support
Jaeger supports TLS client to node connections as long as you've configured
your Cassandra cluster correctly. After verifying with e.g. `cqlsh`, you can
configure the collector and query like so:
```sh
docker run \
-e CASSANDRA_SERVERS=<...> \
-e CASSANDRA_TLS=true \
-e CASSANDRA_TLS_SERVER_NAME="CN-in-certificate" \
-e CASSANDRA_TLS_KEY=<path to client key file> \
-e CASSANDRA_TLS_CERT=<path to client cert file> \
-e CASSANDRA_TLS_CA=<path to your CA cert file> \
jaegertracing/jaeger-collector:{{< currentVersion >}}
```
The schema tool also supports TLS. You need to make a custom cqlshrc file like
so:
```
# Creating schema in a cassandra cluster requiring client TLS certificates.
#
# Create a volume for the schema docker container containing four files:
# cqlshrc: this file
# ca-cert: the cert authority for your keys
# client-key: the keyfile for your client
# client-cert: the cert file matching client-key
#
# if there is any sort of DNS mismatch and you want to ignore server validation
# issues, then uncomment validate = false below.
#
# When running the container, map this volume to /root/.cassandra and set the
# environment variable CQLSH_SSL=--ssl
[ssl]
certfile = ~/.cassandra/ca-cert
userkey = ~/.cassandra/client-key
usercert = ~/.cassandra/client-cert
# validate = false
```
### Elasticsearch
Supported in Jaeger since 0.6.0
Supported versions: 5.x, 6.x
Elasticsearch does not require initialization other than
[installing and running Elasticsearch](https://www.elastic.co/downloads/elasticsearch).
Once it is running, pass the correct configuration values to the Jaeger collector and query service.
#### Configuration
##### Minimal
```sh
docker run \
-e SPAN_STORAGE_TYPE=elasticsearch \
-e ES_SERVER_URLS=<...> \
jaegertracing/jaeger-collector:{{< currentVersion >}}
```
##### All options
To view the full list of configuration options, you can run the following command:
```sh
docker run \
-e SPAN_STORAGE_TYPE=elasticsearch \
jaegertracing/jaeger-collector:{{< currentVersion >}} \
--help
```
See the [README](https://github.com/jaegertracing/jaeger/tree/master/plugin/storage/es/README.md) for an in-depth overview of how Jaeger uses Elasticsearch for storage.
#### Shards and Replicas for Elasticsearch indices
Shards and replicas are some configuration values to take special attention to, because this is decided upon
index creation. [This article](https://qbox.io/blog/optimizing-elasticsearch-how-many-shards-per-index) goes into
more information about choosing how many shards should be chosen for optimization.
### Kafka
Supported in Jaeger since 1.6.0
Supported Kafka versions: 0.9+
Kafka can be used as an intermediary buffer between collector and an actual storage.
The collector is configured with `SPAN_STORAGE_TYPE=kafka` that makes it write all received spans
into a Kafka topic. A new component [Ingester](#ingester), added in version 1.7.0, is used to read from
Kafka and store spans in another storage backend (Elasticsearch or Cassandra).
Writing to Kafka is particularly useful for building post-processing data pipelines.
#### Configuration
##### Minimal
```sh
docker run \
-e SPAN_STORAGE_TYPE=kafka \
-e KAFKA_BROKERS=<...> \
-e KAFKA_TOPIC=<...> \
jaegertracing/jaeger-collector:{{< currentVersion >}}
```
##### All options
To view the full list of configuration options, you can run the following command:
```sh
docker run \
-e SPAN_STORAGE_TYPE=kafka \
jaegertracing/jaeger-collector:{{< currentVersion >}} \
--help
```
#### Topic & partitions
Unless your Kafka cluster is configured to automatically create topics, you will need to create it ahead of time. You can refer to [the Kafka quickstart documentation](https://kafka.apache.org/documentation/#quickstart_createtopic) to learn how.
You can find more information about topics and partitions in general in the [official documentation](https://kafka.apache.org/documentation/#intro_topics). [This article](https://www.confluent.io/blog/how-to-choose-the-number-of-topicspartitions-in-a-kafka-cluster/) provide more details about how to choose the number of partitions.
### Storage plugin
Jaeger supports gRPC based storage plugins. For more information refer to [jaeger/plugin/storage/grpc](https://github.com/jaegertracing/jaeger/tree/master/plugin/storage/grpc)
Available plugins:
* [InfluxDB](https://github.com/influxdata/jaeger-influxdb/)
```sh
docker run \
-e SPAN_STORAGE_TYPE=grpc-plugin \
-e GRPC_STORAGE_PLUGIN_BINARY=<...> \
-e GRPC_STORAGE_PLUGIN_CONFIGURATION_FILE=<...> \
jaegertracing/all-in-one:{{< currentVersion >}}
```
## Ingester
**jaeger-ingester** is a service which reads span data from Kafka topic and writes it to another storage backend (Elasticsearch or Cassandra).
Port | Protocol | Function
----- | ------- | ---
14270 | HTTP | Healthcheck at `/` and metrics at `/metrics`
To view all exposed configuration options run the following command:
```sh
docker run \
-e SPAN_STORAGE_TYPE=cassandra \
jaegertracing/jaeger-ingester:{{< currentVersion >}}
--help
```
## Query Service & UI
**jaeger-query** serves the API endpoints and a React/Javascript UI.
The service is stateless and is typically run behind a load balancer, such as [**NGINX**](https://www.nginx.com/).
At default settings the query service exposes the following port(s):
Port | Protocol | Function
----- | ------- | ---
16686 | HTTP | `/api/*` endpoints and Jaeger UI at `/`
16687 | HTTP | Healthcheck at `/` and metrics at `/metrics`
### Minimal deployment example (Elasticsearch backend):
```sh
docker run -d --rm \
-p 16686:16686 \
-p 16687:16687 \
-e SPAN_STORAGE_TYPE=elasticsearch \
-e ES_SERVER_URLS=http://<ES_SERVER_IP>:<ES_SERVER_PORT> \
jaegertracing/jaeger-query:{{< currentVersion >}}
```
### UI Base Path
The base path for all **jaeger-query** HTTP routes can be set to a non-root value, e.g. `/jaeger` would cause all UI URLs to start with `/jaeger`. This can be useful when running **jaeger-query** behind a reverse proxy.
The base path can be configured via the `--query.base-path` command line parameter or the `QUERY_BASE_PATH` environment variable.
### UI Customization and Embedding
Please refer to the [dedicated Frontend/UI page](../frontend-ui/).
## Aggregation Jobs for Service Dependencies
Production deployments need an external process which aggregates data and creates dependency links between services. Project [spark-dependencies](https://github.com/jaegertracing/spark-dependencies) is a Spark job which derives dependency links and stores them directly to the storage.
## Configuration
All binaries accepts command line properties and environmental variables, power by [viper](https://github.com/spf13/viper) and [cobra](https://github.com/spf13/cobra) libraries. Please refer to the [CLI Flags](../cli/) page for more information.
[cqlsh]: http://cassandra.apache.org/doc/latest/tools/cqlsh.html
[zipkin-thrift]: https://github.com/jaegertracing/jaeger-idl/blob/master/thrift/zipkincore.thrift
[jaeger-thrift]: https://github.com/jaegertracing/jaeger-idl/blob/master/thrift/jaeger.thrift
[thriftrw]: https://www.npmjs.com/package/thriftrw

View File

@ -1,17 +0,0 @@
---
title: Frequently Asked Questions
navtitle: FAQs
description: Answers to some frequently asked questions about Jaeger.
weight: 11
---
## Why is the Dependencies page empty?
The Dependencies page shows a graph of services traced by Jaeger and connections between them. When you are using `all-in-one` binary with in-memory storage, the graph is calculated on-demand from all the traces stored in memory. However, if you are using a real distributed storage like Cassandra or Elasticsearch, it is too expensive to scan all the data in the database to build the service graph. Instead, the Jaeger project provides "big data" jobs that can be used to extract the service graph data from traces:
* https://github.com/jaegertracing/spark-dependencies - the older Spark job that can be run periodically
* https://github.com/jaegertracing/jaeger-analytics - the new (experimental) streaming Flink jobs that run continuously and builds the service graph in smaller time intervals
## Why do I not see any spans in Jaeger?
Please refer to the [Troubleshooting](../troubleshooting/) guide.

View File

@ -1,57 +0,0 @@
---
title: Features
hasparent: true
---
Jaeger is used for monitoring and troubleshooting microservices-based distributed systems, including:
* Distributed context propagation
* Distributed transaction monitoring
* Root cause analysis
* Service dependency analysis
* Performance / latency optimization
## High Scalability
Jaeger backend is designed to have no single points of failure and to scale with the business needs.
For example, any given Jaeger installation at Uber is typically processing several billion {{< tip "spans" "span" >}} per day.
## Native support for OpenTracing
Jaeger backend, Web UI, and instrumentation libraries have been designed from ground up to support the OpenTracing standard.
* Represent {{< tip "traces" "trace" >}} as {{< tip "directed acyclic graphs" "directed acyclic graph" >}} (not just trees) via [span references](https://github.com/opentracing/specification/blob/master/specification.md#references-between-spans)
* Support strongly typed span _tags_ and _structured logs_
* Support general distributed context propagation mechanism via _baggage_
## Multiple storage backends
Jaeger supports two popular open source NoSQL databases as trace storage backends: Cassandra 3.4+ and Elasticsearch 5.x/6.x.
There are ongoing community experiments using other databases, such as ScyllaDB, InfluxDB, Amazon DynamoDB. Jaeger also ships
with a simple in-memory storage for testing setups.
## Modern Web UI
Jaeger Web UI is implemented in Javascript using popular open source frameworks like React. Several performance
improvements have been released in v1.0 to allow the UI to efficiently deal with large volumes of data, and to display
{{< tip "traces" "trace" >}} with tens of thousands of {{< tip "spans" "span" >}} (e.g. we tried a trace with 80,000 spans).
## Cloud Native Deployment
Jaeger backend is distributed as a collection of Docker images. The binaries support various configuration methods,
including command line options, environment variables, and configuration files in multiple formats (yaml, toml, etc.).
Deployment to Kubernetes clusters is assisted by a [Kubernetes operator](https://github.com/jaegertracing/jaeger-operator), [Kubernetes templates](https://github.com/jaegertracing/jaeger-kubernetes)
and a [Helm chart](https://github.com/kubernetes/charts/tree/master/incubator/jaeger).
## Observability
All Jaeger backend components expose [Prometheus](https://prometheus.io/) metrics by default (other metrics backends are
also supported). Logs are written to standard out using the structured logging library [zap](https://github.com/uber-go/zap).
## Backwards compatibility with Zipkin
Although we recommend instrumenting applications with OpenTracing API and binding to Jaeger client libraries to benefit
from advanced features not available elsewhere, if your organization has already invested in the instrumentation
using Zipkin libraries, you do not have to rewrite all that code. Jaeger provides backwards compatibility with Zipkin
by accepting spans in Zipkin formats (Thrift or JSON v1/v2) over HTTP. Switching from Zipkin backend is just a matter
of routing the traffic from Zipkin libraries to the Jaeger backend.

View File

@ -1,224 +0,0 @@
---
title: Frontend/UI Configuration
navtitle: Frontend/UI
hasparent: true
weight: 7
---
## Configuration
Several aspects of the UI can be configured:
* The Dependencies section can be enabled / configured
* Google Analytics tracking can be enabled / configured
* Additional menu options can be added to the global nav
These options can be configured by a JSON configuration file. The `--query.ui-config` command line parameter of the query service must then be set to the path to the JSON file when the query service is started.
An example configuration file:
```json
{
"dependencies": {
"dagMaxNumServices": 200,
"menuEnabled": true
},
"archiveEnabled": true,
"tracking": {
"gaID": "UA-000000-2",
"trackErrors": true
},
"menu": [
{
"label": "About Jaeger",
"items": [
{
"label": "GitHub",
"url": "https://github.com/jaegertracing/jaeger"
},
{
"label": "Docs",
"url": "http://jaeger.readthedocs.io/en/latest/"
}
]
}
],
"linkPatterns": [{
"type": "process",
"key": "jaeger.version",
"url": "https://github.com/jaegertracing/jaeger-client-java/releases/tag/#{jaeger.version}",
"text": "Information about Jaeger release #{jaeger.version}"
}]
}
```
### Dependencies
`dependencies.dagMaxNumServices` defines the maximum number of services allowed before the DAG dependency view is disabled. Default: `200`.
`dependencies.menuEnabled` enables (`true`) or disables (`false`) the dependencies menu button. Default: `true`.
### Archive Support
`archiveEnabled` enables (`true`) or disables (`false`) the archive traces button. Default: `false`. It requires a configuration of an archive storage in Query service. Archived traces are only accessible directly by ID, they are not searchable.
### Google Analytics Tracking
`tracking.gaID` defines the Google Analytics tracking ID. This is required for Google Analytics tracking, and setting it to a non-`null` value enables Google Analytics tracking. Default: `null`.
`tracking.trackErrors` enables (`true`) or disables (`false`) error tracking via Google Analytics. Errors can only be tracked if a valid Google Analytics ID is provided. For additional details on error tracking via Google Analytics see the [tracking README](https://github.com/jaegertracing/jaeger-ui/blob/c622330546afc1be59a42f874bcc1c2fadf7e69a/src/utils/tracking/README.md) in the UI repo. Default: `true`.
### Custom Menu Items
`menu` allows additional links to be added to the global nav. The additional links are right-aligned.
In the sample JSON config above, the configured menu will have a dropdown labeled "About Jaeger" with sub-options for "GitHub" and "Docs". The format for a link in the top right menu is as follows:
```json
{
"label": "Some text here",
"url": "https://example.com"
}
```
Links can either be members of the `menu` Array, directly, or they can be grouped into a dropdown menu option. The format for a group of links is:
```json
{
"label": "Dropdown button",
"items": [ ]
}
```
The `items` Array should contain one or more link configurations.
### Link Patterns
The `linkPatterns` node can be used to create links from fields displayed in the Jaeger UI.
Field | Description
------|------------
type | The metadata section in which your link will be added: process, tags, logs
key | The name of tag/process/log attribute which value will be displayed as a link
url | The URL where the link should point to, it can be an external site or relative path in Jaeger UI
text | The text displayed in the tooltip for the link
Both `url` and `text` can be defined as templates (i.e. using `#{field-name}`) where Jaeger UI will dynamically substitute values based on tags/logs data.
## Embedded Mode
Starting with version 1.9, Jaeger UI provides an "embedded" layout mode which is intended to support integrating Jaeger UI into other applications. Currently (as of `v0`), the approach taken is to remove various UI elements from the page to make the UI better suited for space-constrained layouts.
The embedded mode is induced and configured via URL query parameters.
To enter embedded mode, the `uiEmbed=v0` query parameter and value must be added to the URL. For example, the following URL will show the trace with ID `abc123` in embedded mode:
```
http://localhost:16686/trace/abc123?uiEmbed=v0
```
`uiEmbed=v0` is required.
Further, each page supported has an <img src="/img/frontend-ui/embed-open-icon.png" style="width: 20px; height:20px;display:inline;" alt="Embed open window"> button added that will open the non-embedded page in a new tab.
The following pages support embedded mode:
* Search Page
* Trace Page
### Search Page
To integrate the Search Trace Page to our application we have to indicate to the Jaeger UI that we want to use the embed mode with `uiEmbed=v0`.
For example:
```
http://localhost:16686/search?
service=my-service&
start=1543917759557000&
end=1543921359557000&
limit=20&
lookback=1h&
maxDuration&
minDuration&
uiEmbed=v0
```
![Embed Search Traces](/img/frontend-ui/embed-search-traces.png)
#### Configuration options
The following query parameter can be used to configure the layout of the search page :
* `uiSearchHideGraph=1` - disables the display of the scatter plot above the search results
```
http://localhost:16686/search?
service=my-service&
start=1543917759557000&
end=1543921359557000&
limit=20&
lookback=1h&
maxDuration&
minDuration&
uiEmbed=v0&
uiSearchHideGraph=1
```
![Embed Search Traces without Graph](/img/frontend-ui/embed-search-traces-hide-graph.png)
### Trace Page
To integrate the Trace Page to our application we have to indicate to the Jaeger UI that we want to use the embed mode with `uiEmbed=v0`.
For example:
```sh
http://localhost:16686/trace/{trace-id}?uiEmbed=v0
```
![Embed Trace view](/img/frontend-ui/embed-trace-view.png)
If we have navigated to this view from the search traces page we'll have a button to go back to the results page.
![Embed Trace view](/img/frontend-ui/embed-trace-view-with-back-button.png)
#### Configuration options
The following query parameters can be used to configure the layout of the trace page :
* `uiTimelineCollapseTitle=1` causes the trace header to start out collapsed, which hides the summary and the minimap.
```
http://localhost:16686/trace/{trace-id}?
uiEmbed=v0&
uiTimelineCollapseTitle=1
```
![Embed Trace view](/img/frontend-ui/embed-trace-view-with-collapse.png)
* `uiTimelineHideMinimap=1` removes the minimap, entirely, regardless of whether the trace header is expanded or not.
```
http://localhost:16686/trace/{trace-id}?
uiEmbed=v0&
uiTimelineHideMinimap=1
```
![Embed Trace view](/img/frontend-ui/embed-trace-view-with-hide-minimap.png)
* `uiTimelineHideSummary=1` - removes the trace summary information (number of services, etc.) entirely, regardless of whether the trace header is expanded or not.
```
http://localhost:16686/trace/{trace-id}?
uiEmbed=v0&
uiTimelineHideSummary=1
```
![Embed Trace view](/img/frontend-ui/embed-trace-view-with-hide-summary.png)
We can also combine the options:
```
http://localhost:16686/trace/{trace-id}?
uiEmbed=v0&
uiTimelineHideMinimap=1&
uiTimelineHideSummary=1
```
![Embed Trace view](/img/frontend-ui/embed-trace-view-with-hide-details-and-hide-minimap.png)

View File

@ -1,129 +0,0 @@
---
title: Getting Started
description: Get up and running with Jaeger in your local environment
weight: 2
---
## Instrumentation
Your applications must be instrumented before they can send tracing data to Jaeger backend. Check the [Client Libraries](../client-libraries) section for information about how to use the OpenTracing API and how to initialize and configure Jaeger tracers.
## All in One
All-in-one is an executable designed for quick local testing, launches the Jaeger UI, collector, query, and agent, with an in memory storage component.
The simplest way to start the all-in-one is to use the pre-built image published to DockerHub (a single command line).
```bash
$ docker run -d --name jaeger \
-e COLLECTOR_ZIPKIN_HTTP_PORT=9411 \
-p 5775:5775/udp \
-p 6831:6831/udp \
-p 6832:6832/udp \
-p 5778:5778 \
-p 16686:16686 \
-p 14268:14268 \
-p 9411:9411 \
jaegertracing/all-in-one:{{< currentVersion >}}
```
Or run the `jaeger-all-in-one(.exe)` executable from the [binary distribution archives][download]:
```bash
$ jaeger-all-in-one --collector.zipkin.http-port=9411
```
You can then navigate to `http://localhost:16686` to access the Jaeger UI.
The container exposes the following ports:
Port | Protocol | Component | Function
----- | ------- | --------- | ---
5775 | UDP | agent | accept `zipkin.thrift` over compact thrift protocol (deprecated, used by legacy clients only)
6831 | UDP | agent | accept `jaeger.thrift` over compact thrift protocol
6832 | UDP | agent | accept `jaeger.thrift` over binary thrift protocol
5778 | HTTP | agent | serve configs
16686 | HTTP | query | serve frontend
14268 | HTTP | collector | accept `jaeger.thrift` directly from clients
14250 | HTTP | collector | accept `model.proto`
9411 | HTTP | collector | Zipkin compatible endpoint (optional)
## Kubernetes and OpenShift
* Kubernetes templates: https://github.com/jaegertracing/jaeger-kubernetes
* Kubernetes Operator: https://github.com/jaegertracing/jaeger-operator
* OpenShift templates: https://github.com/jaegertracing/jaeger-openshift
## Sample App: HotROD
HotROD (Rides on Demand) is a demo application that consists of several microservices and
illustrates the use of the [OpenTracing API](http://opentracing.io).
A tutorial / walkthrough is available in the blog post:
[Take OpenTracing for a HotROD ride][hotrod-tutorial].
It can be run standalone, but requires Jaeger backend to view the traces.
### Features
- Discover architecture of the whole system via data-driven dependency
diagram.
- View request timeline and errors; understand how the app works.
- Find sources of latency and lack of concurrency.
- Highly contextualized logging.
- Use baggage propagation to:
- Diagnose inter-request contention (queueing).
- Attribute time spent in a service.
- Use open source libraries with OpenTracing integration to get
vendor-neutral instrumentation for free.
### Prerequisites
- You need Go 1.11 or higher installed on your machine to run from source.
- Requires a [running Jaeger backend](#all-in-one) to view the traces.
### Running
#### From Source
```bash
mkdir -p $GOPATH/src/github.com/jaegertracing
cd $GOPATH/src/github.com/jaegertracing
git clone git@github.com:jaegertracing/jaeger.git jaeger
cd jaeger
make install
go run ./examples/hotrod/main.go all
```
#### From docker
```bash
$ docker run --rm -it \
--link jaeger \
-p8080-8083:8080-8083 \
-e JAEGER_AGENT_HOST="jaeger" \
jaegertracing/example-hotrod:{{< currentVersion >}} \
all
```
#### From binary distribution
Run `example-hotrod(.exe)` executable from the [binary distribution archives][download]:
```bash
$ example-hotrod all
```
Then navigate to `http://localhost:8080`.
## Migrating from Zipkin
Collector service exposes Zipkin compatible REST API `/api/v1/spans` which accepts both Thrift and JSON. Also there is `/api/v2/spans` for JSON only.
By default it's disabled. It can be enabled with `--collector.zipkin.http-port=9411`.
Zipkin Thrift IDL file can be found in [jaegertracing/jaeger-idl](https://github.com/jaegertracing/jaeger-idl/blob/master/thrift/zipkincore.thrift).
It's compatible with [openzipkin/zipkin-api](https://github.com/openzipkin/zipkin-api/blob/master/thrift/zipkinCore.thrift)
[hotrod-tutorial]: https://medium.com/@YuriShkuro/take-opentracing-for-a-hotrod-ride-f6e3141f7941
[download]: ../../../download/

View File

@ -1,755 +0,0 @@
---
title: Operator for Kubernetes
hasparent: true
---
# Understanding Operators
The Jaeger Operator is an implementation of a [Kubernetes Operator](https://coreos.com/operators/). Operators are pieces of software that ease the operational complexity of running another piece of software. More technically, _Operators_ are a method of packaging, deploying, and managing a Kubernetes application.
A Kubernetes application is an application that is both deployed on Kubernetes and managed using the Kubernetes APIs and `kubectl` (kubernetes) or `oc` (OKD) tooling. To be able to make the most of Kubernetes, you need a set of cohesive APIs to extend in order to service and manage your apps that run on Kubernetes. Think of Operators as the runtime that manages this type of app on Kubernetes.
# Installing the Operator
{{< info >}}
The Jaeger Operator version tracks one version of the Jaeger components (Query, Collector, Agent). When a new version of the Jaeger components is released, a new version of the operator will be released that understands how running instances of the previous version can be upgraded to the new version.
{{< /info >}}
## Installing the Operator on Kubernetes
The following instructions will create the `observability` namespace and install the Jaeger Operator.
{{< info >}}
Make sure your `kubectl` command is properly configured to talk to a valid Kubernetes cluster. If you don't have a cluster, you can create one locally using [`minikube`](https://kubernetes.io/docs/tasks/tools/install-minikube/).
{{< /info >}}
To install the operator, run:
<!--TODO - Does Kubernetes have privileged users? Needs to be run as a system:admin on OKD/OpenShift.-->
```bash
kubectl create namespace observability # <1>
kubectl create -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/crds/jaegertracing.io_jaegers_crd.yaml # <2>
kubectl create -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/service_account.yaml
kubectl create -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/role.yaml
kubectl create -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/role_binding.yaml
kubectl create -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/operator.yaml
```
<1> This creates the namespace used by default in the deployment files. If you want to install the Jaeger operator in a different namespace, you must edit the deployment files to change `observability` to the desired namespace value.
<2> This installs the "Custom Resource Definition" for the `apiVersion: jaegertracing.io/v1`
At this point, there should be a `jaeger-operator` deployment available. You can view it by running the following command:
```bash
$ kubectl get deployment jaeger-operator -n observability
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
jaeger-operator 1 1 1 1 48s
```
The operator is now ready to create Jaeger instances.
## Installing the Operator on OKD/OpenShift
<!-- TODO: Add instructions for installing via the operatorhub? -->
The instructions from the previous section also work for installing the operator on OKD or OpenShift. Make sure you are logged in as a privileged user, when you install the role based acces control (RBAC) rules, the custom resource definition, and the operator.
```bash
oc login -u <privileged user>
oc new-project observability # <1>
oc create -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/crds/jaegertracing.io_jaegers_crd.yaml # <2>
oc create -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/service_account.yaml
oc create -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/role.yaml
oc create -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/role_binding.yaml
oc create -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/operator.yaml
```
<1> This creates the namespace used by default in the deployment files. If you want to install the Jaeger operator in a different namespace, you must edit the deployment files to change `observability` to the desired namespace value.
<2> This installs the "Custom Resource Definition" for the `apiVersion: jaegertracing.io/v1`
Once the operator is installed, grant the role `jaeger-operator` to users who should be able to install individual Jaeger instances. The following example creates a role binding allowing the user `developer` to create Jaeger instances:
```bash
oc create \
rolebinding developer-jaeger-operator \
--role=jaeger-operator \
--user=developer
```
After the role is granted, switch back to a non-privileged user.
Jaeger Agent can be configured to be deployed as a `DaemonSet` using a `HostPort` to allow Jaeger clients in the same node to discover the agent. In OpenShift, a `HostPort` can only be set when a special security context is set. A separate service account can be used by the Jaeger Agent with the permission to bind to `HostPort`, as follows:
```bash
oc create -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/examples/openshift/hostport-scc-daemonset.yaml # <1>
oc new-project myappnamespace
oc create -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/examples/openshift/service_account_jaeger-agent-daemonset.yaml # <2>
oc adm policy add-scc-to-user daemonset-with-hostport -z jaeger-agent-daemonset # <3>
oc apply -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/examples/openshift/agent-as-daemonset.yaml # <4>
```
<1> The `SecurityContextConstraints` with the `allowHostPorts` policy
<2> The `ServiceAccount` to be used by the Jaeger Agent
<3> Adds the security policy to the service account
<4> Creates the Jaeger Instance using the `serviceAccount` created in the steps above
{{< warning >}}
Without such a policy, errors like the following will prevent a `DaemonSet` to be created: `Warning FailedCreate 4s (x14 over 45s) daemonset-controller Error creating: pods "agent-as-daemonset-agent-daemonset-" is forbidden: unable to validate against any security context constraint: [spec.containers[0].securityContext.containers[0].hostPort: Invalid value: 5775: Host ports are not allowed to be used`
{{< /warning >}}
After a few seconds, the `DaemonSet` should be up and running:
```bash
$ oc get daemonset agent-as-daemonset-agent-daemonset
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE
agent-as-daemonset-agent-daemonset 1 1 1 1 1
```
# Quick Start - Deploying the AllInOne image
The simplest possible way to create a Jaeger instance is by creating a YAML file like the following example. This will install the default AllInOne strategy, which deploys the "all-in-one" image (agent, collector, query, ingester, Jaeger UI) in a single pod, using in-memory storage by default.
{{< info >}}
This default strategy is intended for development, testing, and demo purposes, not for production.
{{< /info >}}
```yaml
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: simplest
```
The YAML file can then be used with `kubectl`:
<!-- TODO - Add OKD commands and tabs shortcode. -->
```bash
kubectl apply -f simplest.yaml
```
In a few seconds, a new in-memory all-in-one instance of Jaeger will be available, suitable for quick demos and development purposes. To check the instances that were created, list the `jaeger` objects:
```bash
$ kubectl get jaegers
NAME CREATED AT
simplest 28s
```
To get the pod name, query for the pods belonging to the `simplest` Jaeger instance:
```bash
$ kubectl get pods -l app.kubernetes.io/instance=simplest
NAME READY STATUS RESTARTS AGE
simplest-6499bb6cdd-kqx75 1/1 Running 0 2m
```
Similarly, the logs can be queried either from the pod directly using the pod name obtained from the previous example, or from all pods belonging to our instance:
```bash
$ kubectl logs -l app.kubernetes.io/instance=simplest
...
{"level":"info","ts":1535385688.0951214,"caller":"healthcheck/handler.go:133","msg":"Health Check state change","status":"ready"}
```
{{< info >}}
On OKD/OpenShift the container name must be specified.
{{< /info >}}
```bash
$ kubectl logs -l app.kubernetes.io/instance=simplest -c jaeger
...
{"level":"info","ts":1535385688.0951214,"caller":"healthcheck/handler.go:133","msg":"Health Check state change","status":"ready"}
```
# Deployment Strategies
When you create a Jaeger instance, it is associated with a strategy. The strategy is defined in the custom resource file, and determines the architecture to be used for the Jaeger backend. The default strategy is `allInOne`. The other possible values are `production` and `streaming`.
The available strategies are described in the following sections.
## AllInOne (Default) strategy
This strategy is intended for development, testing, and demo purposes.
The main backend components, agent, collector and query service, are all packaged into a single executable which is configured (by default) to use in-memory storage.
## Production strategy
The `production` strategy is intended (as the name suggests) for production environments, where long term storage of trace data is important, as well as a more scalable and highly available architecture is required. Each of the backend components is therefore separately deployed.
The agent can be injected as a sidecar on the instrumented application or as a daemonset.
The query and collector services are configured with a supported storage type - currently Cassandra or Elasticsearch. Multiple instances of each of these components can be provisioned as required for performance and resilience purposes.
The main additional requirement is to provide the details of the storage type and options, for example:
```yaml
storage:
type: elasticsearch
options:
es:
server-urls: http://elasticsearch:9200
```
## Streaming strategy
The `streaming` strategy is designed to augment the `production` strategy by providing a streaming capability that effectively sits between the collector and the backend storage (Cassandra or Elasticsearch). This provides the benefit of reducing the pressure on the backend storage, under high load situations, and enables other trace post-processing capabilities to tap into the real time span data directly from the streaming platform (Kafka).
The only additional information required is to provide the details for accessing the Kafka platform, which is configured in the `collector` component (as producer) and `ingester` component (as consumer):
```yaml
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: simple-streaming
spec:
strategy: streaming
collector:
options:
kafka: # <1>
producer:
topic: jaeger-spans
brokers: my-cluster-kafka-brokers.kafka:9092
ingester:
options:
kafka: # <1>
consumer:
topic: jaeger-spans
brokers: my-cluster-kafka-brokers.kafka:9092
ingester:
deadlockInterval: 0 # <2>
storage:
type: elasticsearch
options:
es:
server-urls: http://elasticsearch:9200
```
<1> Identifies the Kafka configuration used by the collector, to produce the messages, and the ingester to consume the messages.
<2> The deadlock interval can be disabled to avoid the ingester being terminated when no messages arrive within the default 1 minute period
{{< info >}}
A Kafka environment can be configured using [Strimzi's Kafka operator](https://strimzi.io/).
{{< /info >}}
# Understanding Custom Resource Definitions
In the Kubernetes API, a resource is an endpoint that stores a collection of API objects of a certain kind. For example, the built-in Pods resource contains a collection of Pod objects. A _Custom Resource Definition_ (CRD) object defines a new, unique object `Kind` in the cluster and lets the Kubernetes API server handle its entire lifecycle.
To create _Custom Resource_ (CR) objects, cluster administrators must first create a Custom Resource Definition (CRD). The CRDs allow cluster users to create CRs to add the new resource types into their projects. An Operator watches for custom resource objects to be created, and when it sees a custom resource being created, it creates the application based on the parameters defined in the custom resource object.
{{< info >}}
While only cluster administrators can create CRDs, developers can create the CR from an existing CRD if they have read and write permission to it.
{{< /info >}}
<!--
## Jaeger Custom Resource Parameters
TODO Create a TABLE with all the parameters, descriptions/notes, valid values, and defaults.
Figure out if we can generate the options? Can we filter them in any way?
https://github.com/jaegertracing/jaeger/issues/1537
https://github.com/jaegertracing/documentation/issues/250-->
For reference, here's how you can create a more complex all-in-one instance:
```yaml
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: my-jaeger
spec:
strategy: allInOne # <1>
allInOne:
image: jaegertracing/all-in-one:latest # <2>
options: # <3>
log-level: debug # <4>
storage:
type: memory # <5>
options: # <6>
memory: # <7>
max-traces: 100000
ingress:
enabled: false # <8>
agent:
strategy: DaemonSet # <9>
annotations:
scheduler.alpha.kubernetes.io/critical-pod: "" # <10>
```
<1> The default strategy is `allInOne`. The other possible values are `production` and `streaming`.
<2> The image to use, in a regular Docker syntax.
<3> The (non-storage related) options to be passed verbatim to the underlying binary. Refer to the Jaeger documentation and/or to the `--help` option from the related binary for all the available options.
<4> The option is a simple `key: value` map. In this case, we want the option `--log-level=debug` to be passed to the binary.
<5> The storage type to be used. By default it will be `memory`, but can be any other supported storage type (Cassandra, Elasticsearch, Kafka).
<6> All storage related options should be placed here, rather than under the 'allInOne' or other component options.
<7> Some options are namespaced and we can alternatively break them into nested objects. We could have specified `memory.max-traces: 100000`.
<8> By default, an ingress object is created for the query service. It can be disabled by setting its `enabled` option to `false`. If deploying on OpenShift, this will be represented by a Route object.
<9> By default, the operator assumes that agents are deployed as sidecars within the target pods. Specifying the strategy as "DaemonSet" changes that and makes the operator deploy the agent as DaemonSet. Note that your tracer client will probably have to override the "JAEGER_AGENT_HOST" environment variable to use the node's IP.
<10> Define annotations to be applied to all deployments (not services). These can be overridden by annotations defined on the individual components.
You can view example custom resources for different Jaeger configurations [on GitHub](https://github.com/jaegertracing/jaeger-operator/tree/master/examples).
# Configuring the Custom Resource
<!--TODO
esIndexCleaner
Spark dependencies
-->
You can use the simplest example (shown above) and create a Jaeger instance using the defaults, or you can create your own custom resource file.
## Storage options
### Cassandra storage
When the storage type is set to Cassandra, the operator will automatically create a batch job that creates the required schema for Jaeger to run. This batch job will block the Jaeger installation, so that it starts only after the schema is successfuly created. The creation of this batch job can be disabled by setting the `enabled` property to `false`:
```yaml
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: cassandra-without-create-schema
spec:
strategy: allInOne
storage:
type: cassandra
cassandraCreateSchema:
enabled: false # <1>
```
<1> Defaults to `true`
Further aspects of the batch job can be configured as well. An example with all the possible options is shown below:
```yaml
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: cassandra-with-create-schema
spec:
strategy: allInOne # <1>
storage:
type: cassandra
options: # <2>
cassandra:
servers: cassandra
keyspace: jaeger_v1_datacenter3
cassandraCreateSchema: # <3>
datacenter: "datacenter3"
mode: "test"
```
<1> The same works for `production` and `streaming`.
<2> These options are for the regular Jaeger components, like `collector` and `query`.
<3> The options for the `create-schema` job.
{{< info >}}
The default create-schema job uses `MODE=prod`, which implies a replication factor of `2`, using `NetworkTopologyStrategy` as the class, effectively meaning that at least 3 nodes are required in the Cassandra cluster. If a `SimpleStrategy` is desired, set the mode to `test`, which then sets the replication factor of `1`. Refer to the [create-schema script](https://github.com/jaegertracing/jaeger/blob/master/plugin/storage/cassandra/schema/create.sh) for more details.
{{< /info >}}
### Elasticsearch storage
Under some circumstances, the Jaeger Operator can make use of the [Elasticsearch Operator](https://github.com/openshift/elasticsearch-operator) to provision a suitable Elasticsearch cluster.
{{< warning >}}
This feature is only tested on OpenShift clusters. Spark dependencies are not supported with this feature [Issue #294](https://github.com/jaegertracing/jaeger-operator/issues/294).
{{< /warning >}}
When there are no `es.server-urls` options as part of a Jaeger `production` instance and `elasticsearch` is set as the storage type, the Jaeger Operator creates an Elasticsearch cluster via the Elasticsearch Operator by creating a Custom Resource based on the configuration provided in storage section. The Elasticsearch cluster is meant to be dedicated for a single Jaeger instance.
The self-provision of an Elasticsearch cluster can be disabled by setting the flag `--es-provision` to `false`. The default value is `auto`, which will make the Jaeger Operator query the Kubernetes cluster for its ability to handle a `Elasticsearch` custom resource. This is usually set by the Elasticsearch Operator during its installation process, so, if the Elasticsearch Operator is expected to run *after* the Jaeger Operator, the flag can be set to `true`.
{{< danger >}}
At the moment there can be only one Jaeger with self-provisioned Elasticsearch instance per namespace.
{{< /danger >}}
#### Elasticsearch index cleaner job
When using `elasticsearch` storage by default a job is created to clean old traces from it, the options for it are listed below so you can configure it to your use case
```yaml
storage:
type: elasticsearch
esIndexCleaner:
enabled: false # turn the job deployment on and off
numberOfDays: 7 # number of days to wait before deleting a record
schedule: "55 23 * * *" # cron expression for it to run
image: jaegertracing/jaeger-es-index-cleaner # image of the job
```
## Auto-injecting Jaeger Agent Sidecars
The operator can inject Jaeger Agent sidecars in `Deployment` workloads, provided that the deployment has the annotation `sidecar.jaegertracing.io/inject` with a suitable value. The values can be either `"true"` (as string), or the Jaeger instance name, as returned by `kubectl get jaegers`. When `"true"` is used, there should be exactly *one* Jaeger instance for the same namespace as the deployment, otherwise, the operator can't figure out automatically which Jaeger instance to use.
The following snippet shows a simple application that will get a sidecar injected, with the Jaeger Agent pointing to the single Jaeger instance available in the same namespace:
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
annotations:
"sidecar.jaegertracing.io/inject": "true" # <1>
spec:
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: acme/myapp:myversion
```
<1> Either `"true"` (as string) or the Jaeger instance name.
A complete sample deployment is available at [`deploy/examples/business-application-injected-sidecar.yaml`](https://github.com/jaegertracing/jaeger-operator/blob/master/examples/business-application-injected-sidecar.yaml).
When the sidecar is injected, the Jaeger Agent can then be accessed at its default location on `localhost`.
## Installing the Agent as DaemonSet
By default, the Operator expects the agents to be deployed as sidecars to the target applications. This is convenient for several purposes, like in a multi-tenant scenario or to have better load balancing, but there are scenarios where you might want to install the agent as a `DaemonSet`. In that case, specify the Agent's strategy to `DaemonSet`, as follows:
```yaml
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: my-jaeger
spec:
agent:
strategy: DaemonSet
```
{{< danger >}}
If you attempt to install two Jaeger instances on the same cluster with `DaemonSet` as the strategy, only *one* will end up deploying a `DaemonSet`, as the agent is required to bind to well-known ports on the node. Because of that, the second daemon set will fail to bind to those ports.
{{< /danger >}}
Your tracer client will then most likely need to be told where the agent is located. This is usually done by setting the environment variable `JAEGER_AGENT_HOST` to the value of the Kubernetes node's IP, for example:
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: acme/myapp:myversion
env:
- name: JAEGER_AGENT_HOST
valueFrom:
fieldRef:
fieldPath: status.hostIP
```
## Secrets Support
The Operator supports passing secrets to the Collector, Query and All-In-One deployments. This can be used for example, to pass credentials (username/password) to access the underlying storage backend (for example: Elasticsearch).
The secrets are available as environment variables in the (Collector/Query/All-In-One) nodes.
```yaml
storage:
type: elasticsearch
options:
es:
server-urls: http://elasticsearch:9200
secretName: jaeger-secrets
```
The secret itself would be managed outside of the `jaeger-operator` custom resource.
## Configuring the UI
Information on various configuration options for the UI can be found [here](../frontend-ui/#configuration), defined in json format.
To apply UI configuration changes within the Custom Resource, the same information can be included in yaml format as shown below:
```yaml
ui:
options:
dependencies:
menuEnabled: false
tracking:
gaID: UA-000000-2
menu:
- label: "About Jaeger"
items:
- label: "Documentation"
url: "https://www.jaegertracing.io/docs/latest"
linkPatterns:
- type: "logs"
key: "customer_id"
url: /search?limit=20&lookback=1h&service=frontend&tags=%7B%22customer_id%22%3A%22#{customer_id}%22%7D
text: "Search for other traces for customer_id=#{customer_id}"
```
## Defining Sampling Strategies
{{< info >}}
This is not relevant if a trace was started by the Istio proxy as the sampling decision is made there. And the Jaeger sampling decisions are only relevant when you are using the Jaeger tracer (client).
{{< /info >}}
The operator can be used to define sampling strategies that will be supplied to tracers that have been configured to use a remote sampler:
```yaml
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: with-sampling
spec:
strategy: allInOne
sampling:
options:
default_strategy:
type: probabilistic
param: 0.5
```
This example defines a default sampling strategy that is probabilistic, with a 50% chance of the trace instances being sampled.
Refer to the Jaeger documentation on [Collector Sampling Configuration](https://www.jaegertracing.io/docs/latest/sampling/#collector-sampling-configuration) to see how service and endpoint sampling can be configured. The JSON representation described in that documentation can be used in the operator by converting to YAML.
## Finer grained configuration
The custom resource can be used to define finer grained Kubernetes configuration applied to all Jaeger components or at the individual component level.
When a common definition (for all Jaeger components) is required, it is defined under the `spec` node. When the definition relates to an individual component, it is placed under the `spec/<component>` node.
The types of supported configuration include:
* [affinity](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity) to determine which nodes a pod can be allocated to
* [annotations](https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/)
* [labels](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/)
* [resources](https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container) to limit cpu and memory
* [tolerations](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) in conjunction with `taints` to enable pods to avoid being repelled from a node
* [volumes](https://kubernetes.io/docs/concepts/storage/volumes/) and volume mounts
* [serviceAccount](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/) to run each component with separate identity
* [securityContext](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/) to define privileges of running components
```yaml
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: simple-prod
spec:
strategy: production
storage:
type: elasticsearch
options:
es:
server-urls: http://elasticsearch:9200
annotations:
key1: value1
labels:
key2: value2
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/e2e-az-name
operator: In
values:
- e2e-az1
- e2e-az2
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: another-node-label-key
operator: In
values:
- another-node-label-value
tolerations:
- key: "key1"
operator: "Equal"
value: "value1"
effect: "NoSchedule"
- key: "key1"
operator: "Equal"
value: "value1"
effect: "NoExecute"
serviceAccount: nameOfServiceAccount
securityContext:
runAsUser: 1000
volumeMounts:
- name: config-vol
mountPath: /etc/config
volumes:
- name: config-vol
configMap:
name: log-config
items:
- key: log_level
path: log_level
```
# Accessing the Jaeger Console (UI)
<!-- TODO Add tabs shortcode -->
## Kubernetes
The operator creates a Kubernetes [`ingress`](https://kubernetes.io/docs/concepts/services-networking/ingress/) route, which is the Kubernetes' standard for exposing a service to the outside world, but by default it does not come with Ingress providers.
Check the [Kubernetes documentation](https://kubernetes.github.io/ingress-nginx/deploy/#verify-installation) for the most appropriate way to achieve an Ingress provider for your platform. The following command enables the Ingress provider on `minikube`:
```bash
minikube addons enable ingress
```
Once Ingress is enabled, the address for the Jaeger console can be found by querying the Ingress object:
```bash
$ kubectl get ingress
NAME HOSTS ADDRESS PORTS AGE
simplest-query * 192.168.122.34 80 3m
```
In this example, the Jaeger UI is available at http://192.168.122.34.
## OpenShift
When the Operator is running on OpenShift, the Operator will automatically create a `Route` object for the query services. Use the following command to check the hostname/port:
```bash
oc get routes
```
{{< info >}}
Make sure to use `https` with the hostname/port you get from the command above, otherwise you'll see a message like: "Application is not available".
{{< /info >}}
By default, the Jaeger UI is protected with OpenShift's OAuth service and any valid user is able to login. To disable this feature and leave the Jaeger UI unsecured, set the Ingress property `security` to `none` in the custom resource file:
```yaml
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: disable-oauth-proxy
spec:
ingress:
security: none
```
Custom `SAR` and `Delegate URL` values can be specified as part of the `.Spec.Ingress.OpenShift.SAR` and `.Spec.Ingress.Openshift.DelegateURLs`, as follows:
```yaml
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: custom-sar-oauth-proxy
spec:
ingress:
openshift:
sar: '{"namespace": "default", "resource": "pods", "verb": "get"}'
delegate-urls: '{"/":{"namespace": "default", "resource": "pods", "verb": "get"}}'
```
When the `delegate-urls` is set, the Jaeger Operator needs to create a new `ClusterRoleBinding` between the service account used by the UI Proxy (`{InstanceName}-ui-proxy`) and the role `system:auth-delegator`, as required by the OpenShift OAuth Proxy. Because of that, the service account used by the operator itself needs to have the same cluster role binding. To accomplish that, a `ClusterRoleBinding` such as the following has to be created:
```yaml
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: jaeger-operator-with-auth-delegator
namespace: observability
subjects:
- kind: ServiceAccount
name: jaeger-operator
namespace: observability
roleRef:
kind: ClusterRole
name: system:auth-delegator
apiGroup: rbac.authorization.k8s.io
```
Cluster administrators not comfortable in letting users deploy Jaeger instances with this cluster role are free to not add this cluster role to the operator's service account. In that case, the Operator will auto-detect that the required permissions are missing and will log a message similar to: `the requested instance specifies the delegate-urls option for the OAuth Proxy, but this operator cannot assign the proper cluster role to it (system:auth-delegator). Create a cluster role binding between the operator's service account and the cluster role 'system:auth-delegator' in order to allow instances to use 'delegate-urls'`.
# Updating a Jaeger instance (experimental)
A Jaeger instance can be updated by changing the `CustomResource`, either via `kubectl edit jaeger simplest`, where `simplest` is the Jaeger's instance name, or by applying the updated YAML file via `kubectl apply -f simplest.yaml`.
{{< danger >}}
The name of the Jaeger instance cannot be updated, as it is part of the identifying information for the resource.
{{< /danger >}}
Simpler changes such as changing the replica sizes can be applied without much concern, whereas changes to the strategy should be watched closely and might potentially cause an outage for individual components (collector/query/agent).
While changing the backing storage is supported, migration of the data is not.
# Removing a Jaeger instance
<!-- TODO Add OKD/OpenShift commands and tabs shortcode-->
To remove an instance, use the `delete` command with the custom resource file used when you created the instance:
```bash
kubectl delete -f simplest.yaml
```
Alternatively, you can remove a Jaeger instance by running:
```bash
kubectl delete jaeger simplest
```
{{< info >}}
Deleting the instance will not remove the data from any permanent storage used with this instance. Data from in-memory instances, however, will be lost.
{{< /info >}}
# Monitoring the operator
The Jaeger Operator starts a Prometheus-compatible endpoint on `0.0.0.0:8383/metrics` with internal metrics that can be used to monitor the process.
{{< info >}}
The Jaeger Operator does not yet publish its own metrics. Rather, it makes available metrics reported by the components it uses, such as the Operator SDK.
{{< /info >}}
# Uninstalling the operator
<!-- TODO Add OKD/OpenShift commands and tabs shortcode -->
To uninstall the operator, run the following commands:
```bash
kubectl delete -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/operator.yaml
kubectl delete -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/role_binding.yaml
kubectl delete -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/role.yaml
kubectl delete -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/service_account.yaml
kubectl delete -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/crds/jaegertracing.io_jaegers_crd.yaml
```

View File

@ -1,95 +0,0 @@
---
title: Performance Tuning Guide
description: Tweaking your Jaeger instance to achieve a better performance
weight: 10
---
Jaeger was built from day 1 to be able to ingest huge amounts of data in a resilient way. To better utilize resources that might cause delays, such as storage or network communications, Jaeger buffers and batches data. When more spans are generated than Jaeger is able to safely process, spans might get dropped. However, the defaults might not fit all scenarios: for instance, Agents running as a sidecar might have more memory constraints than Agents running as a daemon in bare metal.
## Deployment considerations
Although performance tuning the individual components is important, the way Jaeger is deployed can be decisive in obtaining optimal performance.
### Scale the Collector up and down
Use the auto-scaling capabilities of your platform: the Collector is nearly horizontally scalable so that more instances can be added and removed on-demand. A good way to scale up and down is by checking the `jaeger_collector_queue_length` metric: add instances when the length is higher than 50% of the maximum size for extended periods of time. Another metric that can be taken into consideration is `jaeger_collector_in_queue_latency_bucket`, which is a histogram indicating how long spans have been waiting in the queue before a worker picked it up. When the queue latency gets higher over time, its a good indication to increase the number of the workers, or to improve the storage performance.
Adding Collector instances is recommended when your platform provides auto-scaling capabilities, or when it's easier to start/stop Collector instances than changing existing, running instances. Scaling horizontally is also indicated when the CPU usage should be spread across nodes.
### Make sure the storage can keep up
Each span is written to the storage by the Collector using one worker, blocking it until the span has been stored. When the storage is too slow, the number of workers blocked by the storage might be too high, causing spans to be dropped. To help diagnose this situation, the histogram `jaeger_collector_save_latency_bucket` can be analyzed. Ideally, the latency should remain the same over time. When the histogram shows that most spans are taking longer and longer over time, its a good indication that your storage might need some attention.
### Place the Agents close to your applications
The Agent is meant to be placed on the same host as the instrumented application, in order to avoid UDP packet loss over the network. This is typically accomplished by having one Agent per bare metal host for traditional applications, or as a sidecar in container environments like Kubernetes, as this helps spread the load handled by Agents with the additional advantage of allowing each Agent to be tweaked individually, according to the applications needs and importance.
### Consider using Apache Kafka as intermediate buffer
Jaeger [can use Apache Kafka](../architecture/) as a buffer between the Collector and the actual backing storage (Elasticsearch, Apache Cassandra). This is ideal for cases where the traffic spikes are relatively frequent (prime time traffic) but the storage can eventually catch up once the traffic normalizes. For that, the `SPAN_STORAGE_TYPE` environment variable should be set to `kafka` in the Collector and the Jaeger Ingester component can be used, reading data from Kafka and writing it to the storage.
In addition to the performance aspects, having spans written to Kafka is useful for building real time data pipeline for aggregations and feature extraction from traces.
## Client (Tracer) settings
The Jaeger Clients are built to have minimal effect to the instrumented application. As such, it has conservative defaults that might not be suitable for all cases. Note that Jaeger Clients can be configured programmatically or via [environment variables](../client-features/).
### Adjust the sampling configuration
Together, the `JAEGER_SAMPLER_TYPE` and `JAEGER_SAMPLER_PARAM` specify how often traces should be "sampled", ie, recorded and sent to the Jaeger backend. For applications generating a large number of spans, setting the sampling type to `probabilistic` and the value to `0.001` (the default) will cause traces to be reported with a 1/1000th chance. Note that the sampling decision is made at the root span and propagated down to all child spans.
For applications with low to medium traffic, setting the sampling type to `const` and value to `1` will cause all spans to be reported. Similarly, tracing can be disabled by setting the value to `0`, while context propagation will continue to work.
Some Clients support the setting `JAEGER_DISABLED` to completely disable the Jaeger Tracer. This is recommended only if the Tracer is behaving in a way that causes problems to the instrumented application, as it will not propagate the context to the downstream services.
{{< info >}}
We recommend to set your clients to use the [`remote` sampling strategy](../sampling/#collector-sampling-configuration), so that admins can centrally set the concrete sampling strategy for each service.
{{< /info >}}
### Increase in-memory queue size
Most of the Jaeger clients, such as the Java, Go, and C# clients, buffer spans in memory before sending them to the Jaeger Agent/Collector. The maximum size of this buffer is defined by the environment variable `JAEGER_REPORTER_MAX_QUEUE_SIZE` (default value: about `100` spans): the larger the size, the higher the potential memory consumption. When the instrumented application is generating a large number of spans, its possible that the queue will be full causing the Client to discard the new spans (metric `jaeger_tracer_reporter_spans_total{result="dropped",}`).
In most common scenarios, the queue will be close to empty (metric: `jaeger_tracer_reporter_queue_length`), as spans are flushed to the Agent or Collector at regular intervals or when a certain size of the batch is reached. The detailed behavior of this queue is described in this [GitHub issue](https://github.com/jaegertracing/jaeger-client-java/issues/607).
### Modify the batched spans flush interval
The Java, Go, NodeJS, Python and C# Clients allow the customization of the flush interval (default value: `1000` milliseconds, or 1 second) used by the reporters, such as the `RemoteReporter`, to trigger a `flush` operation, sending all in-memory spans to the Agent or Collector. The lower the flush interval is set to, the more frequent the flush operations happen. As most reporters will wait until enough data is in the queue, this setting will force a flush operation at periodic intervals, so that spans are sent to the backend in a timely fashion.
When the instrumented application is generating a large number of spans and the Agent/Collector is close to the application, the networking overhead might be low, justifying a higher number of flush operations. When the `HttpSender` is being used and the Collector is not close enough to the application, the networking overhead might be too high so that a higher value for this property makes sense.
## Agent settings
Jaeger Agents receive data from Clients, sending them in batches to the Collector. When not properly configured, it might end up discarding data even if the host machine has plenty of resources.
### Adjust server queue sizes
The set of “server queue size” properties ( `processor.jaeger-binary.server-queue-size`, `processor.jaeger-compact.server-queue-size`, `processor.zipkin-compact.server-queue-size`) indicate the maximum number of span batches that the Agent can accept and store in memory. Its safe to assume that `jaeger-compact` is the most important processor in your Agent setup, as its the only one available in most Clients, such as the Java and Go Clients.
The default value for each queue is `1000` span batches. Given that each span batch has up to 64KiB worth of spans, each queue can hold up to 64MiB worth of spans.
In typical scenarios, the queue will be close to empty (metric `jaeger_agent_thrift_udp_server_queue_size`) as span batches should be quickly picked up and processed by a worker. However, sudden spikes in the number of span batches submitted by Clients might occur, causing the batches to be queued. When the queue is full, the older batches are overridden causing spans to be discarded (metric `jaeger_agent_thrift_udp_server_packets_dropped_total`).
### Adjust processor workers
The set of “processor workers” properties ( `processor.jaeger-binary.workers`, `processor.jaeger-compact.workers`, `processor.zipkin-compact.workers`) indicate the number of parallel span batch processors to start. Each worker type has a default size of `10`. In general, span batches are processed as soon as they are placed in the server queue and will block a worker until the whole packet is sent to the Collector. For Agents processing data from multiple Clients, the number of workers should be increased. Given that the cost of each worker is low, a good rule of thumb is 10 workers per Client with moderate traffic: given that each span batch might contain up to 64KiB worth of spans, it means that 10 workers are able to send about 640KiB concurrently to a Collector.
## Collector settings
The Collector receives data from Clients and Agents. When not properly configured, it might process less data than what would be possible on the same host, or it might overload the host by consuming more memory than permitted.
### Adjust queue size
Similar to the Agent, the Collector is able to receive spans and place them in an internal queue for processing. This allows the Collector to return immediately to the Client/Agent instead of waiting for the span to make its way to the storage.
The setting `collector.queue-size` (default: `2000`) dictates how many spans the queue should support. In the typical scenario, the queue will be close to empty, as enough workers should exist picking up spans from the queue and sending them to the storage. When the number of items in the queue (metric `jaeger_collector_queue_length`) is permanently high, its an indication that either the number of workers should be increased or that the storage cannot keep up with the volume of data that its receiving. When the queue is full, the older items in the queue are overridden, causing spans to be discarded (metric `jaeger_collector_spans_dropped_total`).
{{< warning >}}
The queue size for the Agent is about _span batches_, whereas the queue size for the Collector is about _individual spans_.
{{< /warning >}}
Given that the queue size should be close to empty most of the time, this setting should be as high as the available memory for the Collector, to provide maximum protection against sudden traffic spikes. However, if your storage layer is under-provisioned and cannot keep up, even a large queue will quickly fill up and start dropping data.
### Adjust processor workers
Items from the span queue in the Collector are picked up by workers. Each worker picks one span from the queue and persists it to the storage. The number of workers can be specified by the setting `collector.num-workers` (default: `50`) and should be as high as needed to keep the queue close to zero. The general rule is: the faster the backing storage, the lower the number of workers can be. Given that workers are relatively cheap, this number can be increased at will. As a general rule, one worker per 50 items in the queue should be sufficient when the storage is fast. With a `collector.queue-size` of `2000`, having about `40` workers should be sufficient. For slower storage mechanisms, this ratio should be adjusted accordingly, having more workers per queue item.

View File

@ -1,66 +0,0 @@
---
title: Sampling
hasparent: true
---
Jaeger libraries implement consistent upfront (or head-based) sampling. For example, assume we have a simple call graph where service A calls service B, and B calls service C: `A -> B -> C`. When service A receives a request that contains no tracing information, Jaeger tracer will start a new {{< tip "trace" >}}, assign it a random trace ID, and make a sampling decision based on the currently installed sampling strategy. The sampling decision will be propagated with the requests to B and to C, so those services will not be making the sampling decision again but instead will respect the decision made by the top service A. This approach guarantees that if a trace is sampled, all its {{< tip "spans" "span" >}} will be recorded in the backend. If each service was making its own sampling decision we would rarely get complete traces in the backend.
## Client Sampling Configuration
When using configuration object to instantiate the tracer, the type of sampling can be selected via `sampler.type` and `sampler.param` properties. Jaeger libraries support the following samplers:
* **Constant** (`sampler.type=const`) sampler always makes the same decision for all traces. It either samples all traces (`sampler.param=1`) or none of them (`sampler.param=0`).
* **Probabilistic** (`sampler.type=probabilistic`) sampler makes a random sampling decision with the probability of sampling equal to the value of `sampler.param` property. For example, with `sampler.param=0.1` approximately 1 in 10 traces will be sampled.
* **Rate Limiting** (`sampler.type=ratelimiting`) sampler uses a leaky bucket rate limiter to ensure that traces are sampled with a certain constant rate. For example, when `sampler.param=2.0` it will sample requests with the rate of 2 traces per second.
* **Remote** (`sampler.type=remote`, which is also the default) sampler consults Jaeger agent for the appropriate sampling strategy to use in the current service. This allows controlling the sampling strategies in the services from a [central configuration](#collector-sampling-configuration) in Jaeger backend, or even dynamically (see [Adaptive Sampling](https://github.com/jaegertracing/jaeger/issues/365)).
### Adaptive Sampler
Adaptive sampler is a composite sampler that combines two functions:
* It makes sampling decisions on a per-operation basis, i.e. based on {{< tip "span" >}} operation name. This is especially useful in the API services whose endpoints may have very different traffic volumes and using a single probabilistic sampler for the whole service might starve (never sample) some of the low QPS endpoints.
* It supports a minimum guaranteed rate of sampling, such as always allowing up to N {{< tip "traces" "trace" >}} per seconds and then sampling anything above that with a certain probability (everything is per-operation, not per-service).
Per-operation parameters can be configured statically or pulled periodically from Jaeger backend with the help of Remote sampler. Adaptive sampler is designed to work with the upcoming [Adaptive Sampling](https://github.com/jaegertracing/jaeger/issues/365) feature of the Jaeger backend.
## Collector Sampling Configuration
Collectors can be instantiated with static sampling strategies (which are propagated to the respective service if configured with Remote sampler) via the `--sampling.strategies-file` option. This option requires a path to a json file which have the sampling strategies defined.
Example `strategies.json`
```json
{
"service_strategies": [
{
"service": "foo",
"type": "probabilistic",
"param": 0.8,
"operation_strategies": [
{
"operation": "op1",
"type": "probabilistic",
"param": 0.2
},
{
"operation": "op2",
"type": "probabilistic",
"param": 0.4
}
]
},
{
"service": "bar",
"type": "ratelimiting",
"param": 5
}
],
"default_strategy": {
"type": "probabilistic",
"param": 0.5
}
}
```
`service_strategies` defines service specific sampling strategies and `operation_strategies` defines operation specific sampling strategies. There are 2 types of strategies possible: `probabilistic` and `ratelimiting` which are described [above](#client-sampling-configuration) (NOTE: `ratelimiting` is not supported for `operation_strategies`). `default_strategy` defines the catch-all sampling strategy that is propagated if the service is not included as part of `service_strategies`.
In the above example, all service `foo` operations are sampled probabilistically with a probability of 0.8 except `op1` and `op2` which are probabilistically sampled with a probability of 0.2 and 0.4 respectively. All operations for service `bar` are ratelimited at 5 traces per second. Any other service is probabilistically sampled with a probability of 0.5.

View File

@ -1,70 +0,0 @@
---
title: Introduction
weight: 1
children:
- title: Features
url: features
---
Welcome to Jaeger's documentation portal! Below, you'll find information for beginners and experienced Jaeger users.
If you can't find what you are looking for, or have an issue not covered here, we'd love to [hear from you](/get-in-touch).
## About
Jaeger, inspired by [Dapper][dapper] and [OpenZipkin](http://zipkin.io),
is a distributed tracing system released as open source by [Uber Technologies][ubeross].
It is used for monitoring and troubleshooting microservices-based distributed systems, including:
* Distributed context propagation
* Distributed transaction monitoring
* Root cause analysis
* Service dependency analysis
* Performance / latency optimization
Uber published a blog post, [Evolving Distributed Tracing at Uber](https://eng.uber.com/distributed-tracing/), where they explain the history and reasons for the architectural choices made in Jaeger. [Yuri Shkuro](https://shkuro.com), creator of Jaeger, also published a book [Mastering Distributed Tracing](https://shkuro.com/books/2019-mastering-distributed-tracing/) that covers in-depth many aspects of Jaeger design and operation, as well as distributed tracing in general.
## Features
* [OpenTracing](http://opentracing.io/) compatible data model and instrumentation libraries
* in [Go](https://github.com/jaegertracing/jaeger-client-go), [Java](https://github.com/jaegertracing/jaeger-client-java), [Node](https://github.com/jaegertracing/jaeger-client-node), [Python](https://github.com/jaegertracing/jaeger-client-python)
and [C++](https://github.com/jaegertracing/cpp-client)
* Uses consistent upfront sampling with individual per service/endpoint probabilities
* Multiple storage backends: Cassandra, Elasticsearch, memory.
* Adaptive sampling (coming soon)
* Post-collection data processing pipeline (coming soon)
See [Features](./features/) page for more details.
## Technical Specs
* Backend components implemented in Go
* React/Javascript UI
* Supported storage backends:
* [Cassandra 3.4+](./deployment/#cassandra)
* [Elasticsearch 5.x, 6.x, 7.x](./deployment/#elasticsearch)
* [Kafka](./deployment/#kafka)
* memory storage
## Quick Start
See [running a docker all in one image](getting-started#all-in-one).
## Screenshots
### Traces View
[![Traces View](/img/traces-ss.png)](/img/traces-ss.png)
### Trace Detail View
[![Detail View](/img/trace-detail-ss.png)](/img/trace-detail-ss.png)
## Related links
- [Evolving Distributed tracing At Uber Engineering](https://eng.uber.com/distributed-tracing/)
- [Mastering Distributed Tracing](https://shkuro.com/books/2019-mastering-distributed-tracing/)
- [Tracing HTTP request latency in Go with OpenTracing](https://medium.com/opentracing/tracing-http-request-latency-in-go-with-opentracing-7cc1282a100a)
- [Distributed Tracing with Jaeger & Prometheus on Kubernetes](https://blog.openshift.com/openshift-commons-briefing-82-distributed-tracing-with-jaeger-prometheus-on-kubernetes/)
- [Using Jaeger with Istio](https://istio.io/docs/tasks/telemetry/distributed-tracing.html)
- [Using Jaeger with Envoy](https://www.envoyproxy.io/docs/envoy/latest/start/sandboxes/jaeger_tracing.html)
[dapper]: https://research.google.com/pubs/pub36356.html
[ubeross]: http://uber.github.io

View File

@ -1,87 +0,0 @@
---
title: APIs
hasparent: true
---
Jaeger components implement various APIs for saving or retrieving trace data.
The following labels are used to describe API compatibility guarantees.
* **stable** - the API guarantees backwards compatibility. If breaking changes are going to be made in the future, they will result in a new API version, e.g. `/api/v2` URL prefix or a different namespace in the IDL.
* **internal** - the APIs intended for internal communications between Jaeger components and not recommended for use by external components.
* **deprecated** - the APIs that are only maintained for legacy reasons and will be phased out in the future.
## Span reporting APIs
Agent and Collector are the two components of the Jaeger backend that can receive spans. At this time they support two sets of non-overlapping APIs.
### Thrift over UDP (stable)
The Agent can only receive spans over UDP in Thrift format. The primary API is a UDP packet that contains a Thrift-encoded `Batch` struct defined in [jaeger.thrift][jaeger.thrift] IDL file, located in the [jaeger-idl][jaeger-idl] repository. Most Jaeger Clients use Thrift's `compact` encoding, however some client libraries do not support it (notably, Node.js) and use Thrift's `binary` encoding (sent to a different UDP port). The Agent's API is defined by [agent.thrift][agent.thrift] IDL file.
For legacy reasons, the Agent also accepts spans in Zipkin format, however, only very old versions of Jaeger clients can send data in that format and it is officially deprecated.
### Protobuf via gRPC (stable)
In a typical Jaeger deployment, Agents receive spans from Clients and forward them to Collectors. Since Jaeger version 1.11 the official and recommended protocol between Agents and Collectors is gRPC with Protobuf.
The Protobuf IDL [collector.proto][collector.proto] is currently located in the main Jaeger repository, under [model/proto/api_v2][collector.proto]. In the future it will be moved to [jaeger-idl][jaeger-idl] repository ([jaeger-idl/issues/55](https://github.com/jaegertracing/jaeger-idl/issues/55)).
### Thrift over HTTP (stable)
In some cases it is not feasible to deploy Jaeger Agent next to the application, for example, when the application code is running as AWS Lambda function. In these scenarios the Jaeger Clients can be configured to submit spans directly to the Collectors over HTTP/HTTPS.
The same [jaeger.thrift][jaeger.thrift] payload can be submitted in HTTP POST request to `/api/traces` endpoint, for example, `https://jaeger-collector:14268/api/traces`. The `Batch` struct needs to be encoded using Thrift's `binary` encoding, and the HTTP request should specify the content type header:
```
Content-Type: application/vnd.apache.thrift.binary
```
### JSON over HTTP (n/a)
There is no official Jaeger JSON format that can be accepted by the collector. In the future the Protobuf-generated JSON may be supported.
### Thrift via TChannel (deprecated)
Agent and Collector can communicate using TChannel protocol. This protocol is generally not supported by the routing infrastructure and has been deprecated. It will be eventually removed from Jaeger.
### Zipkin Formats (stable)
Jaeger Collector can also accept spans in several Zipkin data format, namely JSON v1/v2 and Thrift. The Collector needs to be configured to enable Zipkin HTTP server, e.g. on port 9411 used by Zipkin collectors. The server enables two endpoints that expect POST requests:
* `/api/v1/spans` for submitting spans in Zipkin JSON v1 or Zipkin Thrift format.
* `/api/v2/spans` for submitting spans in Zipkin JSON v2.
## Trace retrieval APIs
Traces saved in the storage can be retrieved by calling Jaeger Query Service.
### gRPC/Protobuf (stable)
The recommended way for programmatically retrieving traces and other data is via gRPC endpoint defined in [query.proto][query.proto] IDL file (located in the main Jaeger repository, similar to [collector.proto][collector.proto]).
### HTTP JSON (internal)
Jaeger UI communicates with Jaeger Query Service via JSON API. For example, a trace can be retrieved via GET request to `https://jaeger-query:16686/api/traces/{trace-id-hex-string}`. This JSON API is intentionally undocumented and subject to change.
## Clients configuration (internal)
Client libraries not only submit finished spans to Jaeger backend, but also periodically poll the Agents for various configurations, such as sampling strategies. The schema for the payload is defined by [sampling.thrift][sampling.thrift], encoded as JSON using Thrift's built-in JSON generation capabilities.
## Service dependencies graph (internal)
Can be retrieved from Query Service at `/api/dependencies` endpoint. The GET request expects two parameters:
* `endTs` (number of milliseconds since epoch) - the end of the time interval
* `lookback` (in milliseconds) - the length the time interval (i.e. start-time + lookback = end-time).
The returned JSON is a list of edges represented as tuples `(caller, callee, count)`.
For programmatic access to service graph, the recommended API is gRPC/Protobuf described above.
[jaeger-idl]: https://github.com/jaegertracing/jaeger-idl/
[jaeger.thrift]: https://github.com/jaegertracing/jaeger-idl/blob/master/thrift/jaeger.thrift
[agent.thrift]: https://github.com/jaegertracing/jaeger-idl/blob/master/thrift/agent.thrift
[sampling.thrift]: https://github.com/jaegertracing/jaeger-idl/blob/master/thrift/sampling.thrift
[collector.proto]: https://github.com/jaegertracing/jaeger/blob/master/model/proto/api_v2/collector.proto
[query.proto]: https://github.com/jaegertracing/jaeger/blob/master/model/proto/api_v2/query.proto

View File

@ -1,13 +0,0 @@
---
title: CLI flags
widescreen: true
hasparent: true
---
This is auto-generated documentation for CLI flags supported by Jaeger binaries.
* CLI flags for some binaries change depending on the `SPAN_STORAGE_TYPE` environment variable. Relevant variations are included below.
* Some binaries support _commands_ (mostly informational), such as `env`, `docs`, and `version`. These commands are not included here.
* All parameters can be also provided via environment variables, by changing all letters to upper-case and replacing all punctuation characters with underscore `_`. For example, the value for the flag `--cassandra.connections-per-host` can be provided via `CASSANDRA_CONNECTIONS_PER_HOST` environment variable.
{{< cli/tools-list >}}

View File

@ -1,467 +0,0 @@
---
title: Deployment
weight: 4
children:
- title: Operator for Kubernetes
navtitle: Kubernetes
url: operator
- title: Frontend/UI
url: frontend-ui
- title: CLI Flags
url: cli
---
The main Jaeger backend components are released as Docker images on Docker Hub:
Component | Repository
--------------------- | ---
**jaeger-agent** | [hub.docker.com/r/jaegertracing/jaeger-agent/](https://hub.docker.com/r/jaegertracing/jaeger-agent/)
**jaeger-collector** | [hub.docker.com/r/jaegertracing/jaeger-collector/](https://hub.docker.com/r/jaegertracing/jaeger-collector/)
**jaeger-query** | [hub.docker.com/r/jaegertracing/jaeger-query/](https://hub.docker.com/r/jaegertracing/jaeger-query/)
**jaeger-ingester** | [hub.docker.com/r/jaegertracing/jaeger-ingester/](https://hub.docker.com/r/jaegertracing/jaeger-ingester/)
There are orchestration templates for running Jaeger with:
* Kubernetes: [github.com/jaegertracing/jaeger-kubernetes](https://github.com/jaegertracing/jaeger-kubernetes),
* OpenShift: [github.com/jaegertracing/jaeger-openshift](https://github.com/jaegertracing/jaeger-openshift).
## Configuration Options
Jaeger binaries can be configured in a number of ways (in the order of decreasing priority):
* command line arguments,
* environment variables,
* configuration files in JSON, TOML, YAML, HCL, or Java properties formats.
To see the complete list of options, run the binary with `help` command. Options that are specific to a certain storage backend are only listed if the storage type is selected. For example, to see all available options in the Collector with Cassandra storage:
```sh
$ docker run --rm \
-e SPAN_STORAGE_TYPE=cassandra \
jaegertracing/jaeger-collector:{{< currentVersion >}} \
help
```
In order to provide configuration parameters via environment variables, find the respective command line option and convert its name to UPPER_SNAKE_CASE, for example:
Command line option | Environment variable
-----------------------------------|-------------------------------
`--cassandra.connections-per-host` | `CASSANDRA_CONNECTIONS_PER_HOST`
`--metrics-backend` | `METRICS_BACKEND`
## Agent
Jaeger client libraries expect **jaeger-agent** process to run locally on each host.
The agent exposes the following ports:
Port | Protocol | Function
----- | ------- | ---
6831 | UDP | accept [jaeger.thrift][jaeger-thrift] in `compact` Thrift protocol used by most current Jaeger clients
6832 | UDP | accept [jaeger.thrift][jaeger-thrift] in `binary` Thrift protocol used by Node.js Jaeger client (because [thriftrw][thriftrw] npm package does not support `compact` protocol)
5778 | HTTP | serve configs, sampling strategies
5775 | UDP | accept [zipkin.thrift][zipkin-thrift] in `compact` Thrift protocol (deprecated; only used by very old Jaeger clients, circa 2016)
14271 | HTTP | Healthcheck at `/` and metrics at `/metrics`
It can be executed directly on the host or via Docker, as follows:
```sh
## make sure to expose only the ports you use in your deployment scenario!
docker run \
--rm \
-p6831:6831/udp \
-p6832:6832/udp \
-p5778:5778/tcp \
-p5775:5775/udp \
jaegertracing/jaeger-agent:{{< currentVersion >}}
```
### Discovery System Integration
The agents can connect point to point to a single collector address, which could be
load balanced by another infrastructure component (e.g. DNS) across multiple collectors.
The agent can also be configured with a static list of collector addresses.
On Docker, a command like the following can be used:
```sh
docker run \
--rm \
-p5775:5775/udp \
-p6831:6831/udp \
-p6832:6832/udp \
-p5778:5778/tcp \
jaegertracing/jaeger-agent:{{< currentVersion >}} \
--reporter.grpc.host-port=jaeger-collector.jaeger-infra.svc:14250
```
Or use `--reporter.tchannel.host-port=jaeger-collector.jaeger-infra.svc:14267` to use
legacy tchannel reporter.
When using gRPC, you have several options for load balancing and name resolution:
* Single connection and no load balancing. This is the default if you specify a single `host:port`. (example: `--reporter.grpc.host-port=jaeger-collector.jaeger-infra.svc:14250`)
* Static list of hostnames and round-robin load balancing. This is what you get with a comma-separated list of addresses. (example: `reporter.grpc.host-port=jaeger-collector1:14250,jaeger-collector2:14250,jaeger-collector3:14250`)
* Dynamic DNS resolution and round-robin load balancing. To get this behaviour, prefix the address with `dns:///` and gRPC will attempt to resolve the hostname using SRV records (for [external load balancing](https://github.com/grpc/grpc/blob/master/doc/load-balancing.md)), TXT records (for [service configs](https://github.com/grpc/grpc/blob/master/doc/service_config.md)), and A records. Refer to the [gRPC Name Resolution docs](https://github.com/grpc/grpc/blob/master/doc/naming.md) and the [dns_resolver.go implementation](https://github.com/grpc/grpc-go/blob/master/resolver/dns/dns_resolver.go) for more info. (example: `--reporter.grpc.host-port=dns:///jaeger-collector.jaeger-infra.svc:14250`)
### Agent level tags
Jaeger supports agent level tags, that can be added to the process tags of all spans passing through the agent. This is supported through the command line flag `--jaeger.tags=key1=value1,key2=value2,...,keyn=valuen`. Tags can also be set through an environment flag like so - `--jaeger.tags=key=${envFlag:defaultValue}` - The tag value will be set to the value of the `envFlag` environment key and `defaultValue` if not set. This feature is not supported for the tchannel reporter, enabled using the flags `--collector.host-port` or `--reporter.tchannel.host-port`.
## Collectors
The collectors are stateless and thus many instances of **jaeger-collector** can be run in parallel.
Collectors require almost no configuration, except for the location of Cassandra cluster,
via `--cassandra.keyspace` and `--cassandra.servers` options, or the location of Elasticsearch cluster, via
`--es.server-urls`, depending on which storage is specified. To see all command line options run
```sh
go run ./cmd/collector/main.go -h
```
or, if you don't have the source code
```sh
docker run -it --rm jaegertracing/jaeger-collector:{{< currentVersion >}} -h
```
At default settings the collector exposes the following ports:
Port | Protocol | Function
----- | ------- | ---
14267 | TChannel | used by **jaeger-agent** to send spans in jaeger.thrift format
14250 | gRPC | used by **jaeger-agent** to send spans in model.proto format
14268 | HTTP | can accept spans directly from clients in jaeger.thrift format over binary thrift protocol
9411 | HTTP | can accept Zipkin spans in Thrift, JSON and Proto (disabled by default)
14269 | HTTP | Healthcheck at `/` and metrics at `/metrics`
## Storage Backends
Collectors require a persistent storage backend. Cassandra and Elasticsearch are the primary supported storage backends. Additional backends are [discussed here](https://github.com/jaegertracing/jaeger/issues/638).
The storage type can be passed via `SPAN_STORAGE_TYPE` environment variable. Valid values are `cassandra`, `elasticsearch`, `kafka` (only as a buffer), `grpc-plugin`, `badger` (only with all-in-one) and `memory` (only with all-in-one).
As of version 1.6.0, it's possible to use multiple storage types at the same time by providing a comma-separated list of valid types to the `SPAN_STORAGE_TYPE` environment variable.
It's important to note that all listed storage types are used for writing, but only the first type in the list will be used for reading and archiving.
### Memory
The in-memory storage is not intended for production workloads. It's intended as a simple solution to get started quickly and
data will be lost once the process is gone.
By default, there's no limit in the amount of traces stored in memory but a limit can be established by passing an
integer value via `--memory.max-traces`.
### Badger - local storage
Experimental since Jaeger 1.9
[Badger](https://github.com/dgraph-io/badger) is an embedded local storage, only available
with **all-in-one** distribution. By default it acts as an ephemeral storage using a temporary filesystem.
This can be overridden by using the `--badger.ephemeral=false` option.
```sh
docker run \
-e SPAN_STORAGE_TYPE=badger \
-e BADGER_EPHEMERAL=false \
-e BADGER_DIRECTORY_VALUE=/badger/data \
-e BADGER_DIRECTORY_KEY=/badger/key \
-v <storage_dir_on_host>:/badger \
-p 16686:16686 \
jaegertracing/all-in-one:{{< currentVersion >}}
```
### Cassandra
Supported versions: 3.4+
Deploying Cassandra itself is out of scope for our documentation. One good
source of documentation is the [Apache Cassandra Docs](https://cassandra.apache.org/doc/latest/).
#### Configuration
##### Minimal
```sh
docker run \
-e SPAN_STORAGE_TYPE=cassandra \
-e CASSANDRA_SERVERS=<...> \
jaegertracing/jaeger-collector:{{< currentVersion >}}
```
##### All options
To view the full list of configuration options, you can run the following command:
```sh
docker run \
-e SPAN_STORAGE_TYPE=cassandra \
jaegertracing/jaeger-collector:{{< currentVersion >}} \
--help
```
#### Schema script
A script is provided to initialize Cassandra keyspace and schema
using Cassandra's interactive shell [`cqlsh`][cqlsh]:
```sh
MODE=test sh ./plugin/storage/cassandra/schema/create.sh | cqlsh
```
For production deployment, pass `MODE=prod DATACENTER={datacenter}` arguments to the script,
where `{datacenter}` is the name used in the Cassandra configuration / network topology.
The script also allows overriding TTL, keyspace name, replication factor, etc.
Run the script without arguments to see the full list of recognized parameters.
#### TLS support
Jaeger supports TLS client to node connections as long as you've configured
your Cassandra cluster correctly. After verifying with e.g. `cqlsh`, you can
configure the collector and query like so:
```sh
docker run \
-e CASSANDRA_SERVERS=<...> \
-e CASSANDRA_TLS=true \
-e CASSANDRA_TLS_SERVER_NAME="CN-in-certificate" \
-e CASSANDRA_TLS_KEY=<path to client key file> \
-e CASSANDRA_TLS_CERT=<path to client cert file> \
-e CASSANDRA_TLS_CA=<path to your CA cert file> \
jaegertracing/jaeger-collector:{{< currentVersion >}}
```
The schema tool also supports TLS. You need to make a custom cqlshrc file like
so:
```
# Creating schema in a cassandra cluster requiring client TLS certificates.
#
# Create a volume for the schema docker container containing four files:
# cqlshrc: this file
# ca-cert: the cert authority for your keys
# client-key: the keyfile for your client
# client-cert: the cert file matching client-key
#
# if there is any sort of DNS mismatch and you want to ignore server validation
# issues, then uncomment validate = false below.
#
# When running the container, map this volume to /root/.cassandra and set the
# environment variable CQLSH_SSL=--ssl
[ssl]
certfile = ~/.cassandra/ca-cert
userkey = ~/.cassandra/client-key
usercert = ~/.cassandra/client-cert
# validate = false
```
### Elasticsearch
Supported in Jaeger since 0.6.0
Supported versions: 5.x, 6.x, 7.x
Elasticsearch version is automatically retrieved from root/ping endpoint.
Based on this version Jaeger uses compatible index mappings and Elasticsearch REST API.
The version can be explicitly provided via `--es.version=` flag.
Elasticsearch does not require initialization other than
[installing and running Elasticsearch](https://www.elastic.co/downloads/elasticsearch).
Once it is running, pass the correct configuration values to the Jaeger collector and query service.
#### Configuration
##### Minimal
```sh
docker run \
-e SPAN_STORAGE_TYPE=elasticsearch \
-e ES_SERVER_URLS=<...> \
jaegertracing/jaeger-collector:{{< currentVersion >}}
```
##### All options
To view the full list of configuration options, you can run the following command:
```sh
docker run \
-e SPAN_STORAGE_TYPE=elasticsearch \
jaegertracing/jaeger-collector:{{< currentVersion >}} \
--help
```
#### Shards and Replicas for Elasticsearch indices
Shards and replicas are some configuration values to take special attention to, because this is decided upon
index creation. [This article](https://qbox.io/blog/optimizing-elasticsearch-how-many-shards-per-index) goes into
more information about choosing how many shards should be chosen for optimization.
#### Upgrade Elasticsearch version
Elasticsearch defines wire and index compatibility versions. The index compatibility defines
the minimal version a node can read data from. For example Elasticsearch 7 can read indices
created by Elasticsearch 6, however it cannot read indices created by Elasticsearch 5 even
though they use the same index mappings. Therefore upgrade from Elasticsearch 6 to 7 does not require any
data migration. However, upgrade from Elasticsearch 5 to 7 has to be done through Elasticsearch 6 and wait
until indices created by ES 5.x are removed or explicitly reindexed.
Refer to the Elasticsearch [documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current//setup-upgrade.html)
for wire and index compatibility versions. Generally this information can be retrieved from root/ping REST endpoint.
##### Reindex
Manual reindexing can be used when upgrading from Elasticsearch 5 to 7 (through Elasticsearch 6)
without waiting until indices created by Elasticsearch 5 are removed.
1. Reindex all span indices to new indices with suffix `-1`:
```bash
curl -ivX POST -H "Content-Type: application/json" http://localhost:9200/_reindex -d @reindex.json
{
"source": {
"index": "jaeger-span-*"
},
"dest": {
"index": "jaeger-span"
},
"script": {
"lang": "painless",
"source": "ctx._index = 'jaeger-span-' + (ctx._index.substring('jaeger-span-'.length(), ctx._index.length())) + '-1'"
}
}
```
2. Delete indices with old mapping:
```bash
curl -ivX DELETE -H "Content-Type: application/json" http://localhost:9200/jaeger-span-\*,-\*-1
```
3. Create indices without `-1` suffix:
```bash
curl -ivX POST -H "Content-Type: application/json" http://localhost:9200/_reindex -d @reindex.json
{
"source": {
"index": "jaeger-span-*"
},
"dest": {
"index": "jaeger-span"
},
"script": {
"lang": "painless",
"source": "ctx._index = 'jaeger-span-' + (ctx._index.substring('jaeger-span-'.length(), ctx._index.length() - 2))"
}
}
```
4. Remove suffixed indices:
```bash
curl -ivX DELETE -H "Content-Type: application/json" http://localhost:9200/jaeger-span-\*-1
```
Run the commands analogically for other Jaeger indices.
There might exist more effective migration procedure. Please share with the community any findings.
### Kafka
Supported in Jaeger since 1.6.0
Supported Kafka versions: 0.9+
Kafka can be used as an intermediary buffer between collector and an actual storage.
The collector is configured with `SPAN_STORAGE_TYPE=kafka` that makes it write all received spans
into a Kafka topic. A new component [Ingester](#ingester), added in version 1.7.0, is used to read from
Kafka and store spans in another storage backend (Elasticsearch or Cassandra).
Writing to Kafka is particularly useful for building post-processing data pipelines.
#### Configuration
##### Minimal
```sh
docker run \
-e SPAN_STORAGE_TYPE=kafka \
-e KAFKA_BROKERS=<...> \
-e KAFKA_TOPIC=<...> \
jaegertracing/jaeger-collector:{{< currentVersion >}}
```
##### All options
To view the full list of configuration options, you can run the following command:
```sh
docker run \
-e SPAN_STORAGE_TYPE=kafka \
jaegertracing/jaeger-collector:{{< currentVersion >}} \
--help
```
#### Topic & partitions
Unless your Kafka cluster is configured to automatically create topics, you will need to create it ahead of time. You can refer to [the Kafka quickstart documentation](https://kafka.apache.org/documentation/#quickstart_createtopic) to learn how.
You can find more information about topics and partitions in general in the [official documentation](https://kafka.apache.org/documentation/#intro_topics). [This article](https://www.confluent.io/blog/how-to-choose-the-number-of-topicspartitions-in-a-kafka-cluster/) provide more details about how to choose the number of partitions.
### Storage plugin
Jaeger supports gRPC based storage plugins. For more information refer to [jaeger/plugin/storage/grpc](https://github.com/jaegertracing/jaeger/tree/master/plugin/storage/grpc)
Available plugins:
* [InfluxDB](https://github.com/influxdata/jaeger-influxdb/)
```sh
docker run \
-e SPAN_STORAGE_TYPE=grpc-plugin \
-e GRPC_STORAGE_PLUGIN_BINARY=<...> \
-e GRPC_STORAGE_PLUGIN_CONFIGURATION_FILE=<...> \
jaegertracing/all-in-one:{{< currentVersion >}}
```
## Ingester
**jaeger-ingester** is a service which reads span data from Kafka topic and writes it to another storage backend (Elasticsearch or Cassandra).
Port | Protocol | Function
----- | ------- | ---
14270 | HTTP | Healthcheck at `/` and metrics at `/metrics`
To view all exposed configuration options run the following command:
```sh
docker run \
-e SPAN_STORAGE_TYPE=cassandra \
jaegertracing/jaeger-ingester:{{< currentVersion >}}
--help
```
## Query Service & UI
**jaeger-query** serves the API endpoints and a React/Javascript UI.
The service is stateless and is typically run behind a load balancer, such as [**NGINX**](https://www.nginx.com/).
At default settings the query service exposes the following port(s):
Port | Protocol | Function
----- | ------- | ---
16686 | HTTP | `/api/*` endpoints and Jaeger UI at `/`
16687 | HTTP | Healthcheck at `/` and metrics at `/metrics`
### Minimal deployment example (Elasticsearch backend):
```sh
docker run -d --rm \
-p 16686:16686 \
-p 16687:16687 \
-e SPAN_STORAGE_TYPE=elasticsearch \
-e ES_SERVER_URLS=http://<ES_SERVER_IP>:<ES_SERVER_PORT> \
jaegertracing/jaeger-query:{{< currentVersion >}}
```
### UI Base Path
The base path for all **jaeger-query** HTTP routes can be set to a non-root value, e.g. `/jaeger` would cause all UI URLs to start with `/jaeger`. This can be useful when running **jaeger-query** behind a reverse proxy.
The base path can be configured via the `--query.base-path` command line parameter or the `QUERY_BASE_PATH` environment variable.
### UI Customization and Embedding
Please refer to the [dedicated Frontend/UI page](../frontend-ui/).
## Aggregation Jobs for Service Dependencies
Production deployments need an external process which aggregates data and creates dependency links between services. Project [spark-dependencies](https://github.com/jaegertracing/spark-dependencies) is a Spark job which derives dependency links and stores them directly to the storage.
## Configuration
All binaries accepts command line properties and environmental variables, power by [viper](https://github.com/spf13/viper) and [cobra](https://github.com/spf13/cobra) libraries. Please refer to the [CLI Flags](../cli/) page for more information.
[cqlsh]: http://cassandra.apache.org/doc/latest/tools/cqlsh.html
[zipkin-thrift]: https://github.com/jaegertracing/jaeger-idl/blob/master/thrift/zipkincore.thrift
[jaeger-thrift]: https://github.com/jaegertracing/jaeger-idl/blob/master/thrift/jaeger.thrift
[thriftrw]: https://www.npmjs.com/package/thriftrw

View File

@ -1,17 +0,0 @@
---
title: Frequently Asked Questions
navtitle: FAQs
description: Answers to some frequently asked questions about Jaeger.
weight: 11
---
## Why is the Dependencies page empty?
The Dependencies page shows a graph of services traced by Jaeger and connections between them. When you are using `all-in-one` binary with in-memory storage, the graph is calculated on-demand from all the traces stored in memory. However, if you are using a real distributed storage like Cassandra or Elasticsearch, it is too expensive to scan all the data in the database to build the service graph. Instead, the Jaeger project provides "big data" jobs that can be used to extract the service graph data from traces:
* https://github.com/jaegertracing/spark-dependencies - the older Spark job that can be run periodically
* https://github.com/jaegertracing/jaeger-analytics - the new (experimental) streaming Flink jobs that run continuously and builds the service graph in smaller time intervals
## Why do I not see any spans in Jaeger?
Please refer to the [Troubleshooting](../troubleshooting/) guide.

View File

@ -1,57 +0,0 @@
---
title: Features
hasparent: true
---
Jaeger is used for monitoring and troubleshooting microservices-based distributed systems, including:
* Distributed context propagation
* Distributed transaction monitoring
* Root cause analysis
* Service dependency analysis
* Performance / latency optimization
## High Scalability
Jaeger backend is designed to have no single points of failure and to scale with the business needs.
For example, any given Jaeger installation at Uber is typically processing several billion {{< tip "spans" "span" >}} per day.
## Native support for OpenTracing
Jaeger backend, Web UI, and instrumentation libraries have been designed from ground up to support the OpenTracing standard.
* Represent {{< tip "traces" "trace" >}} as {{< tip "directed acyclic graphs" "directed acyclic graph" >}} (not just trees) via [span references](https://github.com/opentracing/specification/blob/master/specification.md#references-between-spans)
* Support strongly typed span _tags_ and _structured logs_
* Support general distributed context propagation mechanism via _baggage_
## Multiple storage backends
Jaeger supports two popular open source NoSQL databases as trace storage backends: Cassandra 3.4+ and Elasticsearch 5.x/6.x/7.x.
There are ongoing community experiments using other databases, such as ScyllaDB, InfluxDB, Amazon DynamoDB. Jaeger also ships
with a simple in-memory storage for testing setups.
## Modern Web UI
Jaeger Web UI is implemented in Javascript using popular open source frameworks like React. Several performance
improvements have been released in v1.0 to allow the UI to efficiently deal with large volumes of data, and to display
{{< tip "traces" "trace" >}} with tens of thousands of {{< tip "spans" "span" >}} (e.g. we tried a trace with 80,000 spans).
## Cloud Native Deployment
Jaeger backend is distributed as a collection of Docker images. The binaries support various configuration methods,
including command line options, environment variables, and configuration files in multiple formats (yaml, toml, etc.).
Deployment to Kubernetes clusters is assisted by a [Kubernetes operator](https://github.com/jaegertracing/jaeger-operator), [Kubernetes templates](https://github.com/jaegertracing/jaeger-kubernetes)
and a [Helm chart](https://github.com/kubernetes/charts/tree/master/incubator/jaeger).
## Observability
All Jaeger backend components expose [Prometheus](https://prometheus.io/) metrics by default (other metrics backends are
also supported). Logs are written to standard out using the structured logging library [zap](https://github.com/uber-go/zap).
## Backwards compatibility with Zipkin
Although we recommend instrumenting applications with OpenTracing API and binding to Jaeger client libraries to benefit
from advanced features not available elsewhere, if your organization has already invested in the instrumentation
using Zipkin libraries, you do not have to rewrite all that code. Jaeger provides backwards compatibility with Zipkin
by accepting spans in Zipkin formats (Thrift, JSON v1/v2 and Protobuf) over HTTP. Switching from Zipkin backend is just a matter
of routing the traffic from Zipkin libraries to the Jaeger backend.

View File

@ -1,224 +0,0 @@
---
title: Frontend/UI Configuration
navtitle: Frontend/UI
hasparent: true
weight: 7
---
## Configuration
Several aspects of the UI can be configured:
* The Dependencies section can be enabled / configured
* Google Analytics tracking can be enabled / configured
* Additional menu options can be added to the global nav
These options can be configured by a JSON configuration file. The `--query.ui-config` command line parameter of the query service must then be set to the path to the JSON file when the query service is started.
An example configuration file:
```json
{
"dependencies": {
"dagMaxNumServices": 200,
"menuEnabled": true
},
"archiveEnabled": true,
"tracking": {
"gaID": "UA-000000-2",
"trackErrors": true
},
"menu": [
{
"label": "About Jaeger",
"items": [
{
"label": "GitHub",
"url": "https://github.com/jaegertracing/jaeger"
},
{
"label": "Docs",
"url": "http://jaeger.readthedocs.io/en/latest/"
}
]
}
],
"linkPatterns": [{
"type": "process",
"key": "jaeger.version",
"url": "https://github.com/jaegertracing/jaeger-client-java/releases/tag/#{jaeger.version}",
"text": "Information about Jaeger release #{jaeger.version}"
}]
}
```
### Dependencies
`dependencies.dagMaxNumServices` defines the maximum number of services allowed before the DAG dependency view is disabled. Default: `200`.
`dependencies.menuEnabled` enables (`true`) or disables (`false`) the dependencies menu button. Default: `true`.
### Archive Support
`archiveEnabled` enables (`true`) or disables (`false`) the archive traces button. Default: `false`. It requires a configuration of an archive storage in Query service. Archived traces are only accessible directly by ID, they are not searchable.
### Google Analytics Tracking
`tracking.gaID` defines the Google Analytics tracking ID. This is required for Google Analytics tracking, and setting it to a non-`null` value enables Google Analytics tracking. Default: `null`.
`tracking.trackErrors` enables (`true`) or disables (`false`) error tracking via Google Analytics. Errors can only be tracked if a valid Google Analytics ID is provided. For additional details on error tracking via Google Analytics see the [tracking README](https://github.com/jaegertracing/jaeger-ui/blob/c622330546afc1be59a42f874bcc1c2fadf7e69a/src/utils/tracking/README.md) in the UI repo. Default: `true`.
### Custom Menu Items
`menu` allows additional links to be added to the global nav. The additional links are right-aligned.
In the sample JSON config above, the configured menu will have a dropdown labeled "About Jaeger" with sub-options for "GitHub" and "Docs". The format for a link in the top right menu is as follows:
```json
{
"label": "Some text here",
"url": "https://example.com"
}
```
Links can either be members of the `menu` Array, directly, or they can be grouped into a dropdown menu option. The format for a group of links is:
```json
{
"label": "Dropdown button",
"items": [ ]
}
```
The `items` Array should contain one or more link configurations.
### Link Patterns
The `linkPatterns` node can be used to create links from fields displayed in the Jaeger UI.
Field | Description
------|------------
type | The metadata section in which your link will be added: process, tags, logs
key | The name of tag/process/log attribute which value will be displayed as a link
url | The URL where the link should point to, it can be an external site or relative path in Jaeger UI
text | The text displayed in the tooltip for the link
Both `url` and `text` can be defined as templates (i.e. using `#{field-name}`) where Jaeger UI will dynamically substitute values based on tags/logs data.
## Embedded Mode
Starting with version 1.9, Jaeger UI provides an "embedded" layout mode which is intended to support integrating Jaeger UI into other applications. Currently (as of `v0`), the approach taken is to remove various UI elements from the page to make the UI better suited for space-constrained layouts.
The embedded mode is induced and configured via URL query parameters.
To enter embedded mode, the `uiEmbed=v0` query parameter and value must be added to the URL. For example, the following URL will show the trace with ID `abc123` in embedded mode:
```
http://localhost:16686/trace/abc123?uiEmbed=v0
```
`uiEmbed=v0` is required.
Further, each page supported has an <img src="/img/frontend-ui/embed-open-icon.png" style="width: 20px; height:20px;display:inline;" alt="Embed open window"> button added that will open the non-embedded page in a new tab.
The following pages support embedded mode:
* Search Page
* Trace Page
### Search Page
To integrate the Search Trace Page to our application we have to indicate to the Jaeger UI that we want to use the embed mode with `uiEmbed=v0`.
For example:
```
http://localhost:16686/search?
service=my-service&
start=1543917759557000&
end=1543921359557000&
limit=20&
lookback=1h&
maxDuration&
minDuration&
uiEmbed=v0
```
![Embed Search Traces](/img/frontend-ui/embed-search-traces.png)
#### Configuration options
The following query parameter can be used to configure the layout of the search page :
* `uiSearchHideGraph=1` - disables the display of the scatter plot above the search results
```
http://localhost:16686/search?
service=my-service&
start=1543917759557000&
end=1543921359557000&
limit=20&
lookback=1h&
maxDuration&
minDuration&
uiEmbed=v0&
uiSearchHideGraph=1
```
![Embed Search Traces without Graph](/img/frontend-ui/embed-search-traces-hide-graph.png)
### Trace Page
To integrate the Trace Page to our application we have to indicate to the Jaeger UI that we want to use the embed mode with `uiEmbed=v0`.
For example:
```sh
http://localhost:16686/trace/{trace-id}?uiEmbed=v0
```
![Embed Trace view](/img/frontend-ui/embed-trace-view.png)
If we have navigated to this view from the search traces page we'll have a button to go back to the results page.
![Embed Trace view](/img/frontend-ui/embed-trace-view-with-back-button.png)
#### Configuration options
The following query parameters can be used to configure the layout of the trace page :
* `uiTimelineCollapseTitle=1` causes the trace header to start out collapsed, which hides the summary and the minimap.
```
http://localhost:16686/trace/{trace-id}?
uiEmbed=v0&
uiTimelineCollapseTitle=1
```
![Embed Trace view](/img/frontend-ui/embed-trace-view-with-collapse.png)
* `uiTimelineHideMinimap=1` removes the minimap, entirely, regardless of whether the trace header is expanded or not.
```
http://localhost:16686/trace/{trace-id}?
uiEmbed=v0&
uiTimelineHideMinimap=1
```
![Embed Trace view](/img/frontend-ui/embed-trace-view-with-hide-minimap.png)
* `uiTimelineHideSummary=1` - removes the trace summary information (number of services, etc.) entirely, regardless of whether the trace header is expanded or not.
```
http://localhost:16686/trace/{trace-id}?
uiEmbed=v0&
uiTimelineHideSummary=1
```
![Embed Trace view](/img/frontend-ui/embed-trace-view-with-hide-summary.png)
We can also combine the options:
```
http://localhost:16686/trace/{trace-id}?
uiEmbed=v0&
uiTimelineHideMinimap=1&
uiTimelineHideSummary=1
```
![Embed Trace view](/img/frontend-ui/embed-trace-view-with-hide-details-and-hide-minimap.png)

View File

@ -1,129 +0,0 @@
---
title: Getting Started
description: Get up and running with Jaeger in your local environment
weight: 2
---
## Instrumentation
Your applications must be instrumented before they can send tracing data to Jaeger backend. Check the [Client Libraries](../client-libraries) section for information about how to use the OpenTracing API and how to initialize and configure Jaeger tracers.
## All in One
All-in-one is an executable designed for quick local testing, launches the Jaeger UI, collector, query, and agent, with an in memory storage component.
The simplest way to start the all-in-one is to use the pre-built image published to DockerHub (a single command line).
```bash
$ docker run -d --name jaeger \
-e COLLECTOR_ZIPKIN_HTTP_PORT=9411 \
-p 5775:5775/udp \
-p 6831:6831/udp \
-p 6832:6832/udp \
-p 5778:5778 \
-p 16686:16686 \
-p 14268:14268 \
-p 9411:9411 \
jaegertracing/all-in-one:{{< currentVersion >}}
```
Or run the `jaeger-all-in-one(.exe)` executable from the [binary distribution archives][download]:
```bash
$ jaeger-all-in-one --collector.zipkin.http-port=9411
```
You can then navigate to `http://localhost:16686` to access the Jaeger UI.
The container exposes the following ports:
Port | Protocol | Component | Function
----- | ------- | --------- | ---
5775 | UDP | agent | accept `zipkin.thrift` over compact thrift protocol (deprecated, used by legacy clients only)
6831 | UDP | agent | accept `jaeger.thrift` over compact thrift protocol
6832 | UDP | agent | accept `jaeger.thrift` over binary thrift protocol
5778 | HTTP | agent | serve configs
16686 | HTTP | query | serve frontend
14268 | HTTP | collector | accept `jaeger.thrift` directly from clients
14250 | HTTP | collector | accept `model.proto`
9411 | HTTP | collector | Zipkin compatible endpoint (optional)
## Kubernetes and OpenShift
* Kubernetes templates: https://github.com/jaegertracing/jaeger-kubernetes
* Kubernetes Operator: https://github.com/jaegertracing/jaeger-operator
* OpenShift templates: https://github.com/jaegertracing/jaeger-openshift
## Sample App: HotROD
HotROD (Rides on Demand) is a demo application that consists of several microservices and
illustrates the use of the [OpenTracing API](http://opentracing.io).
A tutorial / walkthrough is available in the blog post:
[Take OpenTracing for a HotROD ride][hotrod-tutorial].
It can be run standalone, but requires Jaeger backend to view the traces.
### Features
- Discover architecture of the whole system via data-driven dependency
diagram.
- View request timeline and errors; understand how the app works.
- Find sources of latency and lack of concurrency.
- Highly contextualized logging.
- Use baggage propagation to:
- Diagnose inter-request contention (queueing).
- Attribute time spent in a service.
- Use open source libraries with OpenTracing integration to get
vendor-neutral instrumentation for free.
### Prerequisites
- You need Go 1.11 or higher installed on your machine to run from source.
- Requires a [running Jaeger backend](#all-in-one) to view the traces.
### Running
#### From Source
```bash
mkdir -p $GOPATH/src/github.com/jaegertracing
cd $GOPATH/src/github.com/jaegertracing
git clone git@github.com:jaegertracing/jaeger.git jaeger
cd jaeger
make install
go run ./examples/hotrod/main.go all
```
#### From docker
```bash
$ docker run --rm -it \
--link jaeger \
-p8080-8083:8080-8083 \
-e JAEGER_AGENT_HOST="jaeger" \
jaegertracing/example-hotrod:{{< currentVersion >}} \
all
```
#### From binary distribution
Run `example-hotrod(.exe)` executable from the [binary distribution archives][download]:
```bash
$ example-hotrod all
```
Then navigate to `http://localhost:8080`.
## Migrating from Zipkin
Collector service exposes Zipkin compatible REST API `/api/v1/spans` which accepts both Thrift and JSON. Also there is `/api/v2/spans` for JSON and Proto.
By default it's disabled. It can be enabled with `--collector.zipkin.http-port=9411`.
Zipkin [Thrift](https://github.com/jaegertracing/jaeger-idl/blob/master/thrift/zipkincore.thrift) IDL and Zipkin [Proto](https://github.com/jaegertracing/jaeger-idl/blob/master/proto/zipkin.proto) IDL files can be found in [jaegertracing/jaeger-idl](https://github.com/jaegertracing/jaeger-idl) repository.
They're compatible with [openzipkin/zipkin-api](https://github.com/openzipkin/zipkin-api) [Thrift](https://github.com/openzipkin/zipkin-api/blob/master/thrift/zipkinCore.thrift) and [Proto](https://github.com/openzipkin/zipkin-api/blob/master/zipkin.proto).
[hotrod-tutorial]: https://medium.com/@YuriShkuro/take-opentracing-for-a-hotrod-ride-f6e3141f7941
[download]: ../../../download/

View File

@ -1,816 +0,0 @@
---
title: Operator for Kubernetes
hasparent: true
---
# Understanding Operators
The Jaeger Operator is an implementation of a [Kubernetes Operator](https://coreos.com/operators/). Operators are pieces of software that ease the operational complexity of running another piece of software. More technically, _Operators_ are a method of packaging, deploying, and managing a Kubernetes application.
A Kubernetes application is an application that is both deployed on Kubernetes and managed using the Kubernetes APIs and `kubectl` (kubernetes) or `oc` (OKD) tooling. To be able to make the most of Kubernetes, you need a set of cohesive APIs to extend in order to service and manage your apps that run on Kubernetes. Think of Operators as the runtime that manages this type of app on Kubernetes.
# Installing the Operator
{{< info >}}
The Jaeger Operator version tracks one version of the Jaeger components (Query, Collector, Agent). When a new version of the Jaeger components is released, a new version of the operator will be released that understands how running instances of the previous version can be upgraded to the new version.
{{< /info >}}
## Installing the Operator on Kubernetes
The following instructions will create the `observability` namespace and install the Jaeger Operator.
{{< info >}}
Make sure your `kubectl` command is properly configured to talk to a valid Kubernetes cluster. If you don't have a cluster, you can create one locally using [`minikube`](https://kubernetes.io/docs/tasks/tools/install-minikube/).
{{< /info >}}
To install the operator, run:
<!--TODO - Does Kubernetes have privileged users? Needs to be run as a system:admin on OKD/OpenShift.-->
```bash
kubectl create namespace observability # <1>
kubectl create -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/crds/jaegertracing.io_jaegers_crd.yaml # <2>
kubectl create -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/service_account.yaml
kubectl create -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/role.yaml
kubectl create -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/role_binding.yaml
kubectl create -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/operator.yaml
```
<1> This creates the namespace used by default in the deployment files. If you want to install the Jaeger operator in a different namespace, you must edit the deployment files to change `observability` to the desired namespace value.
<2> This installs the "Custom Resource Definition" for the `apiVersion: jaegertracing.io/v1`
At this point, there should be a `jaeger-operator` deployment available. You can view it by running the following command:
```bash
$ kubectl get deployment jaeger-operator -n observability
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
jaeger-operator 1 1 1 1 48s
```
The operator is now ready to create Jaeger instances.
## Installing the Operator on OKD/OpenShift
<!-- TODO: Add instructions for installing via the operatorhub? -->
The instructions from the previous section also work for installing the operator on OKD or OpenShift. Make sure you are logged in as a privileged user, when you install the role based acces control (RBAC) rules, the custom resource definition, and the operator.
```bash
oc login -u <privileged user>
oc new-project observability # <1>
oc create -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/crds/jaegertracing.io_jaegers_crd.yaml # <2>
oc create -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/service_account.yaml
oc create -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/role.yaml
oc create -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/role_binding.yaml
oc create -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/operator.yaml
```
<1> This creates the namespace used by default in the deployment files. If you want to install the Jaeger operator in a different namespace, you must edit the deployment files to change `observability` to the desired namespace value.
<2> This installs the "Custom Resource Definition" for the `apiVersion: jaegertracing.io/v1`
Once the operator is installed, grant the role `jaeger-operator` to users who should be able to install individual Jaeger instances. The following example creates a role binding allowing the user `developer` to create Jaeger instances:
```bash
oc create \
rolebinding developer-jaeger-operator \
--role=jaeger-operator \
--user=developer
```
After the role is granted, switch back to a non-privileged user.
# Quick Start - Deploying the AllInOne image
The simplest possible way to create a Jaeger instance is by creating a YAML file like the following example. This will install the default AllInOne strategy, which deploys the "all-in-one" image (agent, collector, query, ingester, Jaeger UI) in a single pod, using in-memory storage by default.
{{< info >}}
This default strategy is intended for development, testing, and demo purposes, not for production.
{{< /info >}}
```yaml
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: simplest
```
The YAML file can then be used with `kubectl`:
<!-- TODO - Add OKD commands and tabs shortcode. -->
```bash
kubectl apply -f simplest.yaml
```
In a few seconds, a new in-memory all-in-one instance of Jaeger will be available, suitable for quick demos and development purposes. To check the instances that were created, list the `jaeger` objects:
```bash
$ kubectl get jaegers
NAME CREATED AT
simplest 28s
```
To get the pod name, query for the pods belonging to the `simplest` Jaeger instance:
```bash
$ kubectl get pods -l app.kubernetes.io/instance=simplest
NAME READY STATUS RESTARTS AGE
simplest-6499bb6cdd-kqx75 1/1 Running 0 2m
```
Similarly, the logs can be queried either from the pod directly using the pod name obtained from the previous example, or from all pods belonging to our instance:
```bash
$ kubectl logs -l app.kubernetes.io/instance=simplest
...
{"level":"info","ts":1535385688.0951214,"caller":"healthcheck/handler.go:133","msg":"Health Check state change","status":"ready"}
```
{{< info >}}
On OKD/OpenShift the container name must be specified.
{{< /info >}}
```bash
$ kubectl logs -l app.kubernetes.io/instance=simplest -c jaeger
...
{"level":"info","ts":1535385688.0951214,"caller":"healthcheck/handler.go:133","msg":"Health Check state change","status":"ready"}
```
# Deployment Strategies
When you create a Jaeger instance, it is associated with a strategy. The strategy is defined in the custom resource file, and determines the architecture to be used for the Jaeger backend. The default strategy is `allInOne`. The other possible values are `production` and `streaming`.
The available strategies are described in the following sections.
## AllInOne (Default) strategy
This strategy is intended for development, testing, and demo purposes.
The main backend components, agent, collector and query service, are all packaged into a single executable which is configured (by default) to use in-memory storage.
## Production strategy
The `production` strategy is intended (as the name suggests) for production environments, where long term storage of trace data is important, as well as a more scalable and highly available architecture is required. Each of the backend components is therefore separately deployed.
The agent can be injected as a sidecar on the instrumented application or as a daemonset.
The query and collector services are configured with a supported storage type - currently Cassandra or Elasticsearch. Multiple instances of each of these components can be provisioned as required for performance and resilience purposes.
The main additional requirement is to provide the details of the storage type and options, for example:
```yaml
storage:
type: elasticsearch
options:
es:
server-urls: http://elasticsearch:9200
```
## Streaming strategy
The `streaming` strategy is designed to augment the `production` strategy by providing a streaming capability that effectively sits between the collector and the backend storage (Cassandra or Elasticsearch). This provides the benefit of reducing the pressure on the backend storage, under high load situations, and enables other trace post-processing capabilities to tap into the real time span data directly from the streaming platform (Kafka).
The only additional information required is to provide the details for accessing the Kafka platform, which is configured in the `collector` component (as producer) and `ingester` component (as consumer):
```yaml
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: simple-streaming
spec:
strategy: streaming
collector:
options:
kafka: # <1>
producer:
topic: jaeger-spans
brokers: my-cluster-kafka-brokers.kafka:9092
ingester:
options:
kafka: # <1>
consumer:
topic: jaeger-spans
brokers: my-cluster-kafka-brokers.kafka:9092
ingester:
deadlockInterval: 0 # <2>
storage:
type: elasticsearch
options:
es:
server-urls: http://elasticsearch:9200
```
<1> Identifies the Kafka configuration used by the collector, to produce the messages, and the ingester to consume the messages.
<2> The deadlock interval can be disabled to avoid the ingester being terminated when no messages arrive within the default 1 minute period
{{< info >}}
A Kafka environment can be configured using [Strimzi's Kafka operator](https://strimzi.io/).
{{< /info >}}
# Understanding Custom Resource Definitions
In the Kubernetes API, a resource is an endpoint that stores a collection of API objects of a certain kind. For example, the built-in Pods resource contains a collection of Pod objects. A _Custom Resource Definition_ (CRD) object defines a new, unique object `Kind` in the cluster and lets the Kubernetes API server handle its entire lifecycle.
To create _Custom Resource_ (CR) objects, cluster administrators must first create a Custom Resource Definition (CRD). The CRDs allow cluster users to create CRs to add the new resource types into their projects. An Operator watches for custom resource objects to be created, and when it sees a custom resource being created, it creates the application based on the parameters defined in the custom resource object.
{{< info >}}
While only cluster administrators can create CRDs, developers can create the CR from an existing CRD if they have read and write permission to it.
{{< /info >}}
<!--
## Jaeger Custom Resource Parameters
TODO Create a TABLE with all the parameters, descriptions/notes, valid values, and defaults.
Figure out if we can generate the options? Can we filter them in any way?
https://github.com/jaegertracing/jaeger/issues/1537
https://github.com/jaegertracing/documentation/issues/250-->
For reference, here's how you can create a more complex all-in-one instance:
```yaml
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: my-jaeger
spec:
strategy: allInOne # <1>
allInOne:
image: jaegertracing/all-in-one:latest # <2>
options: # <3>
log-level: debug # <4>
storage:
type: memory # <5>
options: # <6>
memory: # <7>
max-traces: 100000
ingress:
enabled: false # <8>
agent:
strategy: DaemonSet # <9>
annotations:
scheduler.alpha.kubernetes.io/critical-pod: "" # <10>
```
<1> The default strategy is `allInOne`. The other possible values are `production` and `streaming`.
<2> The image to use, in a regular Docker syntax.
<3> The (non-storage related) options to be passed verbatim to the underlying binary. Refer to the Jaeger documentation and/or to the `--help` option from the related binary for all the available options.
<4> The option is a simple `key: value` map. In this case, we want the option `--log-level=debug` to be passed to the binary.
<5> The storage type to be used. By default it will be `memory`, but can be any other supported storage type (Cassandra, Elasticsearch, Kafka).
<6> All storage related options should be placed here, rather than under the 'allInOne' or other component options.
<7> Some options are namespaced and we can alternatively break them into nested objects. We could have specified `memory.max-traces: 100000`.
<8> By default, an ingress object is created for the query service. It can be disabled by setting its `enabled` option to `false`. If deploying on OpenShift, this will be represented by a Route object.
<9> By default, the operator assumes that agents are deployed as sidecars within the target pods. Specifying the strategy as "DaemonSet" changes that and makes the operator deploy the agent as DaemonSet. Note that your tracer client will probably have to override the "JAEGER_AGENT_HOST" environment variable to use the node's IP.
<10> Define annotations to be applied to all deployments (not services). These can be overridden by annotations defined on the individual components.
You can view example custom resources for different Jaeger configurations [on GitHub](https://github.com/jaegertracing/jaeger-operator/tree/master/examples).
# Configuring the Custom Resource
<!--TODO
esIndexCleaner
Spark dependencies
-->
You can use the simplest example (shown above) and create a Jaeger instance using the defaults, or you can create your own custom resource file.
## Storage options
### Cassandra storage
When the storage type is set to Cassandra, the operator will automatically create a batch job that creates the required schema for Jaeger to run. This batch job will block the Jaeger installation, so that it starts only after the schema is successfuly created. The creation of this batch job can be disabled by setting the `enabled` property to `false`:
```yaml
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: cassandra-without-create-schema
spec:
strategy: allInOne
storage:
type: cassandra
cassandraCreateSchema:
enabled: false # <1>
```
<1> Defaults to `true`
Further aspects of the batch job can be configured as well. An example with all the possible options is shown below:
```yaml
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: cassandra-with-create-schema
spec:
strategy: allInOne # <1>
storage:
type: cassandra
options: # <2>
cassandra:
servers: cassandra
keyspace: jaeger_v1_datacenter3
cassandraCreateSchema: # <3>
datacenter: "datacenter3"
mode: "test"
```
<1> The same works for `production` and `streaming`.
<2> These options are for the regular Jaeger components, like `collector` and `query`.
<3> The options for the `create-schema` job.
{{< info >}}
The default create-schema job uses `MODE=prod`, which implies a replication factor of `2`, using `NetworkTopologyStrategy` as the class, effectively meaning that at least 3 nodes are required in the Cassandra cluster. If a `SimpleStrategy` is desired, set the mode to `test`, which then sets the replication factor of `1`. Refer to the [create-schema script](https://github.com/jaegertracing/jaeger/blob/master/plugin/storage/cassandra/schema/create.sh) for more details.
{{< /info >}}
### Elasticsearch storage
Under some circumstances, the Jaeger Operator can make use of the [Elasticsearch Operator](https://github.com/openshift/elasticsearch-operator) to provision a suitable Elasticsearch cluster.
{{< warning >}}
This feature is only tested on OpenShift clusters. Spark dependencies are not supported with this feature [Issue #294](https://github.com/jaegertracing/jaeger-operator/issues/294).
{{< /warning >}}
When there are no `es.server-urls` options as part of a Jaeger `production` instance and `elasticsearch` is set as the storage type, the Jaeger Operator creates an Elasticsearch cluster via the Elasticsearch Operator by creating a Custom Resource based on the configuration provided in storage section. The Elasticsearch cluster is meant to be dedicated for a single Jaeger instance.
The self-provision of an Elasticsearch cluster can be disabled by setting the flag `--es-provision` to `false`. The default value is `auto`, which will make the Jaeger Operator query the Kubernetes cluster for its ability to handle a `Elasticsearch` custom resource. This is usually set by the Elasticsearch Operator during its installation process, so, if the Elasticsearch Operator is expected to run *after* the Jaeger Operator, the flag can be set to `true`.
{{< danger >}}
At the moment there can be only one Jaeger with self-provisioned Elasticsearch instance per namespace.
{{< /danger >}}
#### Elasticsearch index cleaner job
When using `elasticsearch` storage by default a job is created to clean old traces from it, the options for it are listed below so you can configure it to your use case
```yaml
storage:
type: elasticsearch
esIndexCleaner:
enabled: false # turn the job deployment on and off
numberOfDays: 7 # number of days to wait before deleting a record
schedule: "55 23 * * *" # cron expression for it to run
image: jaegertracing/jaeger-es-index-cleaner # image of the job
```
## Deriving dependencies
The processing to derive dependencies will collect spans from storage, analyzes links between services and store them for later presentation in the UI.
This job can only be used with the `production` strategy and storage type `cassandra` or `elasticsearch`.
```yaml
storage:
type: elasticsearch
dependencies:
enabled: true # turn the job deployment on and off
schedule: "55 23 * * *" # cron expression for it to run
sparkMaster: # spark master connection string, when empty spark runs in embedded local mode
```
The connection configuration to storage is derived from storage options.
## Auto-injecting Jaeger Agent Sidecars
The operator can inject Jaeger Agent sidecars in `Deployment` workloads, provided that the deployment has the annotation `sidecar.jaegertracing.io/inject` with a suitable value. The values can be either `"true"` (as string), or the Jaeger instance name, as returned by `kubectl get jaegers`. When `"true"` is used, there should be exactly *one* Jaeger instance for the same namespace as the deployment, otherwise, the operator can't figure out automatically which Jaeger instance to use.
The following snippet shows a simple application that will get a sidecar injected, with the Jaeger Agent pointing to the single Jaeger instance available in the same namespace:
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
annotations:
"sidecar.jaegertracing.io/inject": "true" # <1>
spec:
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: acme/myapp:myversion
```
<1> Either `"true"` (as string) or the Jaeger instance name.
A complete sample deployment is available at [`deploy/examples/business-application-injected-sidecar.yaml`](https://github.com/jaegertracing/jaeger-operator/blob/master/examples/business-application-injected-sidecar.yaml).
When the sidecar is injected, the Jaeger Agent can be accessed at its default location on `localhost`.
## Installing the Agent as DaemonSet
By default, the Operator expects the agents to be deployed as sidecars to the target applications. This is convenient for several purposes, like in a multi-tenant scenario or to have better load balancing, but there are scenarios where you might want to install the agent as a `DaemonSet`. In that case, specify the Agent's strategy to `DaemonSet`, as follows:
```yaml
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: my-jaeger
spec:
agent:
strategy: DaemonSet
```
{{< danger >}}
If you attempt to install two Jaeger instances on the same cluster with `DaemonSet` as the strategy, only *one* will end up deploying a `DaemonSet`, as the agent is required to bind to well-known ports on the node. Because of that, the second daemon set will fail to bind to those ports.
{{< /danger >}}
Your tracer client will then most likely need to be told where the agent is located. This is usually done by setting the environment variable `JAEGER_AGENT_HOST` to the value of the Kubernetes node's IP, for example:
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: acme/myapp:myversion
env:
- name: JAEGER_AGENT_HOST
valueFrom:
fieldRef:
fieldPath: status.hostIP
```
### OpenShift
In OpenShift, a `HostPort` can only be set when a special security context is set. A separate service account can be used by the Jaeger Agent with the permission to bind to `HostPort`, as follows:
```bash
oc create -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/examples/openshift/hostport-scc-daemonset.yaml # <1>
oc new-project myappnamespace
oc create -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/examples/openshift/service_account_jaeger-agent-daemonset.yaml # <2>
oc adm policy add-scc-to-user daemonset-with-hostport -z jaeger-agent-daemonset # <3>
oc apply -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/examples/openshift/agent-as-daemonset.yaml # <4>
```
<1> The `SecurityContextConstraints` with the `allowHostPorts` policy
<2> The `ServiceAccount` to be used by the Jaeger Agent
<3> Adds the security policy to the service account
<4> Creates the Jaeger Instance using the `serviceAccount` created in the steps above
{{< warning >}}
Without such a policy, errors like the following will prevent a `DaemonSet` to be created: `Warning FailedCreate 4s (x14 over 45s) daemonset-controller Error creating: pods "agent-as-daemonset-agent-daemonset-" is forbidden: unable to validate against any security context constraint: [spec.containers[0].securityContext.containers[0].hostPort: Invalid value: 5775: Host ports are not allowed to be used`
{{< /warning >}}
After a few seconds, the `DaemonSet` should be up and running:
```bash
$ oc get daemonset agent-as-daemonset-agent-daemonset
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE
agent-as-daemonset-agent-daemonset 1 1 1 1 1
```
## Secrets Support
The Operator supports passing secrets to the Collector, Query and All-In-One deployments. This can be used for example, to pass credentials (username/password) to access the underlying storage backend (for example: Elasticsearch).
The secrets are available as environment variables in the (Collector/Query/All-In-One) nodes.
```yaml
storage:
type: elasticsearch
options:
es:
server-urls: http://elasticsearch:9200
secretName: jaeger-secrets
```
The secret itself would be managed outside of the `jaeger-operator` custom resource.
## Configuring the UI
Information on various configuration options for the UI can be found [here](../frontend-ui/#configuration), defined in json format.
To apply UI configuration changes within the Custom Resource, the same information can be included in yaml format as shown below:
```yaml
ui:
options:
dependencies:
menuEnabled: false
tracking:
gaID: UA-000000-2
menu:
- label: "About Jaeger"
items:
- label: "Documentation"
url: "https://www.jaegertracing.io/docs/latest"
linkPatterns:
- type: "logs"
key: "customer_id"
url: /search?limit=20&lookback=1h&service=frontend&tags=%7B%22customer_id%22%3A%22#{customer_id}%22%7D
text: "Search for other traces for customer_id=#{customer_id}"
```
## Defining Sampling Strategies
{{< info >}}
This is not relevant if a trace was started by the Istio proxy as the sampling decision is made there. And the Jaeger sampling decisions are only relevant when you are using the Jaeger tracer (client).
{{< /info >}}
The operator can be used to define sampling strategies that will be supplied to tracers that have been configured to use a remote sampler:
```yaml
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: with-sampling
spec:
strategy: allInOne
sampling:
options:
default_strategy:
type: probabilistic
param: 0.5
```
This example defines a default sampling strategy that is probabilistic, with a 50% chance of the trace instances being sampled.
Refer to the Jaeger documentation on [Collector Sampling Configuration](https://www.jaegertracing.io/docs/latest/sampling/#collector-sampling-configuration) to see how service and endpoint sampling can be configured. The JSON representation described in that documentation can be used in the operator by converting to YAML.
## Finer grained configuration
The custom resource can be used to define finer grained Kubernetes configuration applied to all Jaeger components or at the individual component level.
When a common definition (for all Jaeger components) is required, it is defined under the `spec` node. When the definition relates to an individual component, it is placed under the `spec/<component>` node.
The types of supported configuration include:
* [affinity](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity) to determine which nodes a pod can be allocated to
* [annotations](https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/)
* [labels](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/)
* [resources](https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container) to limit cpu and memory
* [tolerations](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) in conjunction with `taints` to enable pods to avoid being repelled from a node
* [volumes](https://kubernetes.io/docs/concepts/storage/volumes/) and volume mounts
* [serviceAccount](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/) to run each component with separate identity
* [securityContext](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/) to define privileges of running components
```yaml
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: simple-prod
spec:
strategy: production
storage:
type: elasticsearch
options:
es:
server-urls: http://elasticsearch:9200
annotations:
key1: value1
labels:
key2: value2
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/e2e-az-name
operator: In
values:
- e2e-az1
- e2e-az2
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: another-node-label-key
operator: In
values:
- another-node-label-value
tolerations:
- key: "key1"
operator: "Equal"
value: "value1"
effect: "NoSchedule"
- key: "key1"
operator: "Equal"
value: "value1"
effect: "NoExecute"
serviceAccount: nameOfServiceAccount
securityContext:
runAsUser: 1000
volumeMounts:
- name: config-vol
mountPath: /etc/config
volumes:
- name: config-vol
configMap:
name: log-config
items:
- key: log_level
path: log_level
```
# Accessing the Jaeger Console (UI)
<!-- TODO Add tabs shortcode -->
## Kubernetes
The operator creates a Kubernetes [`ingress`](https://kubernetes.io/docs/concepts/services-networking/ingress/) route, which is the Kubernetes' standard for exposing a service to the outside world, but by default it does not come with Ingress providers.
Check the [Kubernetes documentation](https://kubernetes.github.io/ingress-nginx/deploy/#verify-installation) for the most appropriate way to achieve an Ingress provider for your platform. The following command enables the Ingress provider on `minikube`:
```bash
minikube addons enable ingress
```
Once Ingress is enabled, the address for the Jaeger console can be found by querying the Ingress object:
```bash
$ kubectl get ingress
NAME HOSTS ADDRESS PORTS AGE
simplest-query * 192.168.122.34 80 3m
```
In this example, the Jaeger UI is available at http://192.168.122.34.
## OpenShift
When the Operator is running on OpenShift, the Operator will automatically create a `Route` object for the query services. Use the following command to check the hostname/port:
```bash
oc get routes
```
{{< info >}}
Make sure to use `https` with the hostname/port you get from the command above, otherwise you'll see a message like: "Application is not available".
{{< /info >}}
By default, the Jaeger UI is protected with OpenShift's OAuth service and any valid user is able to login. To disable this feature and leave the Jaeger UI unsecured, set the Ingress property `security` to `none` in the custom resource file:
```yaml
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: disable-oauth-proxy
spec:
ingress:
security: none
```
Custom `SAR` and `Delegate URL` values can be specified as part of the `.Spec.Ingress.OpenShift.SAR` and `.Spec.Ingress.Openshift.DelegateURLs`, as follows:
```yaml
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: custom-sar-oauth-proxy
spec:
ingress:
openshift:
sar: '{"namespace": "default", "resource": "pods", "verb": "get"}'
delegateUrls: '{"/":{"namespace": "default", "resource": "pods", "verb": "get"}}'
```
When the `delegateUrls` is set, the Jaeger Operator needs to create a new `ClusterRoleBinding` between the service account used by the UI Proxy (`{InstanceName}-ui-proxy`) and the role `system:auth-delegator`, as required by the OpenShift OAuth Proxy. Because of that, the service account used by the operator itself needs to have the same cluster role binding. To accomplish that, a `ClusterRoleBinding` such as the following has to be created:
```yaml
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: jaeger-operator-with-auth-delegator
namespace: observability
subjects:
- kind: ServiceAccount
name: jaeger-operator
namespace: observability
roleRef:
kind: ClusterRole
name: system:auth-delegator
apiGroup: rbac.authorization.k8s.io
```
Cluster administrators not comfortable in letting users deploy Jaeger instances with this cluster role are free to not add this cluster role to the operator's service account. In that case, the Operator will auto-detect that the required permissions are missing and will log a message similar to: `the requested instance specifies the delegateUrls option for the OAuth Proxy, but this operator cannot assign the proper cluster role to it (system:auth-delegator). Create a cluster role binding between the operator's service account and the cluster role 'system:auth-delegator' in order to allow instances to use 'delegateUrls'`.
The Jaeger Operator also supports authentication using `htpasswd` files via the OpenShift OAuth Proxy. To make use of that, specify the `htpasswdFile` option within the OpenShift-specific entries, pointing to the file `htpasswd` file location in the local disk. The `htpasswd` file can be created using the `htpasswd` utility:
```console
$ htpasswd -cs /tmp/htpasswd jdoe
New password:
Re-type new password:
Adding password for user jdoe
```
This file can then be used as the input for the `kubectl create secret` command:
```console
$ kubectl create secret generic htpasswd --from-file=htpasswd=/tmp/htpasswd
secret/htpasswd created
```
Once the secret is created, it can be specified in the Jaeger CR as a volume/volume mount:
```yaml
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: with-htpasswd
spec:
ingress:
openshift:
sar: '{"namespace": "default", "resource": "pods", "verb": "get"}'
htpasswdFile: /usr/local/data/htpasswd
volumeMounts:
- name: htpasswd-volume
mountPath: /usr/local/data
volumes:
- name: htpasswd-volume
secret:
secretName: htpasswd
```
# Upgrading the Operator and its managed instances
Each version of the Jaeger Operator follows one Jaeger version. Whenever a new version of the Jaeger Operator is installed, all the Jaeger instances managed by the operator will be upgraded to the Operator's supported version. For example, an instance named `simplest` that was created with Jaeger Operator 1.12.0 will be running Jaeger 1.12.0. Once the Jaeger Operator is upgraded to 1.13.0, the instance `simplest` will be upgraded to the version 1.13.0, following the official upgrade instructions from the Jaeger project.
The Jaeger Operator can be upgraded manually by changing the deployment (`kubectl edit deployment jaeger-operator`), or via specialized tools such as the [Operator Lifecycle Manager (OLM)](https://github.com/operator-framework/operator-lifecycle-manager).
# Updating a Jaeger instance (experimental)
A Jaeger instance can be updated by changing the `CustomResource`, either via `kubectl edit jaeger simplest`, where `simplest` is the Jaeger's instance name, or by applying the updated YAML file via `kubectl apply -f simplest.yaml`.
{{< danger >}}
The name of the Jaeger instance cannot be updated, as it is part of the identifying information for the resource.
{{< /danger >}}
Simpler changes such as changing the replica sizes can be applied without much concern, whereas changes to the strategy should be watched closely and might potentially cause an outage for individual components (collector/query/agent).
While changing the backing storage is supported, migration of the data is not.
# Removing a Jaeger instance
<!-- TODO Add OKD/OpenShift commands and tabs shortcode-->
To remove an instance, use the `delete` command with the custom resource file used when you created the instance:
```bash
kubectl delete -f simplest.yaml
```
Alternatively, you can remove a Jaeger instance by running:
```bash
kubectl delete jaeger simplest
```
{{< info >}}
Deleting the instance will not remove the data from any permanent storage used with this instance. Data from in-memory instances, however, will be lost.
{{< /info >}}
# Monitoring the operator
The Jaeger Operator starts a Prometheus-compatible endpoint on `0.0.0.0:8383/metrics` with internal metrics that can be used to monitor the process.
{{< info >}}
The Jaeger Operator does not yet publish its own metrics. Rather, it makes available metrics reported by the components it uses, such as the Operator SDK.
{{< /info >}}
# Uninstalling the operator
<!-- TODO Add OKD/OpenShift commands and tabs shortcode -->
To uninstall the operator, run the following commands:
```bash
kubectl delete -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/operator.yaml
kubectl delete -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/role_binding.yaml
kubectl delete -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/role.yaml
kubectl delete -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/service_account.yaml
kubectl delete -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/crds/jaegertracing.io_jaegers_crd.yaml
```

View File

@ -1,95 +0,0 @@
---
title: Performance Tuning Guide
description: Tweaking your Jaeger instance to achieve a better performance
weight: 10
---
Jaeger was built from day 1 to be able to ingest huge amounts of data in a resilient way. To better utilize resources that might cause delays, such as storage or network communications, Jaeger buffers and batches data. When more spans are generated than Jaeger is able to safely process, spans might get dropped. However, the defaults might not fit all scenarios: for instance, Agents running as a sidecar might have more memory constraints than Agents running as a daemon in bare metal.
## Deployment considerations
Although performance tuning the individual components is important, the way Jaeger is deployed can be decisive in obtaining optimal performance.
### Scale the Collector up and down
Use the auto-scaling capabilities of your platform: the Collector is nearly horizontally scalable so that more instances can be added and removed on-demand. A good way to scale up and down is by checking the `jaeger_collector_queue_length` metric: add instances when the length is higher than 50% of the maximum size for extended periods of time. Another metric that can be taken into consideration is `jaeger_collector_in_queue_latency_bucket`, which is a histogram indicating how long spans have been waiting in the queue before a worker picked it up. When the queue latency gets higher over time, its a good indication to increase the number of the workers, or to improve the storage performance.
Adding Collector instances is recommended when your platform provides auto-scaling capabilities, or when it's easier to start/stop Collector instances than changing existing, running instances. Scaling horizontally is also indicated when the CPU usage should be spread across nodes.
### Make sure the storage can keep up
Each span is written to the storage by the Collector using one worker, blocking it until the span has been stored. When the storage is too slow, the number of workers blocked by the storage might be too high, causing spans to be dropped. To help diagnose this situation, the histogram `jaeger_collector_save_latency_bucket` can be analyzed. Ideally, the latency should remain the same over time. When the histogram shows that most spans are taking longer and longer over time, its a good indication that your storage might need some attention.
### Place the Agents close to your applications
The Agent is meant to be placed on the same host as the instrumented application, in order to avoid UDP packet loss over the network. This is typically accomplished by having one Agent per bare metal host for traditional applications, or as a sidecar in container environments like Kubernetes, as this helps spread the load handled by Agents with the additional advantage of allowing each Agent to be tweaked individually, according to the applications needs and importance.
### Consider using Apache Kafka as intermediate buffer
Jaeger [can use Apache Kafka](../architecture/) as a buffer between the Collector and the actual backing storage (Elasticsearch, Apache Cassandra). This is ideal for cases where the traffic spikes are relatively frequent (prime time traffic) but the storage can eventually catch up once the traffic normalizes. For that, the `SPAN_STORAGE_TYPE` environment variable should be set to `kafka` in the Collector and the Jaeger Ingester component can be used, reading data from Kafka and writing it to the storage.
In addition to the performance aspects, having spans written to Kafka is useful for building real time data pipeline for aggregations and feature extraction from traces.
## Client (Tracer) settings
The Jaeger Clients are built to have minimal effect to the instrumented application. As such, it has conservative defaults that might not be suitable for all cases. Note that Jaeger Clients can be configured programmatically or via [environment variables](../client-features/).
### Adjust the sampling configuration
Together, the `JAEGER_SAMPLER_TYPE` and `JAEGER_SAMPLER_PARAM` specify how often traces should be "sampled", ie, recorded and sent to the Jaeger backend. For applications generating a large number of spans, setting the sampling type to `probabilistic` and the value to `0.001` (the default) will cause traces to be reported with a 1/1000th chance. Note that the sampling decision is made at the root span and propagated down to all child spans.
For applications with low to medium traffic, setting the sampling type to `const` and value to `1` will cause all spans to be reported. Similarly, tracing can be disabled by setting the value to `0`, while context propagation will continue to work.
Some Clients support the setting `JAEGER_DISABLED` to completely disable the Jaeger Tracer. This is recommended only if the Tracer is behaving in a way that causes problems to the instrumented application, as it will not propagate the context to the downstream services.
{{< info >}}
We recommend to set your clients to use the [`remote` sampling strategy](../sampling/#collector-sampling-configuration), so that admins can centrally set the concrete sampling strategy for each service.
{{< /info >}}
### Increase in-memory queue size
Most of the Jaeger clients, such as the Java, Go, and C# clients, buffer spans in memory before sending them to the Jaeger Agent/Collector. The maximum size of this buffer is defined by the environment variable `JAEGER_REPORTER_MAX_QUEUE_SIZE` (default value: about `100` spans): the larger the size, the higher the potential memory consumption. When the instrumented application is generating a large number of spans, its possible that the queue will be full causing the Client to discard the new spans (metric `jaeger_tracer_reporter_spans_total{result="dropped",}`).
In most common scenarios, the queue will be close to empty (metric: `jaeger_tracer_reporter_queue_length`), as spans are flushed to the Agent or Collector at regular intervals or when a certain size of the batch is reached. The detailed behavior of this queue is described in this [GitHub issue](https://github.com/jaegertracing/jaeger-client-java/issues/607).
### Modify the batched spans flush interval
The Java, Go, NodeJS, Python and C# Clients allow the customization of the flush interval (default value: `1000` milliseconds, or 1 second) used by the reporters, such as the `RemoteReporter`, to trigger a `flush` operation, sending all in-memory spans to the Agent or Collector. The lower the flush interval is set to, the more frequent the flush operations happen. As most reporters will wait until enough data is in the queue, this setting will force a flush operation at periodic intervals, so that spans are sent to the backend in a timely fashion.
When the instrumented application is generating a large number of spans and the Agent/Collector is close to the application, the networking overhead might be low, justifying a higher number of flush operations. When the `HttpSender` is being used and the Collector is not close enough to the application, the networking overhead might be too high so that a higher value for this property makes sense.
## Agent settings
Jaeger Agents receive data from Clients, sending them in batches to the Collector. When not properly configured, it might end up discarding data even if the host machine has plenty of resources.
### Adjust server queue sizes
The set of “server queue size” properties ( `processor.jaeger-binary.server-queue-size`, `processor.jaeger-compact.server-queue-size`, `processor.zipkin-compact.server-queue-size`) indicate the maximum number of span batches that the Agent can accept and store in memory. Its safe to assume that `jaeger-compact` is the most important processor in your Agent setup, as its the only one available in most Clients, such as the Java and Go Clients.
The default value for each queue is `1000` span batches. Given that each span batch has up to 64KiB worth of spans, each queue can hold up to 64MiB worth of spans.
In typical scenarios, the queue will be close to empty (metric `jaeger_agent_thrift_udp_server_queue_size`) as span batches should be quickly picked up and processed by a worker. However, sudden spikes in the number of span batches submitted by Clients might occur, causing the batches to be queued. When the queue is full, the older batches are overridden causing spans to be discarded (metric `jaeger_agent_thrift_udp_server_packets_dropped_total`).
### Adjust processor workers
The set of “processor workers” properties ( `processor.jaeger-binary.workers`, `processor.jaeger-compact.workers`, `processor.zipkin-compact.workers`) indicate the number of parallel span batch processors to start. Each worker type has a default size of `10`. In general, span batches are processed as soon as they are placed in the server queue and will block a worker until the whole packet is sent to the Collector. For Agents processing data from multiple Clients, the number of workers should be increased. Given that the cost of each worker is low, a good rule of thumb is 10 workers per Client with moderate traffic: given that each span batch might contain up to 64KiB worth of spans, it means that 10 workers are able to send about 640KiB concurrently to a Collector.
## Collector settings
The Collector receives data from Clients and Agents. When not properly configured, it might process less data than what would be possible on the same host, or it might overload the host by consuming more memory than permitted.
### Adjust queue size
Similar to the Agent, the Collector is able to receive spans and place them in an internal queue for processing. This allows the Collector to return immediately to the Client/Agent instead of waiting for the span to make its way to the storage.
The setting `collector.queue-size` (default: `2000`) dictates how many spans the queue should support. In the typical scenario, the queue will be close to empty, as enough workers should exist picking up spans from the queue and sending them to the storage. When the number of items in the queue (metric `jaeger_collector_queue_length`) is permanently high, its an indication that either the number of workers should be increased or that the storage cannot keep up with the volume of data that its receiving. When the queue is full, the older items in the queue are overridden, causing spans to be discarded (metric `jaeger_collector_spans_dropped_total`).
{{< warning >}}
The queue size for the Agent is about _span batches_, whereas the queue size for the Collector is about _individual spans_.
{{< /warning >}}
Given that the queue size should be close to empty most of the time, this setting should be as high as the available memory for the Collector, to provide maximum protection against sudden traffic spikes. However, if your storage layer is under-provisioned and cannot keep up, even a large queue will quickly fill up and start dropping data.
### Adjust processor workers
Items from the span queue in the Collector are picked up by workers. Each worker picks one span from the queue and persists it to the storage. The number of workers can be specified by the setting `collector.num-workers` (default: `50`) and should be as high as needed to keep the queue close to zero. The general rule is: the faster the backing storage, the lower the number of workers can be. Given that workers are relatively cheap, this number can be increased at will. As a general rule, one worker per 50 items in the queue should be sufficient when the storage is fast. With a `collector.queue-size` of `2000`, having about `40` workers should be sufficient. For slower storage mechanisms, this ratio should be adjusted accordingly, having more workers per queue item.

View File

@ -1,66 +0,0 @@
---
title: Sampling
hasparent: true
---
Jaeger libraries implement consistent upfront (or head-based) sampling. For example, assume we have a simple call graph where service A calls service B, and B calls service C: `A -> B -> C`. When service A receives a request that contains no tracing information, Jaeger tracer will start a new {{< tip "trace" >}}, assign it a random trace ID, and make a sampling decision based on the currently installed sampling strategy. The sampling decision will be propagated with the requests to B and to C, so those services will not be making the sampling decision again but instead will respect the decision made by the top service A. This approach guarantees that if a trace is sampled, all its {{< tip "spans" "span" >}} will be recorded in the backend. If each service was making its own sampling decision we would rarely get complete traces in the backend.
## Client Sampling Configuration
When using configuration object to instantiate the tracer, the type of sampling can be selected via `sampler.type` and `sampler.param` properties. Jaeger libraries support the following samplers:
* **Constant** (`sampler.type=const`) sampler always makes the same decision for all traces. It either samples all traces (`sampler.param=1`) or none of them (`sampler.param=0`).
* **Probabilistic** (`sampler.type=probabilistic`) sampler makes a random sampling decision with the probability of sampling equal to the value of `sampler.param` property. For example, with `sampler.param=0.1` approximately 1 in 10 traces will be sampled.
* **Rate Limiting** (`sampler.type=ratelimiting`) sampler uses a leaky bucket rate limiter to ensure that traces are sampled with a certain constant rate. For example, when `sampler.param=2.0` it will sample requests with the rate of 2 traces per second.
* **Remote** (`sampler.type=remote`, which is also the default) sampler consults Jaeger agent for the appropriate sampling strategy to use in the current service. This allows controlling the sampling strategies in the services from a [central configuration](#collector-sampling-configuration) in Jaeger backend, or even dynamically (see [Adaptive Sampling](https://github.com/jaegertracing/jaeger/issues/365)).
### Adaptive Sampler
Adaptive sampler is a composite sampler that combines two functions:
* It makes sampling decisions on a per-operation basis, i.e. based on {{< tip "span" >}} operation name. This is especially useful in the API services whose endpoints may have very different traffic volumes and using a single probabilistic sampler for the whole service might starve (never sample) some of the low QPS endpoints.
* It supports a minimum guaranteed rate of sampling, such as always allowing up to N {{< tip "traces" "trace" >}} per seconds and then sampling anything above that with a certain probability (everything is per-operation, not per-service).
Per-operation parameters can be configured statically or pulled periodically from Jaeger backend with the help of Remote sampler. Adaptive sampler is designed to work with the upcoming [Adaptive Sampling](https://github.com/jaegertracing/jaeger/issues/365) feature of the Jaeger backend.
## Collector Sampling Configuration
Collectors can be instantiated with static sampling strategies (which are propagated to the respective service if configured with Remote sampler) via the `--sampling.strategies-file` option. This option requires a path to a json file which have the sampling strategies defined.
Example `strategies.json`
```json
{
"service_strategies": [
{
"service": "foo",
"type": "probabilistic",
"param": 0.8,
"operation_strategies": [
{
"operation": "op1",
"type": "probabilistic",
"param": 0.2
},
{
"operation": "op2",
"type": "probabilistic",
"param": 0.4
}
]
},
{
"service": "bar",
"type": "ratelimiting",
"param": 5
}
],
"default_strategy": {
"type": "probabilistic",
"param": 0.5
}
}
```
`service_strategies` defines service specific sampling strategies and `operation_strategies` defines operation specific sampling strategies. There are 2 types of strategies possible: `probabilistic` and `ratelimiting` which are described [above](#client-sampling-configuration) (NOTE: `ratelimiting` is not supported for `operation_strategies`). `default_strategy` defines the catch-all sampling strategy that is propagated if the service is not included as part of `service_strategies`.
In the above example, all service `foo` operations are sampled probabilistically with a probability of 0.8 except `op1` and `op2` which are probabilistically sampled with a probability of 0.2 and 0.4 respectively. All operations for service `bar` are ratelimited at 5 traces per second. Any other service is probabilistically sampled with a probability of 0.5.

View File

@ -1,70 +0,0 @@
---
title: Introduction
weight: 1
children:
- title: Features
url: features
---
Welcome to Jaeger's documentation portal! Below, you'll find information for beginners and experienced Jaeger users.
If you can't find what you are looking for, or have an issue not covered here, we'd love to [hear from you](/get-in-touch).
## About
Jaeger, inspired by [Dapper][dapper] and [OpenZipkin](http://zipkin.io),
is a distributed tracing system released as open source by [Uber Technologies][ubeross].
It is used for monitoring and troubleshooting microservices-based distributed systems, including:
* Distributed context propagation
* Distributed transaction monitoring
* Root cause analysis
* Service dependency analysis
* Performance / latency optimization
Uber published a blog post, [Evolving Distributed Tracing at Uber](https://eng.uber.com/distributed-tracing/), where they explain the history and reasons for the architectural choices made in Jaeger. [Yuri Shkuro](https://shkuro.com), creator of Jaeger, also published a book [Mastering Distributed Tracing](https://shkuro.com/books/2019-mastering-distributed-tracing/) that covers in-depth many aspects of Jaeger design and operation, as well as distributed tracing in general.
## Features
* [OpenTracing](http://opentracing.io/) compatible data model and instrumentation libraries
* in [Go](https://github.com/jaegertracing/jaeger-client-go), [Java](https://github.com/jaegertracing/jaeger-client-java), [Node](https://github.com/jaegertracing/jaeger-client-node), [Python](https://github.com/jaegertracing/jaeger-client-python)
and [C++](https://github.com/jaegertracing/cpp-client)
* Uses consistent upfront sampling with individual per service/endpoint probabilities
* Multiple storage backends: Cassandra, Elasticsearch, memory.
* Adaptive sampling (coming soon)
* Post-collection data processing pipeline (coming soon)
See [Features](./features/) page for more details.
## Technical Specs
* Backend components implemented in Go
* React/Javascript UI
* Supported storage backends:
* [Cassandra 3.4+](./deployment/#cassandra)
* [Elasticsearch 5.x, 6.x, 7.x](./deployment/#elasticsearch)
* [Kafka](./deployment/#kafka)
* memory storage
## Quick Start
See [running a docker all in one image](getting-started#all-in-one).
## Screenshots
### Traces View
[![Traces View](/img/traces-ss.png)](/img/traces-ss.png)
### Trace Detail View
[![Detail View](/img/trace-detail-ss.png)](/img/trace-detail-ss.png)
## Related links
- [Evolving Distributed tracing At Uber Engineering](https://eng.uber.com/distributed-tracing/)
- [Mastering Distributed Tracing](https://shkuro.com/books/2019-mastering-distributed-tracing/)
- [Tracing HTTP request latency in Go with OpenTracing](https://medium.com/opentracing/tracing-http-request-latency-in-go-with-opentracing-7cc1282a100a)
- [Distributed Tracing with Jaeger & Prometheus on Kubernetes](https://blog.openshift.com/openshift-commons-briefing-82-distributed-tracing-with-jaeger-prometheus-on-kubernetes/)
- [Using Jaeger with Istio](https://istio.io/docs/tasks/telemetry/distributed-tracing.html)
- [Using Jaeger with Envoy](https://www.envoyproxy.io/docs/envoy/latest/start/sandboxes/jaeger_tracing.html)
[dapper]: https://research.google.com/pubs/pub36356.html
[ubeross]: http://uber.github.io

View File

@ -1,87 +0,0 @@
---
title: APIs
hasparent: true
---
Jaeger components implement various APIs for saving or retrieving trace data.
The following labels are used to describe API compatibility guarantees.
* **stable** - the API guarantees backwards compatibility. If breaking changes are going to be made in the future, they will result in a new API version, e.g. `/api/v2` URL prefix or a different namespace in the IDL.
* **internal** - the APIs intended for internal communications between Jaeger components and not recommended for use by external components.
* **deprecated** - the APIs that are only maintained for legacy reasons and will be phased out in the future.
## Span reporting APIs
Agent and Collector are the two components of the Jaeger backend that can receive spans. At this time they support two sets of non-overlapping APIs.
### Thrift over UDP (stable)
The Agent can only receive spans over UDP in Thrift format. The primary API is a UDP packet that contains a Thrift-encoded `Batch` struct defined in [jaeger.thrift][jaeger.thrift] IDL file, located in the [jaeger-idl][jaeger-idl] repository. Most Jaeger Clients use Thrift's `compact` encoding, however some client libraries do not support it (notably, Node.js) and use Thrift's `binary` encoding (sent to a different UDP port). The Agent's API is defined by [agent.thrift][agent.thrift] IDL file.
For legacy reasons, the Agent also accepts spans in Zipkin format, however, only very old versions of Jaeger clients can send data in that format and it is officially deprecated.
### Protobuf via gRPC (stable)
In a typical Jaeger deployment, Agents receive spans from Clients and forward them to Collectors. Since Jaeger version 1.11 the official and recommended protocol between Agents and Collectors is gRPC with Protobuf.
The Protobuf IDL [collector.proto][collector.proto] is currently located in the main Jaeger repository, under [model/proto/api_v2][collector.proto]. In the future it will be moved to [jaeger-idl][jaeger-idl] repository ([jaeger-idl/issues/55](https://github.com/jaegertracing/jaeger-idl/issues/55)).
### Thrift over HTTP (stable)
In some cases it is not feasible to deploy Jaeger Agent next to the application, for example, when the application code is running as AWS Lambda function. In these scenarios the Jaeger Clients can be configured to submit spans directly to the Collectors over HTTP/HTTPS.
The same [jaeger.thrift][jaeger.thrift] payload can be submitted in HTTP POST request to `/api/traces` endpoint, for example, `https://jaeger-collector:14268/api/traces`. The `Batch` struct needs to be encoded using Thrift's `binary` encoding, and the HTTP request should specify the content type header:
```
Content-Type: application/vnd.apache.thrift.binary
```
### JSON over HTTP (n/a)
There is no official Jaeger JSON format that can be accepted by the collector. In the future the Protobuf-generated JSON may be supported.
### Thrift via TChannel (deprecated)
Agent and Collector can communicate using TChannel protocol. This protocol is generally not supported by the routing infrastructure and has been deprecated. It will be eventually removed from Jaeger.
### Zipkin Formats (stable)
Jaeger Collector can also accept spans in several Zipkin data format, namely JSON v1/v2 and Thrift. The Collector needs to be configured to enable Zipkin HTTP server, e.g. on port 9411 used by Zipkin collectors. The server enables two endpoints that expect POST requests:
* `/api/v1/spans` for submitting spans in Zipkin JSON v1 or Zipkin Thrift format.
* `/api/v2/spans` for submitting spans in Zipkin JSON v2.
## Trace retrieval APIs
Traces saved in the storage can be retrieved by calling Jaeger Query Service.
### gRPC/Protobuf (stable)
The recommended way for programmatically retrieving traces and other data is via gRPC endpoint defined in [query.proto][query.proto] IDL file (located in the main Jaeger repository, similar to [collector.proto][collector.proto]).
### HTTP JSON (internal)
Jaeger UI communicates with Jaeger Query Service via JSON API. For example, a trace can be retrieved via GET request to `https://jaeger-query:16686/api/traces/{trace-id-hex-string}`. This JSON API is intentionally undocumented and subject to change.
## Clients configuration (internal)
Client libraries not only submit finished spans to Jaeger backend, but also periodically poll the Agents for various configurations, such as sampling strategies. The schema for the payload is defined by [sampling.thrift][sampling.thrift], encoded as JSON using Thrift's built-in JSON generation capabilities.
## Service dependencies graph (internal)
Can be retrieved from Query Service at `/api/dependencies` endpoint. The GET request expects two parameters:
* `endTs` (number of milliseconds since epoch) - the end of the time interval
* `lookback` (in milliseconds) - the length the time interval (i.e. start-time + lookback = end-time).
The returned JSON is a list of edges represented as tuples `(caller, callee, count)`.
For programmatic access to service graph, the recommended API is gRPC/Protobuf described above.
[jaeger-idl]: https://github.com/jaegertracing/jaeger-idl/
[jaeger.thrift]: https://github.com/jaegertracing/jaeger-idl/blob/master/thrift/jaeger.thrift
[agent.thrift]: https://github.com/jaegertracing/jaeger-idl/blob/master/thrift/agent.thrift
[sampling.thrift]: https://github.com/jaegertracing/jaeger-idl/blob/master/thrift/sampling.thrift
[collector.proto]: https://github.com/jaegertracing/jaeger/blob/master/model/proto/api_v2/collector.proto
[query.proto]: https://github.com/jaegertracing/jaeger/blob/master/model/proto/api_v2/query.proto

View File

@ -1,13 +0,0 @@
---
title: CLI flags
widescreen: true
hasparent: true
---
This is auto-generated documentation for CLI flags supported by Jaeger binaries.
* CLI flags for some binaries change depending on the `SPAN_STORAGE_TYPE` environment variable. Relevant variations are included below.
* Some binaries support _commands_ (mostly informational), such as `env`, `docs`, and `version`. These commands are not included here.
* All parameters can be also provided via environment variables, by changing all letters to upper-case and replacing all punctuation characters with underscore `_`. For example, the value for the flag `--cassandra.connections-per-host` can be provided via `CASSANDRA_CONNECTIONS_PER_HOST` environment variable.
{{< cli/tools-list >}}

View File

@ -1,469 +0,0 @@
---
title: Deployment
weight: 4
children:
- title: Operator for Kubernetes
navtitle: Kubernetes
url: operator
- title: Frontend/UI
url: frontend-ui
- title: Windows
url: windows
- title: CLI Flags
url: cli
---
The main Jaeger backend components are released as Docker images on Docker Hub:
Component | Repository
--------------------- | ---
**jaeger-agent** | [hub.docker.com/r/jaegertracing/jaeger-agent/](https://hub.docker.com/r/jaegertracing/jaeger-agent/)
**jaeger-collector** | [hub.docker.com/r/jaegertracing/jaeger-collector/](https://hub.docker.com/r/jaegertracing/jaeger-collector/)
**jaeger-query** | [hub.docker.com/r/jaegertracing/jaeger-query/](https://hub.docker.com/r/jaegertracing/jaeger-query/)
**jaeger-ingester** | [hub.docker.com/r/jaegertracing/jaeger-ingester/](https://hub.docker.com/r/jaegertracing/jaeger-ingester/)
There are orchestration templates for running Jaeger with:
* Kubernetes: [github.com/jaegertracing/jaeger-kubernetes](https://github.com/jaegertracing/jaeger-kubernetes),
* OpenShift: [github.com/jaegertracing/jaeger-openshift](https://github.com/jaegertracing/jaeger-openshift).
## Configuration Options
Jaeger binaries can be configured in a number of ways (in the order of decreasing priority):
* command line arguments,
* environment variables,
* configuration files in JSON, TOML, YAML, HCL, or Java properties formats.
To see the complete list of options, run the binary with `help` command. Options that are specific to a certain storage backend are only listed if the storage type is selected. For example, to see all available options in the Collector with Cassandra storage:
```sh
$ docker run --rm \
-e SPAN_STORAGE_TYPE=cassandra \
jaegertracing/jaeger-collector:{{< currentVersion >}} \
help
```
In order to provide configuration parameters via environment variables, find the respective command line option and convert its name to UPPER_SNAKE_CASE, for example:
Command line option | Environment variable
-----------------------------------|-------------------------------
`--cassandra.connections-per-host` | `CASSANDRA_CONNECTIONS_PER_HOST`
`--metrics-backend` | `METRICS_BACKEND`
## Agent
Jaeger client libraries expect **jaeger-agent** process to run locally on each host.
The agent exposes the following ports:
Port | Protocol | Function
----- | ------- | ---
6831 | UDP | accept [jaeger.thrift][jaeger-thrift] in `compact` Thrift protocol used by most current Jaeger clients
6832 | UDP | accept [jaeger.thrift][jaeger-thrift] in `binary` Thrift protocol used by Node.js Jaeger client (because [thriftrw][thriftrw] npm package does not support `compact` protocol)
5778 | HTTP | serve configs, sampling strategies
5775 | UDP | accept [zipkin.thrift][zipkin-thrift] in `compact` Thrift protocol (deprecated; only used by very old Jaeger clients, circa 2016)
14271 | HTTP | Healthcheck at `/` and metrics at `/metrics`
It can be executed directly on the host or via Docker, as follows:
```sh
## make sure to expose only the ports you use in your deployment scenario!
docker run \
--rm \
-p6831:6831/udp \
-p6832:6832/udp \
-p5778:5778/tcp \
-p5775:5775/udp \
jaegertracing/jaeger-agent:{{< currentVersion >}}
```
### Discovery System Integration
The agents can connect point to point to a single collector address, which could be
load balanced by another infrastructure component (e.g. DNS) across multiple collectors.
The agent can also be configured with a static list of collector addresses.
On Docker, a command like the following can be used:
```sh
docker run \
--rm \
-p5775:5775/udp \
-p6831:6831/udp \
-p6832:6832/udp \
-p5778:5778/tcp \
jaegertracing/jaeger-agent:{{< currentVersion >}} \
--reporter.grpc.host-port=jaeger-collector.jaeger-infra.svc:14250
```
Or use `--reporter.tchannel.host-port=jaeger-collector.jaeger-infra.svc:14267` to use
legacy tchannel reporter.
When using gRPC, you have several options for load balancing and name resolution:
* Single connection and no load balancing. This is the default if you specify a single `host:port`. (example: `--reporter.grpc.host-port=jaeger-collector.jaeger-infra.svc:14250`)
* Static list of hostnames and round-robin load balancing. This is what you get with a comma-separated list of addresses. (example: `reporter.grpc.host-port=jaeger-collector1:14250,jaeger-collector2:14250,jaeger-collector3:14250`)
* Dynamic DNS resolution and round-robin load balancing. To get this behaviour, prefix the address with `dns:///` and gRPC will attempt to resolve the hostname using SRV records (for [external load balancing](https://github.com/grpc/grpc/blob/master/doc/load-balancing.md)), TXT records (for [service configs](https://github.com/grpc/grpc/blob/master/doc/service_config.md)), and A records. Refer to the [gRPC Name Resolution docs](https://github.com/grpc/grpc/blob/master/doc/naming.md) and the [dns_resolver.go implementation](https://github.com/grpc/grpc-go/blob/master/resolver/dns/dns_resolver.go) for more info. (example: `--reporter.grpc.host-port=dns:///jaeger-collector.jaeger-infra.svc:14250`)
### Agent level tags
Jaeger supports agent level tags, that can be added to the process tags of all spans passing through the agent. This is supported through the command line flag `--jaeger.tags=key1=value1,key2=value2,...,keyn=valuen`. Tags can also be set through an environment flag like so - `--jaeger.tags=key=${envFlag:defaultValue}` - The tag value will be set to the value of the `envFlag` environment key and `defaultValue` if not set. This feature is not supported for the tchannel reporter, enabled using the flags `--collector.host-port` or `--reporter.tchannel.host-port`.
## Collectors
The collectors are stateless and thus many instances of **jaeger-collector** can be run in parallel.
Collectors require almost no configuration, except for the location of Cassandra cluster,
via `--cassandra.keyspace` and `--cassandra.servers` options, or the location of Elasticsearch cluster, via
`--es.server-urls`, depending on which storage is specified. To see all command line options run
```sh
go run ./cmd/collector/main.go -h
```
or, if you don't have the source code
```sh
docker run -it --rm jaegertracing/jaeger-collector:{{< currentVersion >}} -h
```
At default settings the collector exposes the following ports:
Port | Protocol | Function
----- | ------- | ---
14267 | TChannel | used by **jaeger-agent** to send spans in jaeger.thrift format
14250 | gRPC | used by **jaeger-agent** to send spans in model.proto format
14268 | HTTP | can accept spans directly from clients in jaeger.thrift format over binary thrift protocol
9411 | HTTP | can accept Zipkin spans in Thrift, JSON and Proto (disabled by default)
14269 | HTTP | Healthcheck at `/` and metrics at `/metrics`
## Storage Backends
Collectors require a persistent storage backend. Cassandra and Elasticsearch are the primary supported storage backends. Additional backends are [discussed here](https://github.com/jaegertracing/jaeger/issues/638).
The storage type can be passed via `SPAN_STORAGE_TYPE` environment variable. Valid values are `cassandra`, `elasticsearch`, `kafka` (only as a buffer), `grpc-plugin`, `badger` (only with all-in-one) and `memory` (only with all-in-one).
As of version 1.6.0, it's possible to use multiple storage types at the same time by providing a comma-separated list of valid types to the `SPAN_STORAGE_TYPE` environment variable.
It's important to note that all listed storage types are used for writing, but only the first type in the list will be used for reading and archiving.
### Memory
The in-memory storage is not intended for production workloads. It's intended as a simple solution to get started quickly and
data will be lost once the process is gone.
By default, there's no limit in the amount of traces stored in memory but a limit can be established by passing an
integer value via `--memory.max-traces`.
### Badger - local storage
Experimental since Jaeger 1.9
[Badger](https://github.com/dgraph-io/badger) is an embedded local storage, only available
with **all-in-one** distribution. By default it acts as an ephemeral storage using a temporary filesystem.
This can be overridden by using the `--badger.ephemeral=false` option.
```sh
docker run \
-e SPAN_STORAGE_TYPE=badger \
-e BADGER_EPHEMERAL=false \
-e BADGER_DIRECTORY_VALUE=/badger/data \
-e BADGER_DIRECTORY_KEY=/badger/key \
-v <storage_dir_on_host>:/badger \
-p 16686:16686 \
jaegertracing/all-in-one:{{< currentVersion >}}
```
### Cassandra
Supported versions: 3.4+
Deploying Cassandra itself is out of scope for our documentation. One good
source of documentation is the [Apache Cassandra Docs](https://cassandra.apache.org/doc/latest/).
#### Configuration
##### Minimal
```sh
docker run \
-e SPAN_STORAGE_TYPE=cassandra \
-e CASSANDRA_SERVERS=<...> \
jaegertracing/jaeger-collector:{{< currentVersion >}}
```
##### All options
To view the full list of configuration options, you can run the following command:
```sh
docker run \
-e SPAN_STORAGE_TYPE=cassandra \
jaegertracing/jaeger-collector:{{< currentVersion >}} \
--help
```
#### Schema script
A script is provided to initialize Cassandra keyspace and schema
using Cassandra's interactive shell [`cqlsh`][cqlsh]:
```sh
MODE=test sh ./plugin/storage/cassandra/schema/create.sh | cqlsh
```
For production deployment, pass `MODE=prod DATACENTER={datacenter}` arguments to the script,
where `{datacenter}` is the name used in the Cassandra configuration / network topology.
The script also allows overriding TTL, keyspace name, replication factor, etc.
Run the script without arguments to see the full list of recognized parameters.
#### TLS support
Jaeger supports TLS client to node connections as long as you've configured
your Cassandra cluster correctly. After verifying with e.g. `cqlsh`, you can
configure the collector and query like so:
```sh
docker run \
-e CASSANDRA_SERVERS=<...> \
-e CASSANDRA_TLS=true \
-e CASSANDRA_TLS_SERVER_NAME="CN-in-certificate" \
-e CASSANDRA_TLS_KEY=<path to client key file> \
-e CASSANDRA_TLS_CERT=<path to client cert file> \
-e CASSANDRA_TLS_CA=<path to your CA cert file> \
jaegertracing/jaeger-collector:{{< currentVersion >}}
```
The schema tool also supports TLS. You need to make a custom cqlshrc file like
so:
```
# Creating schema in a cassandra cluster requiring client TLS certificates.
#
# Create a volume for the schema docker container containing four files:
# cqlshrc: this file
# ca-cert: the cert authority for your keys
# client-key: the keyfile for your client
# client-cert: the cert file matching client-key
#
# if there is any sort of DNS mismatch and you want to ignore server validation
# issues, then uncomment validate = false below.
#
# When running the container, map this volume to /root/.cassandra and set the
# environment variable CQLSH_SSL=--ssl
[ssl]
certfile = ~/.cassandra/ca-cert
userkey = ~/.cassandra/client-key
usercert = ~/.cassandra/client-cert
# validate = false
```
### Elasticsearch
Supported in Jaeger since 0.6.0
Supported versions: 5.x, 6.x, 7.x
Elasticsearch version is automatically retrieved from root/ping endpoint.
Based on this version Jaeger uses compatible index mappings and Elasticsearch REST API.
The version can be explicitly provided via `--es.version=` flag.
Elasticsearch does not require initialization other than
[installing and running Elasticsearch](https://www.elastic.co/downloads/elasticsearch).
Once it is running, pass the correct configuration values to the Jaeger collector and query service.
#### Configuration
##### Minimal
```sh
docker run \
-e SPAN_STORAGE_TYPE=elasticsearch \
-e ES_SERVER_URLS=<...> \
jaegertracing/jaeger-collector:{{< currentVersion >}}
```
##### All options
To view the full list of configuration options, you can run the following command:
```sh
docker run \
-e SPAN_STORAGE_TYPE=elasticsearch \
jaegertracing/jaeger-collector:{{< currentVersion >}} \
--help
```
#### Shards and Replicas for Elasticsearch indices
Shards and replicas are some configuration values to take special attention to, because this is decided upon
index creation. [This article](https://qbox.io/blog/optimizing-elasticsearch-how-many-shards-per-index) goes into
more information about choosing how many shards should be chosen for optimization.
#### Upgrade Elasticsearch version
Elasticsearch defines wire and index compatibility versions. The index compatibility defines
the minimal version a node can read data from. For example Elasticsearch 7 can read indices
created by Elasticsearch 6, however it cannot read indices created by Elasticsearch 5 even
though they use the same index mappings. Therefore upgrade from Elasticsearch 6 to 7 does not require any
data migration. However, upgrade from Elasticsearch 5 to 7 has to be done through Elasticsearch 6 and wait
until indices created by ES 5.x are removed or explicitly reindexed.
Refer to the Elasticsearch [documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current//setup-upgrade.html)
for wire and index compatibility versions. Generally this information can be retrieved from root/ping REST endpoint.
##### Reindex
Manual reindexing can be used when upgrading from Elasticsearch 5 to 7 (through Elasticsearch 6)
without waiting until indices created by Elasticsearch 5 are removed.
1. Reindex all span indices to new indices with suffix `-1`:
```bash
curl -ivX POST -H "Content-Type: application/json" http://localhost:9200/_reindex -d @reindex.json
{
"source": {
"index": "jaeger-span-*"
},
"dest": {
"index": "jaeger-span"
},
"script": {
"lang": "painless",
"source": "ctx._index = 'jaeger-span-' + (ctx._index.substring('jaeger-span-'.length(), ctx._index.length())) + '-1'"
}
}
```
2. Delete indices with old mapping:
```bash
curl -ivX DELETE -H "Content-Type: application/json" http://localhost:9200/jaeger-span-\*,-\*-1
```
3. Create indices without `-1` suffix:
```bash
curl -ivX POST -H "Content-Type: application/json" http://localhost:9200/_reindex -d @reindex.json
{
"source": {
"index": "jaeger-span-*"
},
"dest": {
"index": "jaeger-span"
},
"script": {
"lang": "painless",
"source": "ctx._index = 'jaeger-span-' + (ctx._index.substring('jaeger-span-'.length(), ctx._index.length() - 2))"
}
}
```
4. Remove suffixed indices:
```bash
curl -ivX DELETE -H "Content-Type: application/json" http://localhost:9200/jaeger-span-\*-1
```
Run the commands analogically for other Jaeger indices.
There might exist more effective migration procedure. Please share with the community any findings.
### Kafka
Supported in Jaeger since 1.6.0
Supported Kafka versions: 0.9+
Kafka can be used as an intermediary buffer between collector and an actual storage.
The collector is configured with `SPAN_STORAGE_TYPE=kafka` that makes it write all received spans
into a Kafka topic. A new component [Ingester](#ingester), added in version 1.7.0, is used to read from
Kafka and store spans in another storage backend (Elasticsearch or Cassandra).
Writing to Kafka is particularly useful for building post-processing data pipelines.
#### Configuration
##### Minimal
```sh
docker run \
-e SPAN_STORAGE_TYPE=kafka \
-e KAFKA_BROKERS=<...> \
-e KAFKA_TOPIC=<...> \
jaegertracing/jaeger-collector:{{< currentVersion >}}
```
##### All options
To view the full list of configuration options, you can run the following command:
```sh
docker run \
-e SPAN_STORAGE_TYPE=kafka \
jaegertracing/jaeger-collector:{{< currentVersion >}} \
--help
```
#### Topic & partitions
Unless your Kafka cluster is configured to automatically create topics, you will need to create it ahead of time. You can refer to [the Kafka quickstart documentation](https://kafka.apache.org/documentation/#quickstart_createtopic) to learn how.
You can find more information about topics and partitions in general in the [official documentation](https://kafka.apache.org/documentation/#intro_topics). [This article](https://www.confluent.io/blog/how-to-choose-the-number-of-topicspartitions-in-a-kafka-cluster/) provide more details about how to choose the number of partitions.
### Storage plugin
Jaeger supports gRPC based storage plugins. For more information refer to [jaeger/plugin/storage/grpc](https://github.com/jaegertracing/jaeger/tree/master/plugin/storage/grpc)
Available plugins:
* [InfluxDB](https://github.com/influxdata/jaeger-influxdb/)
```sh
docker run \
-e SPAN_STORAGE_TYPE=grpc-plugin \
-e GRPC_STORAGE_PLUGIN_BINARY=<...> \
-e GRPC_STORAGE_PLUGIN_CONFIGURATION_FILE=<...> \
jaegertracing/all-in-one:{{< currentVersion >}}
```
## Ingester
**jaeger-ingester** is a service which reads span data from Kafka topic and writes it to another storage backend (Elasticsearch or Cassandra).
Port | Protocol | Function
----- | ------- | ---
14270 | HTTP | Healthcheck at `/` and metrics at `/metrics`
To view all exposed configuration options run the following command:
```sh
docker run \
-e SPAN_STORAGE_TYPE=cassandra \
jaegertracing/jaeger-ingester:{{< currentVersion >}}
--help
```
## Query Service & UI
**jaeger-query** serves the API endpoints and a React/Javascript UI.
The service is stateless and is typically run behind a load balancer, such as [**NGINX**](https://www.nginx.com/).
At default settings the query service exposes the following port(s):
Port | Protocol | Function
----- | ------- | ---
16686 | HTTP | `/api/*` endpoints and Jaeger UI at `/`
16687 | HTTP | Healthcheck at `/` and metrics at `/metrics`
### Minimal deployment example (Elasticsearch backend):
```sh
docker run -d --rm \
-p 16686:16686 \
-p 16687:16687 \
-e SPAN_STORAGE_TYPE=elasticsearch \
-e ES_SERVER_URLS=http://<ES_SERVER_IP>:<ES_SERVER_PORT> \
jaegertracing/jaeger-query:{{< currentVersion >}}
```
### UI Base Path
The base path for all **jaeger-query** HTTP routes can be set to a non-root value, e.g. `/jaeger` would cause all UI URLs to start with `/jaeger`. This can be useful when running **jaeger-query** behind a reverse proxy.
The base path can be configured via the `--query.base-path` command line parameter or the `QUERY_BASE_PATH` environment variable.
### UI Customization and Embedding
Please refer to the [dedicated Frontend/UI page](../frontend-ui/).
## Aggregation Jobs for Service Dependencies
Production deployments need an external process which aggregates data and creates dependency links between services. Project [spark-dependencies](https://github.com/jaegertracing/spark-dependencies) is a Spark job which derives dependency links and stores them directly to the storage.
## Configuration
All binaries accepts command line properties and environmental variables, power by [viper](https://github.com/spf13/viper) and [cobra](https://github.com/spf13/cobra) libraries. Please refer to the [CLI Flags](../cli/) page for more information.
[cqlsh]: http://cassandra.apache.org/doc/latest/tools/cqlsh.html
[zipkin-thrift]: https://github.com/jaegertracing/jaeger-idl/blob/master/thrift/zipkincore.thrift
[jaeger-thrift]: https://github.com/jaegertracing/jaeger-idl/blob/master/thrift/jaeger.thrift
[thriftrw]: https://www.npmjs.com/package/thriftrw

View File

@ -1,26 +0,0 @@
---
title: Frequently Asked Questions
navtitle: FAQs
description: Answers to some frequently asked questions about Jaeger.
weight: 11
---
## Why is the Dependencies page empty?
The Dependencies page shows a graph of services traced by Jaeger and connections between them. When you are using `all-in-one` binary with in-memory storage, the graph is calculated on-demand from all the traces stored in memory. However, if you are using a real distributed storage like Cassandra or Elasticsearch, it is too expensive to scan all the data in the database to build the service graph. Instead, the Jaeger project provides "big data" jobs that can be used to extract the service graph data from traces:
* https://github.com/jaegertracing/spark-dependencies - the older Spark job that can be run periodically
* https://github.com/jaegertracing/jaeger-analytics - the new (experimental) streaming Flink jobs that run continuously and builds the service graph in smaller time intervals
## Why do I not see any spans in Jaeger?
Please refer to the [Troubleshooting](../troubleshooting/) guide.
## Do I need to run jaeger-agent?
`jaeger-agent` is not always necessary. Jaeger client libraries can be configured to export trace data directly to `jaeger-collector`. However, the following are the reasons why running `jaeger-agent` is recommended:
* If we want Jaeger client libraries to send trace data directly to collectors, we must provide them with a URL of the HTTP endpoint. It means that our applications require additional configuration containing this parameter, especially if we are running multiple Jaeger installations (e.g. in different availability zones or regions) and want the data sent to a nearby installation. In contrast, when using the agent, the libraries require no additional configuration because the agent is always accessible via `localhost`. It acts as a sidecar and proxies the requests to the appropriate collectors.
* The agent can be configured to enrich the tracing data with infrastructure-specific metadata by adding extra tags to the spans, such as the current zone, region, etc. If the agent is running as a host daemon, it will be shared by all applications running on the same host. If the agent is running as a true sidecar, i.e. one per application, it can provide additional functionality such as strong authentication, multi-tenancy (see [this blog post](https://medium.com/jaegertracing/jaeger-and-multitenancy-99dfa1d49dc0)), pod name, etc.
* If we want Jaeger client libraries to use sampling strategies that are centrally configured in the collectors, this is only possible by using the `/sampling` HTTP endpoint on the agent. There is no technical reason why this endpoint cannot be implemented directly in the collectors, it's just [not done yet](https://github.com/jaegertracing/jaeger/issues/1971).
* Agents allow implementing traffic control to the collectors. If we have thousands of hosts in the data center, each running many applications, and each application sending data directly to the collectors, there may be too many open connections for each collector to handle. The agents can load balance this traffic with fewer connections.

View File

@ -1,57 +0,0 @@
---
title: Features
hasparent: true
---
Jaeger is used for monitoring and troubleshooting microservices-based distributed systems, including:
* Distributed context propagation
* Distributed transaction monitoring
* Root cause analysis
* Service dependency analysis
* Performance / latency optimization
## High Scalability
Jaeger backend is designed to have no single points of failure and to scale with the business needs.
For example, any given Jaeger installation at Uber is typically processing several billion {{< tip "spans" "span" >}} per day.
## Native support for OpenTracing
Jaeger backend, Web UI, and instrumentation libraries have been designed from ground up to support the OpenTracing standard.
* Represent {{< tip "traces" "trace" >}} as {{< tip "directed acyclic graphs" "directed acyclic graph" >}} (not just trees) via [span references](https://github.com/opentracing/specification/blob/master/specification.md#references-between-spans)
* Support strongly typed span _tags_ and _structured logs_
* Support general distributed context propagation mechanism via _baggage_
## Multiple storage backends
Jaeger supports two popular open source NoSQL databases as trace storage backends: Cassandra 3.4+ and Elasticsearch 5.x/6.x/7.x.
There are ongoing community experiments using other databases, such as ScyllaDB, InfluxDB, Amazon DynamoDB. Jaeger also ships
with a simple in-memory storage for testing setups.
## Modern Web UI
Jaeger Web UI is implemented in Javascript using popular open source frameworks like React. Several performance
improvements have been released in v1.0 to allow the UI to efficiently deal with large volumes of data, and to display
{{< tip "traces" "trace" >}} with tens of thousands of {{< tip "spans" "span" >}} (e.g. we tried a trace with 80,000 spans).
## Cloud Native Deployment
Jaeger backend is distributed as a collection of Docker images. The binaries support various configuration methods,
including command line options, environment variables, and configuration files in multiple formats (yaml, toml, etc.).
Deployment to Kubernetes clusters is assisted by a [Kubernetes operator](https://github.com/jaegertracing/jaeger-operator), [Kubernetes templates](https://github.com/jaegertracing/jaeger-kubernetes)
and a [Helm chart](https://github.com/kubernetes/charts/tree/master/incubator/jaeger).
## Observability
All Jaeger backend components expose [Prometheus](https://prometheus.io/) metrics by default (other metrics backends are
also supported). Logs are written to standard out using the structured logging library [zap](https://github.com/uber-go/zap).
## Backwards compatibility with Zipkin
Although we recommend instrumenting applications with OpenTracing API and binding to Jaeger client libraries to benefit
from advanced features not available elsewhere, if your organization has already invested in the instrumentation
using Zipkin libraries, you do not have to rewrite all that code. Jaeger provides backwards compatibility with Zipkin
by accepting spans in Zipkin formats (Thrift, JSON v1/v2 and Protobuf) over HTTP. Switching from Zipkin backend is just a matter
of routing the traffic from Zipkin libraries to the Jaeger backend.

View File

@ -1,224 +0,0 @@
---
title: Frontend/UI Configuration
navtitle: Frontend/UI
hasparent: true
weight: 7
---
## Configuration
Several aspects of the UI can be configured:
* The Dependencies section can be enabled / configured
* Google Analytics tracking can be enabled / configured
* Additional menu options can be added to the global nav
These options can be configured by a JSON configuration file. The `--query.ui-config` command line parameter of the query service must then be set to the path to the JSON file when the query service is started.
An example configuration file:
```json
{
"dependencies": {
"dagMaxNumServices": 200,
"menuEnabled": true
},
"archiveEnabled": true,
"tracking": {
"gaID": "UA-000000-2",
"trackErrors": true
},
"menu": [
{
"label": "About Jaeger",
"items": [
{
"label": "GitHub",
"url": "https://github.com/jaegertracing/jaeger"
},
{
"label": "Docs",
"url": "http://jaeger.readthedocs.io/en/latest/"
}
]
}
],
"linkPatterns": [{
"type": "process",
"key": "jaeger.version",
"url": "https://github.com/jaegertracing/jaeger-client-java/releases/tag/#{jaeger.version}",
"text": "Information about Jaeger release #{jaeger.version}"
}]
}
```
### Dependencies
`dependencies.dagMaxNumServices` defines the maximum number of services allowed before the DAG dependency view is disabled. Default: `200`.
`dependencies.menuEnabled` enables (`true`) or disables (`false`) the dependencies menu button. Default: `true`.
### Archive Support
`archiveEnabled` enables (`true`) or disables (`false`) the archive traces button. Default: `false`. It requires a configuration of an archive storage in Query service. Archived traces are only accessible directly by ID, they are not searchable.
### Google Analytics Tracking
`tracking.gaID` defines the Google Analytics tracking ID. This is required for Google Analytics tracking, and setting it to a non-`null` value enables Google Analytics tracking. Default: `null`.
`tracking.trackErrors` enables (`true`) or disables (`false`) error tracking via Google Analytics. Errors can only be tracked if a valid Google Analytics ID is provided. For additional details on error tracking via Google Analytics see the [tracking README](https://github.com/jaegertracing/jaeger-ui/blob/c622330546afc1be59a42f874bcc1c2fadf7e69a/src/utils/tracking/README.md) in the UI repo. Default: `true`.
### Custom Menu Items
`menu` allows additional links to be added to the global nav. The additional links are right-aligned.
In the sample JSON config above, the configured menu will have a dropdown labeled "About Jaeger" with sub-options for "GitHub" and "Docs". The format for a link in the top right menu is as follows:
```json
{
"label": "Some text here",
"url": "https://example.com"
}
```
Links can either be members of the `menu` Array, directly, or they can be grouped into a dropdown menu option. The format for a group of links is:
```json
{
"label": "Dropdown button",
"items": [ ]
}
```
The `items` Array should contain one or more link configurations.
### Link Patterns
The `linkPatterns` node can be used to create links from fields displayed in the Jaeger UI.
Field | Description
------|------------
type | The metadata section in which your link will be added: process, tags, logs
key | The name of tag/process/log attribute which value will be displayed as a link
url | The URL where the link should point to, it can be an external site or relative path in Jaeger UI
text | The text displayed in the tooltip for the link
Both `url` and `text` can be defined as templates (i.e. using `#{field-name}`) where Jaeger UI will dynamically substitute values based on tags/logs data.
## Embedded Mode
Starting with version 1.9, Jaeger UI provides an "embedded" layout mode which is intended to support integrating Jaeger UI into other applications. Currently (as of `v0`), the approach taken is to remove various UI elements from the page to make the UI better suited for space-constrained layouts.
The embedded mode is induced and configured via URL query parameters.
To enter embedded mode, the `uiEmbed=v0` query parameter and value must be added to the URL. For example, the following URL will show the trace with ID `abc123` in embedded mode:
```
http://localhost:16686/trace/abc123?uiEmbed=v0
```
`uiEmbed=v0` is required.
Further, each page supported has an <img src="/img/frontend-ui/embed-open-icon.png" style="width: 20px; height:20px;display:inline;" alt="Embed open window"> button added that will open the non-embedded page in a new tab.
The following pages support embedded mode:
* Search Page
* Trace Page
### Search Page
To integrate the Search Trace Page to our application we have to indicate to the Jaeger UI that we want to use the embed mode with `uiEmbed=v0`.
For example:
```
http://localhost:16686/search?
service=my-service&
start=1543917759557000&
end=1543921359557000&
limit=20&
lookback=1h&
maxDuration&
minDuration&
uiEmbed=v0
```
![Embed Search Traces](/img/frontend-ui/embed-search-traces.png)
#### Configuration options
The following query parameter can be used to configure the layout of the search page :
* `uiSearchHideGraph=1` - disables the display of the scatter plot above the search results
```
http://localhost:16686/search?
service=my-service&
start=1543917759557000&
end=1543921359557000&
limit=20&
lookback=1h&
maxDuration&
minDuration&
uiEmbed=v0&
uiSearchHideGraph=1
```
![Embed Search Traces without Graph](/img/frontend-ui/embed-search-traces-hide-graph.png)
### Trace Page
To integrate the Trace Page to our application we have to indicate to the Jaeger UI that we want to use the embed mode with `uiEmbed=v0`.
For example:
```sh
http://localhost:16686/trace/{trace-id}?uiEmbed=v0
```
![Embed Trace view](/img/frontend-ui/embed-trace-view.png)
If we have navigated to this view from the search traces page we'll have a button to go back to the results page.
![Embed Trace view](/img/frontend-ui/embed-trace-view-with-back-button.png)
#### Configuration options
The following query parameters can be used to configure the layout of the trace page :
* `uiTimelineCollapseTitle=1` causes the trace header to start out collapsed, which hides the summary and the minimap.
```
http://localhost:16686/trace/{trace-id}?
uiEmbed=v0&
uiTimelineCollapseTitle=1
```
![Embed Trace view](/img/frontend-ui/embed-trace-view-with-collapse.png)
* `uiTimelineHideMinimap=1` removes the minimap, entirely, regardless of whether the trace header is expanded or not.
```
http://localhost:16686/trace/{trace-id}?
uiEmbed=v0&
uiTimelineHideMinimap=1
```
![Embed Trace view](/img/frontend-ui/embed-trace-view-with-hide-minimap.png)
* `uiTimelineHideSummary=1` - removes the trace summary information (number of services, etc.) entirely, regardless of whether the trace header is expanded or not.
```
http://localhost:16686/trace/{trace-id}?
uiEmbed=v0&
uiTimelineHideSummary=1
```
![Embed Trace view](/img/frontend-ui/embed-trace-view-with-hide-summary.png)
We can also combine the options:
```
http://localhost:16686/trace/{trace-id}?
uiEmbed=v0&
uiTimelineHideMinimap=1&
uiTimelineHideSummary=1
```
![Embed Trace view](/img/frontend-ui/embed-trace-view-with-hide-details-and-hide-minimap.png)

View File

@ -1,129 +0,0 @@
---
title: Getting Started
description: Get up and running with Jaeger in your local environment
weight: 2
---
## Instrumentation
Your applications must be instrumented before they can send tracing data to Jaeger backend. Check the [Client Libraries](../client-libraries) section for information about how to use the OpenTracing API and how to initialize and configure Jaeger tracers.
## All in One
All-in-one is an executable designed for quick local testing, launches the Jaeger UI, collector, query, and agent, with an in memory storage component.
The simplest way to start the all-in-one is to use the pre-built image published to DockerHub (a single command line).
```bash
$ docker run -d --name jaeger \
-e COLLECTOR_ZIPKIN_HTTP_PORT=9411 \
-p 5775:5775/udp \
-p 6831:6831/udp \
-p 6832:6832/udp \
-p 5778:5778 \
-p 16686:16686 \
-p 14268:14268 \
-p 9411:9411 \
jaegertracing/all-in-one:{{< currentVersion >}}
```
Or run the `jaeger-all-in-one(.exe)` executable from the [binary distribution archives][download]:
```bash
$ jaeger-all-in-one --collector.zipkin.http-port=9411
```
You can then navigate to `http://localhost:16686` to access the Jaeger UI.
The container exposes the following ports:
Port | Protocol | Component | Function
----- | ------- | --------- | ---
5775 | UDP | agent | accept `zipkin.thrift` over compact thrift protocol (deprecated, used by legacy clients only)
6831 | UDP | agent | accept `jaeger.thrift` over compact thrift protocol
6832 | UDP | agent | accept `jaeger.thrift` over binary thrift protocol
5778 | HTTP | agent | serve configs
16686 | HTTP | query | serve frontend
14268 | HTTP | collector | accept `jaeger.thrift` directly from clients
14250 | HTTP | collector | accept `model.proto`
9411 | HTTP | collector | Zipkin compatible endpoint (optional)
## Kubernetes and OpenShift
* Kubernetes templates: https://github.com/jaegertracing/jaeger-kubernetes
* Kubernetes Operator: https://github.com/jaegertracing/jaeger-operator
* OpenShift templates: https://github.com/jaegertracing/jaeger-openshift
## Sample App: HotROD
HotROD (Rides on Demand) is a demo application that consists of several microservices and
illustrates the use of the [OpenTracing API](http://opentracing.io).
A tutorial / walkthrough is available in the blog post:
[Take OpenTracing for a HotROD ride][hotrod-tutorial].
It can be run standalone, but requires Jaeger backend to view the traces.
### Features
- Discover architecture of the whole system via data-driven dependency
diagram.
- View request timeline and errors; understand how the app works.
- Find sources of latency and lack of concurrency.
- Highly contextualized logging.
- Use baggage propagation to:
- Diagnose inter-request contention (queueing).
- Attribute time spent in a service.
- Use open source libraries with OpenTracing integration to get
vendor-neutral instrumentation for free.
### Prerequisites
- You need Go 1.11 or higher installed on your machine to run from source.
- Requires a [running Jaeger backend](#all-in-one) to view the traces.
### Running
#### From Source
```bash
mkdir -p $GOPATH/src/github.com/jaegertracing
cd $GOPATH/src/github.com/jaegertracing
git clone git@github.com:jaegertracing/jaeger.git jaeger
cd jaeger
make install
go run ./examples/hotrod/main.go all
```
#### From docker
```bash
$ docker run --rm -it \
--link jaeger \
-p8080-8083:8080-8083 \
-e JAEGER_AGENT_HOST="jaeger" \
jaegertracing/example-hotrod:{{< currentVersion >}} \
all
```
#### From binary distribution
Run `example-hotrod(.exe)` executable from the [binary distribution archives][download]:
```bash
$ example-hotrod all
```
Then navigate to `http://localhost:8080`.
## Migrating from Zipkin
Collector service exposes Zipkin compatible REST API `/api/v1/spans` which accepts both Thrift and JSON. Also there is `/api/v2/spans` for JSON and Proto.
By default it's disabled. It can be enabled with `--collector.zipkin.http-port=9411`.
Zipkin [Thrift](https://github.com/jaegertracing/jaeger-idl/blob/master/thrift/zipkincore.thrift) IDL and Zipkin [Proto](https://github.com/jaegertracing/jaeger-idl/blob/master/proto/zipkin.proto) IDL files can be found in [jaegertracing/jaeger-idl](https://github.com/jaegertracing/jaeger-idl) repository.
They're compatible with [openzipkin/zipkin-api](https://github.com/openzipkin/zipkin-api) [Thrift](https://github.com/openzipkin/zipkin-api/blob/master/thrift/zipkinCore.thrift) and [Proto](https://github.com/openzipkin/zipkin-api/blob/master/zipkin.proto).
[hotrod-tutorial]: https://medium.com/@YuriShkuro/take-opentracing-for-a-hotrod-ride-f6e3141f7941
[download]: ../../../download/

View File

@ -1,903 +0,0 @@
---
title: Operator for Kubernetes
hasparent: true
---
# Understanding Operators
The Jaeger Operator is an implementation of a [Kubernetes Operator](https://coreos.com/operators/). Operators are pieces of software that ease the operational complexity of running another piece of software. More technically, _Operators_ are a method of packaging, deploying, and managing a Kubernetes application.
A Kubernetes application is an application that is both deployed on Kubernetes and managed using the Kubernetes APIs and `kubectl` (kubernetes) or `oc` (OKD) tooling. To be able to make the most of Kubernetes, you need a set of cohesive APIs to extend in order to service and manage your apps that run on Kubernetes. Think of Operators as the runtime that manages this type of app on Kubernetes.
# Installing the Operator
{{< info >}}
The Jaeger Operator version tracks one version of the Jaeger components (Query, Collector, Agent). When a new version of the Jaeger components is released, a new version of the operator will be released that understands how running instances of the previous version can be upgraded to the new version.
{{< /info >}}
## Installing the Operator on Kubernetes
The following instructions will create the `observability` namespace and install the Jaeger Operator.
{{< info >}}
Make sure your `kubectl` command is properly configured to talk to a valid Kubernetes cluster. If you don't have a cluster, you can create one locally using [`minikube`](https://kubernetes.io/docs/tasks/tools/install-minikube/).
{{< /info >}}
To install the operator, run:
<!--TODO - Does Kubernetes have privileged users? Needs to be run as a system:admin on OKD/OpenShift.-->
```bash
kubectl create namespace observability # <1>
kubectl create -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/crds/jaegertracing.io_jaegers_crd.yaml # <2>
kubectl create -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/service_account.yaml
kubectl create -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/role.yaml
kubectl create -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/role_binding.yaml
kubectl create -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/operator.yaml
```
<1> This creates the namespace used by default in the deployment files. If you want to install the Jaeger operator in a different namespace, you must edit the deployment files to change `observability` to the desired namespace value.
<2> This installs the "Custom Resource Definition" for the `apiVersion: jaegertracing.io/v1`
At this point, there should be a `jaeger-operator` deployment available. You can view it by running the following command:
```bash
$ kubectl get deployment jaeger-operator -n observability
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
jaeger-operator 1 1 1 1 48s
```
The operator is now ready to create Jaeger instances.
## Installing the Operator on OKD/OpenShift
<!-- TODO: Add instructions for installing via the operatorhub? -->
The instructions from the previous section also work for installing the operator on OKD or OpenShift. Make sure you are logged in as a privileged user, when you install the role based acces control (RBAC) rules, the custom resource definition, and the operator.
```bash
oc login -u <privileged user>
oc new-project observability # <1>
oc create -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/crds/jaegertracing.io_jaegers_crd.yaml # <2>
oc create -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/service_account.yaml
oc create -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/role.yaml
oc create -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/role_binding.yaml
oc create -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/operator.yaml
```
<1> This creates the namespace used by default in the deployment files. If you want to install the Jaeger operator in a different namespace, you must edit the deployment files to change `observability` to the desired namespace value.
<2> This installs the "Custom Resource Definition" for the `apiVersion: jaegertracing.io/v1`
Once the operator is installed, grant the role `jaeger-operator` to users who should be able to install individual Jaeger instances. The following example creates a role binding allowing the user `developer` to create Jaeger instances:
```bash
oc create \
rolebinding developer-jaeger-operator \
--role=jaeger-operator \
--user=developer
```
After the role is granted, switch back to a non-privileged user.
# Quick Start - Deploying the AllInOne image
The simplest possible way to create a Jaeger instance is by creating a YAML file like the following example. This will install the default AllInOne strategy, which deploys the "all-in-one" image (agent, collector, query, ingester, Jaeger UI) in a single pod, using in-memory storage by default.
{{< info >}}
This default strategy is intended for development, testing, and demo purposes, not for production.
{{< /info >}}
```yaml
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: simplest
```
The YAML file can then be used with `kubectl`:
<!-- TODO - Add OKD commands and tabs shortcode. -->
```bash
kubectl apply -f simplest.yaml
```
In a few seconds, a new in-memory all-in-one instance of Jaeger will be available, suitable for quick demos and development purposes. To check the instances that were created, list the `jaeger` objects:
```bash
$ kubectl get jaegers
NAME CREATED AT
simplest 28s
```
To get the pod name, query for the pods belonging to the `simplest` Jaeger instance:
```bash
$ kubectl get pods -l app.kubernetes.io/instance=simplest
NAME READY STATUS RESTARTS AGE
simplest-6499bb6cdd-kqx75 1/1 Running 0 2m
```
Similarly, the logs can be queried either from the pod directly using the pod name obtained from the previous example, or from all pods belonging to our instance:
```bash
$ kubectl logs -l app.kubernetes.io/instance=simplest
...
{"level":"info","ts":1535385688.0951214,"caller":"healthcheck/handler.go:133","msg":"Health Check state change","status":"ready"}
```
{{< info >}}
On OKD/OpenShift the container name must be specified.
{{< /info >}}
```bash
$ kubectl logs -l app.kubernetes.io/instance=simplest -c jaeger
...
{"level":"info","ts":1535385688.0951214,"caller":"healthcheck/handler.go:133","msg":"Health Check state change","status":"ready"}
```
# Deployment Strategies
When you create a Jaeger instance, it is associated with a strategy. The strategy is defined in the custom resource file, and determines the architecture to be used for the Jaeger backend. The default strategy is `allInOne`. The other possible values are `production` and `streaming`.
The available strategies are described in the following sections.
## AllInOne (Default) strategy
This strategy is intended for development, testing, and demo purposes.
The main backend components, agent, collector and query service, are all packaged into a single executable which is configured (by default) to use in-memory storage.
## Production strategy
The `production` strategy is intended (as the name suggests) for production environments, where long term storage of trace data is important, as well as a more scalable and highly available architecture is required. Each of the backend components is therefore separately deployed.
The agent can be injected as a sidecar on the instrumented application or as a daemonset.
The query and collector services are configured with a supported storage type - currently Cassandra or Elasticsearch. Multiple instances of each of these components can be provisioned as required for performance and resilience purposes.
The main additional requirement is to provide the details of the storage type and options, for example:
```yaml
storage:
type: elasticsearch
options:
es:
server-urls: http://elasticsearch:9200
```
## Streaming strategy
The `streaming` strategy is designed to augment the `production` strategy by providing a streaming capability that effectively sits between the collector and the backend storage (Cassandra or Elasticsearch). This provides the benefit of reducing the pressure on the backend storage, under high load situations, and enables other trace post-processing capabilities to tap into the real time span data directly from the streaming platform (Kafka).
The only additional information required is to provide the details for accessing the Kafka platform, which is configured in the `collector` component (as producer) and `ingester` component (as consumer):
```yaml
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: simple-streaming
spec:
strategy: streaming
collector:
options:
kafka: # <1>
producer:
topic: jaeger-spans
brokers: my-cluster-kafka-brokers.kafka:9092
ingester:
options:
kafka: # <1>
consumer:
topic: jaeger-spans
brokers: my-cluster-kafka-brokers.kafka:9092
ingester:
deadlockInterval: 0 # <2>
storage:
type: elasticsearch
options:
es:
server-urls: http://elasticsearch:9200
```
<1> Identifies the Kafka configuration used by the collector, to produce the messages, and the ingester to consume the messages.
<2> The deadlock interval can be disabled to avoid the ingester being terminated when no messages arrive within the default 1 minute period
{{< info >}}
A Kafka environment can be configured using [Strimzi's Kafka operator](https://strimzi.io/).
{{< /info >}}
# Understanding Custom Resource Definitions
In the Kubernetes API, a resource is an endpoint that stores a collection of API objects of a certain kind. For example, the built-in Pods resource contains a collection of Pod objects. A _Custom Resource Definition_ (CRD) object defines a new, unique object `Kind` in the cluster and lets the Kubernetes API server handle its entire lifecycle.
To create _Custom Resource_ (CR) objects, cluster administrators must first create a Custom Resource Definition (CRD). The CRDs allow cluster users to create CRs to add the new resource types into their projects. An Operator watches for custom resource objects to be created, and when it sees a custom resource being created, it creates the application based on the parameters defined in the custom resource object.
{{< info >}}
While only cluster administrators can create CRDs, developers can create the CR from an existing CRD if they have read and write permission to it.
{{< /info >}}
<!--
## Jaeger Custom Resource Parameters
TODO Create a TABLE with all the parameters, descriptions/notes, valid values, and defaults.
Figure out if we can generate the options? Can we filter them in any way?
https://github.com/jaegertracing/jaeger/issues/1537
https://github.com/jaegertracing/documentation/issues/250-->
For reference, here's how you can create a more complex all-in-one instance:
```yaml
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: my-jaeger
spec:
strategy: allInOne # <1>
allInOne:
image: jaegertracing/all-in-one:latest # <2>
options: # <3>
log-level: debug # <4>
storage:
type: memory # <5>
options: # <6>
memory: # <7>
max-traces: 100000
ingress:
enabled: false # <8>
agent:
strategy: DaemonSet # <9>
annotations:
scheduler.alpha.kubernetes.io/critical-pod: "" # <10>
```
<1> The default strategy is `allInOne`. The other possible values are `production` and `streaming`.
<2> The image to use, in a regular Docker syntax.
<3> The (non-storage related) options to be passed verbatim to the underlying binary. Refer to the Jaeger documentation and/or to the `--help` option from the related binary for all the available options.
<4> The option is a simple `key: value` map. In this case, we want the option `--log-level=debug` to be passed to the binary.
<5> The storage type to be used. By default it will be `memory`, but can be any other supported storage type (Cassandra, Elasticsearch, Kafka).
<6> All storage related options should be placed here, rather than under the 'allInOne' or other component options.
<7> Some options are namespaced and we can alternatively break them into nested objects. We could have specified `memory.max-traces: 100000`.
<8> By default, an ingress object is created for the query service. It can be disabled by setting its `enabled` option to `false`. If deploying on OpenShift, this will be represented by a Route object.
<9> By default, the operator assumes that agents are deployed as sidecars within the target pods. Specifying the strategy as "DaemonSet" changes that and makes the operator deploy the agent as DaemonSet. Note that your tracer client will probably have to override the "JAEGER_AGENT_HOST" environment variable to use the node's IP.
<10> Define annotations to be applied to all deployments (not services). These can be overridden by annotations defined on the individual components.
You can view example custom resources for different Jaeger configurations [on GitHub](https://github.com/jaegertracing/jaeger-operator/tree/master/examples).
# Configuring the Custom Resource
<!--TODO
esIndexCleaner
Spark dependencies
-->
You can use the simplest example (shown above) and create a Jaeger instance using the defaults, or you can create your own custom resource file.
## Storage options
### Cassandra storage
When the storage type is set to Cassandra, the operator will automatically create a batch job that creates the required schema for Jaeger to run. This batch job will block the Jaeger installation, so that it starts only after the schema is successfuly created. The creation of this batch job can be disabled by setting the `enabled` property to `false`:
```yaml
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: cassandra-without-create-schema
spec:
strategy: allInOne
storage:
type: cassandra
cassandraCreateSchema:
enabled: false # <1>
```
<1> Defaults to `true`
Further aspects of the batch job can be configured as well. An example with all the possible options is shown below:
```yaml
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: cassandra-with-create-schema
spec:
strategy: allInOne # <1>
storage:
type: cassandra
options: # <2>
cassandra:
servers: cassandra
keyspace: jaeger_v1_datacenter3
cassandraCreateSchema: # <3>
datacenter: "datacenter3"
mode: "test"
```
<1> The same works for `production` and `streaming`.
<2> These options are for the regular Jaeger components, like `collector` and `query`.
<3> The options for the `create-schema` job.
{{< info >}}
The default create-schema job uses `MODE=prod`, which implies a replication factor of `2`, using `NetworkTopologyStrategy` as the class, effectively meaning that at least 3 nodes are required in the Cassandra cluster. If a `SimpleStrategy` is desired, set the mode to `test`, which then sets the replication factor of `1`. Refer to the [create-schema script](https://github.com/jaegertracing/jaeger/blob/master/plugin/storage/cassandra/schema/create.sh) for more details.
{{< /info >}}
### Elasticsearch storage
By default Elasticsearch storage does not require any initialization job to be run. However Elasticsearch
storage requires a cron job to be run to clean old data from the storage.
When rollover (`es.use-aliases`) is enabled, Jaeger operator also deploys a job to initialize Elasticsearch storage
and another two cron jobs to perform required index management actions.
#### External Elasticsearch
Jaeger can be used with an external Elasticsearch cluster.
The following example shows a Jaeger CR using an external Elasticsearch cluster
with TLS CA certificate mounted from a volume and user/password stored in a secret.
```yaml
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: simple-prod
spec:
strategy: production
storage:
type: elasticsearch # <1>
options:
es:
server-urls: https://elasticsearch.default.svc:9200 # <2>
tls: # <3>
ca: /es/certificates/root-ca.pem
secretName: jaeger-secret # <4>
volumeMounts: # <5>
- name: certificates
mountPath: /es/certificates/
readOnly: true
volumes:
- name: certificates
secret:
secretName: quickstart-es-http-certs-public
```
<1> Storage type Elasticsearch.
<2> Url to Elasticsearch service running in default namespace.
<3> TLS configuration. In this case only CA certificate, but it can also contain `es.tls.key` and `es.tls.cert` when using mutual TLS.
<4> Secret which defines environment variables `ES_PASSWORD` and `ES_USERNAME`. Created by `kubectl create secret generic jaeger-secret --from-literal=ES_PASSWORD=changeme --from-literal=ES_USERNAME=elastic`
<5> Volume mounts and volumes which are mounted into all storage components.
#### Self provisioned
Under some circumstances, the Jaeger Operator can make use of the [Elasticsearch Operator](https://github.com/openshift/elasticsearch-operator) to provision a suitable Elasticsearch cluster.
{{< warning >}}
This feature is supported only on OKD/OpenShift clusters. Spark dependencies are not supported with this feature [Issue #294](https://github.com/jaegertracing/jaeger-operator/issues/294).
{{< /warning >}}
When there is no `es.server-urls` option as part of a Jaeger `production` instance and `elasticsearch` is set as the storage type, the Jaeger Operator creates an Elasticsearch cluster via the Elasticsearch Operator by creating a Custom Resource based on the configuration provided in storage section. The Elasticsearch cluster is meant to be dedicated for a single Jaeger instance.
The self-provision of an Elasticsearch cluster can be disabled by setting the flag `--es-provision` to `false`. The default value is `auto`, which will make the Jaeger Operator query the Kubernetes cluster for its ability to handle a `Elasticsearch` custom resource. This is usually set by the Elasticsearch Operator during its installation process, so, if the Elasticsearch Operator is expected to run *after* the Jaeger Operator, the flag can be set to `true`.
{{< danger >}}
At the moment there can be only one Jaeger with self-provisioned Elasticsearch instance per namespace.
{{< /danger >}}
#### Elasticsearch index cleaner job
When using `elasticsearch` storage by default a cron job is created to clean old traces from it, the options for it are listed below so you can configure it to your use case.
The connection configuration is derived from the storage options.
```yaml
storage:
type: elasticsearch
esIndexCleaner:
enabled: true // turn the cron job deployment on and off
numberOfDays: 7 // number of days to wait before deleting a record
schedule: "55 23 * * *" // cron expression for it to run
```
The connection configuration to storage is derived from storage options.
#### Elasticsearch rollover
This index management strategy is more complicated than using the default daily indices and
it requires an initialisation job to prepare the storage and two cron jobs to manage indices.
The first cron job is used for rolling-over to a new index and the second for removing
indices from read alias. The rollover feature is used when storage option `es.use-aliases` is enabled.
To learn more about rollover index management in Jaeger refer to this
[article](https://medium.com/jaegertracing/using-elasticsearch-rollover-to-manage-indices-8b3d0c77915d).
```yaml
storage:
type: elasticsearch
options:
es:
use-aliases: true
esRollover:
enabled: true // turn the cron job deployment on and off
conditions: "{\"max_age\": \"2d\"}" // conditions when to rollover to a new index
readTTL: 7d // how long should be old data available for reading
schedule: "55 23 * * *" // cron expression for it to run
```
The connection configuration to storage is derived from storage options.
## Deriving dependencies
The processing to derive dependencies will collect spans from storage, analyzes links between services and store them for later presentation in the UI.
This job can only be used with the `production` strategy and storage type `cassandra` or `elasticsearch`.
```yaml
storage:
type: elasticsearch
dependencies:
enabled: true # turn the job deployment on and off
schedule: "55 23 * * *" # cron expression for it to run
sparkMaster: # spark master connection string, when empty spark runs in embedded local mode
```
The connection configuration to storage is derived from storage options.
## Auto-injecting Jaeger Agent Sidecars
The operator can inject Jaeger Agent sidecars in `Deployment` workloads, provided that the deployment has the annotation `sidecar.jaegertracing.io/inject` with a suitable value. The values can be either `"true"` (as string), or the Jaeger instance name, as returned by `kubectl get jaegers`. When `"true"` is used, there should be exactly *one* Jaeger instance for the same namespace as the deployment, otherwise, the operator can't figure out automatically which Jaeger instance to use.
The following snippet shows a simple application that will get a sidecar injected, with the Jaeger Agent pointing to the single Jaeger instance available in the same namespace:
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
annotations:
"sidecar.jaegertracing.io/inject": "true" # <1>
spec:
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: acme/myapp:myversion
```
<1> Either `"true"` (as string) or the Jaeger instance name.
A complete sample deployment is available at [`deploy/examples/business-application-injected-sidecar.yaml`](https://github.com/jaegertracing/jaeger-operator/blob/master/examples/business-application-injected-sidecar.yaml).
When the sidecar is injected, the Jaeger Agent can then be accessed at its default location on `localhost`.
## Installing the Agent as DaemonSet
By default, the Operator expects the agents to be deployed as sidecars to the target applications. This is convenient for several purposes, like in a multi-tenant scenario or to have better load balancing, but there are scenarios where you might want to install the agent as a `DaemonSet`. In that case, specify the Agent's strategy to `DaemonSet`, as follows:
```yaml
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: my-jaeger
spec:
agent:
strategy: DaemonSet
```
{{< danger >}}
If you attempt to install two Jaeger instances on the same cluster with `DaemonSet` as the strategy, only *one* will end up deploying a `DaemonSet`, as the agent is required to bind to well-known ports on the node. Because of that, the second daemon set will fail to bind to those ports.
{{< /danger >}}
Your tracer client will then most likely need to be told where the agent is located. This is usually done by setting the environment variable `JAEGER_AGENT_HOST` to the value of the Kubernetes node's IP, for example:
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: acme/myapp:myversion
env:
- name: JAEGER_AGENT_HOST
valueFrom:
fieldRef:
fieldPath: status.hostIP
```
### OpenShift
In OpenShift, a `HostPort` can only be set when a special security context is set. A separate service account can be used by the Jaeger Agent with the permission to bind to `HostPort`, as follows:
```bash
oc create -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/examples/openshift/hostport-scc-daemonset.yaml # <1>
oc new-project myappnamespace
oc create -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/examples/openshift/service_account_jaeger-agent-daemonset.yaml # <2>
oc adm policy add-scc-to-user daemonset-with-hostport -z jaeger-agent-daemonset # <3>
oc apply -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/examples/openshift/agent-as-daemonset.yaml # <4>
```
<1> The `SecurityContextConstraints` with the `allowHostPorts` policy
<2> The `ServiceAccount` to be used by the Jaeger Agent
<3> Adds the security policy to the service account
<4> Creates the Jaeger Instance using the `serviceAccount` created in the steps above
{{< warning >}}
Without such a policy, errors like the following will prevent a `DaemonSet` to be created: `Warning FailedCreate 4s (x14 over 45s) daemonset-controller Error creating: pods "agent-as-daemonset-agent-daemonset-" is forbidden: unable to validate against any security context constraint: [spec.containers[0].securityContext.containers[0].hostPort: Invalid value: 5775: Host ports are not allowed to be used`
{{< /warning >}}
After a few seconds, the `DaemonSet` should be up and running:
```bash
$ oc get daemonset agent-as-daemonset-agent-daemonset
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE
agent-as-daemonset-agent-daemonset 1 1 1 1 1
```
## Secrets Support
The Operator supports passing secrets to the Collector, Query and All-In-One deployments. This can be used for example, to pass credentials (username/password) to access the underlying storage backend (for example: Elasticsearch).
The secrets are available as environment variables in the (Collector/Query/All-In-One) nodes.
```yaml
storage:
type: elasticsearch
options:
es:
server-urls: http://elasticsearch:9200
secretName: jaeger-secrets
```
The secret itself would be managed outside of the `jaeger-operator` custom resource.
## Configuring the UI
Information on various configuration options for the UI can be found [here](../frontend-ui/#configuration), defined in json format.
To apply UI configuration changes within the Custom Resource, the same information can be included in yaml format as shown below:
```yaml
ui:
options:
dependencies:
menuEnabled: false
tracking:
gaID: UA-000000-2
menu:
- label: "About Jaeger"
items:
- label: "Documentation"
url: "https://www.jaegertracing.io/docs/latest"
linkPatterns:
- type: "logs"
key: "customer_id"
url: /search?limit=20&lookback=1h&service=frontend&tags=%7B%22customer_id%22%3A%22#{customer_id}%22%7D
text: "Search for other traces for customer_id=#{customer_id}"
```
## Defining Sampling Strategies
{{< info >}}
This is not relevant if a trace was started by the Istio proxy as the sampling decision is made there. And the Jaeger sampling decisions are only relevant when you are using the Jaeger tracer (client).
{{< /info >}}
The operator can be used to define sampling strategies that will be supplied to tracers that have been configured to use a remote sampler:
```yaml
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: with-sampling
spec:
strategy: allInOne
sampling:
options:
default_strategy:
type: probabilistic
param: 0.5
```
This example defines a default sampling strategy that is probabilistic, with a 50% chance of the trace instances being sampled.
Refer to the Jaeger documentation on [Collector Sampling Configuration](https://www.jaegertracing.io/docs/latest/sampling/#collector-sampling-configuration) to see how service and endpoint sampling can be configured. The JSON representation described in that documentation can be used in the operator by converting to YAML.
## Finer grained configuration
The custom resource can be used to define finer grained Kubernetes configuration applied to all Jaeger components or at the individual component level.
When a common definition (for all Jaeger components) is required, it is defined under the `spec` node. When the definition relates to an individual component, it is placed under the `spec/<component>` node.
The types of supported configuration include:
* [affinity](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity) to determine which nodes a pod can be allocated to
* [annotations](https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/)
* [labels](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/)
* [resources](https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container) to limit cpu and memory
* [tolerations](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) in conjunction with `taints` to enable pods to avoid being repelled from a node
* [volumes](https://kubernetes.io/docs/concepts/storage/volumes/) and volume mounts
* [serviceAccount](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/) to run each component with separate identity
* [securityContext](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/) to define privileges of running components
```yaml
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: simple-prod
spec:
strategy: production
storage:
type: elasticsearch
options:
es:
server-urls: http://elasticsearch:9200
annotations:
key1: value1
labels:
key2: value2
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/e2e-az-name
operator: In
values:
- e2e-az1
- e2e-az2
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: another-node-label-key
operator: In
values:
- another-node-label-value
tolerations:
- key: "key1"
operator: "Equal"
value: "value1"
effect: "NoSchedule"
- key: "key1"
operator: "Equal"
value: "value1"
effect: "NoExecute"
serviceAccount: nameOfServiceAccount
securityContext:
runAsUser: 1000
volumeMounts:
- name: config-vol
mountPath: /etc/config
volumes:
- name: config-vol
configMap:
name: log-config
items:
- key: log_level
path: log_level
```
# Accessing the Jaeger Console (UI)
<!-- TODO Add tabs shortcode -->
## Kubernetes
The operator creates a Kubernetes [`ingress`](https://kubernetes.io/docs/concepts/services-networking/ingress/) route, which is the Kubernetes' standard for exposing a service to the outside world, but by default it does not come with Ingress providers.
Check the [Kubernetes documentation](https://kubernetes.github.io/ingress-nginx/deploy/#verify-installation) for the most appropriate way to achieve an Ingress provider for your platform. The following command enables the Ingress provider on `minikube`:
```bash
minikube addons enable ingress
```
Once Ingress is enabled, the address for the Jaeger console can be found by querying the Ingress object:
```bash
$ kubectl get ingress
NAME HOSTS ADDRESS PORTS AGE
simplest-query * 192.168.122.34 80 3m
```
In this example, the Jaeger UI is available at http://192.168.122.34.
To enable TLS in the Ingress, pass a `secretName` with the name of a [Secret](https://kubernetes.io/docs/concepts/configuration/secret/) containing the TLS certificate:
```yaml
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: ingress-with-tls
spec:
ingress:
secretName: my-tls-secret
```
## OpenShift
When the Operator is running on OpenShift, the Operator will automatically create a `Route` object for the query services. Use the following command to check the hostname/port:
```bash
oc get routes
```
{{< info >}}
Make sure to use `https` with the hostname/port you get from the command above, otherwise you'll see a message like: "Application is not available".
{{< /info >}}
By default, the Jaeger UI is protected with OpenShift's OAuth service and any valid user is able to login. To disable this feature and leave the Jaeger UI unsecured, set the Ingress property `security` to `none` in the custom resource file:
```yaml
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: disable-oauth-proxy
spec:
ingress:
security: none
```
Custom `SAR` and `Delegate URL` values can be specified as part of the `.Spec.Ingress.OpenShift.SAR` and `.Spec.Ingress.Openshift.DelegateURLs`, as follows:
```yaml
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: custom-sar-oauth-proxy
spec:
ingress:
openshift:
sar: '{"namespace": "default", "resource": "pods", "verb": "get"}'
delegateUrls: '{"/":{"namespace": "default", "resource": "pods", "verb": "get"}}'
```
When the `delegateUrls` is set, the Jaeger Operator needs to create a new `ClusterRoleBinding` between the service account used by the UI Proxy (`{InstanceName}-ui-proxy`) and the role `system:auth-delegator`, as required by the OpenShift OAuth Proxy. Because of that, the service account used by the operator itself needs to have the same cluster role binding. To accomplish that, a `ClusterRoleBinding` such as the following has to be created:
```yaml
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: jaeger-operator-with-auth-delegator
namespace: observability
subjects:
- kind: ServiceAccount
name: jaeger-operator
namespace: observability
roleRef:
kind: ClusterRole
name: system:auth-delegator
apiGroup: rbac.authorization.k8s.io
```
Cluster administrators not comfortable in letting users deploy Jaeger instances with this cluster role are free to not add this cluster role to the operator's service account. In that case, the Operator will auto-detect that the required permissions are missing and will log a message similar to: `the requested instance specifies the delegateUrls option for the OAuth Proxy, but this operator cannot assign the proper cluster role to it (system:auth-delegator). Create a cluster role binding between the operator's service account and the cluster role 'system:auth-delegator' in order to allow instances to use 'delegateUrls'`.
The Jaeger Operator also supports authentication using `htpasswd` files via the OpenShift OAuth Proxy. To make use of that, specify the `htpasswdFile` option within the OpenShift-specific entries, pointing to the file `htpasswd` file location in the local disk. The `htpasswd` file can be created using the `htpasswd` utility:
```console
$ htpasswd -cs /tmp/htpasswd jdoe
New password:
Re-type new password:
Adding password for user jdoe
```
This file can then be used as the input for the `kubectl create secret` command:
```console
$ kubectl create secret generic htpasswd --from-file=htpasswd=/tmp/htpasswd
secret/htpasswd created
```
Once the secret is created, it can be specified in the Jaeger CR as a volume/volume mount:
```yaml
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: with-htpasswd
spec:
ingress:
openshift:
sar: '{"namespace": "default", "resource": "pods", "verb": "get"}'
htpasswdFile: /usr/local/data/htpasswd
volumeMounts:
- name: htpasswd-volume
mountPath: /usr/local/data
volumes:
- name: htpasswd-volume
secret:
secretName: htpasswd
```
# Upgrading the Operator and its managed instances
Each version of the Jaeger Operator follows one Jaeger version. Whenever a new version of the Jaeger Operator is installed, all the Jaeger instances managed by the operator will be upgraded to the Operator's supported version. For example, an instance named `simplest` that was created with Jaeger Operator 1.12.0 will be running Jaeger 1.12.0. Once the Jaeger Operator is upgraded to 1.13.0, the instance `simplest` will be upgraded to the version 1.13.0, following the official upgrade instructions from the Jaeger project.
The Jaeger Operator can be upgraded manually by changing the deployment (`kubectl edit deployment jaeger-operator`), or via specialized tools such as the [Operator Lifecycle Manager (OLM)](https://github.com/operator-framework/operator-lifecycle-manager).
# Updating a Jaeger instance (experimental)
A Jaeger instance can be updated by changing the `CustomResource`, either via `kubectl edit jaeger simplest`, where `simplest` is the Jaeger's instance name, or by applying the updated YAML file via `kubectl apply -f simplest.yaml`.
{{< danger >}}
The name of the Jaeger instance cannot be updated, as it is part of the identifying information for the resource.
{{< /danger >}}
Simpler changes such as changing the replica sizes can be applied without much concern, whereas changes to the strategy should be watched closely and might potentially cause an outage for individual components (collector/query/agent).
While changing the backing storage is supported, migration of the data is not.
# Removing a Jaeger instance
<!-- TODO Add OKD/OpenShift commands and tabs shortcode-->
To remove an instance, use the `delete` command with the custom resource file used when you created the instance:
```bash
kubectl delete -f simplest.yaml
```
Alternatively, you can remove a Jaeger instance by running:
```bash
kubectl delete jaeger simplest
```
{{< info >}}
Deleting the instance will not remove the data from any permanent storage used with this instance. Data from in-memory instances, however, will be lost.
{{< /info >}}
# Monitoring the operator
The Jaeger Operator starts a Prometheus-compatible endpoint on `0.0.0.0:8383/metrics` with internal metrics that can be used to monitor the process.
{{< info >}}
The Jaeger Operator does not yet publish its own metrics. Rather, it makes available metrics reported by the components it uses, such as the Operator SDK.
{{< /info >}}
# Uninstalling the operator
<!-- TODO Add OKD/OpenShift commands and tabs shortcode -->
To uninstall the operator, run the following commands:
```bash
kubectl delete -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/operator.yaml
kubectl delete -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/role_binding.yaml
kubectl delete -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/role.yaml
kubectl delete -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/service_account.yaml
kubectl delete -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/crds/jaegertracing.io_jaegers_crd.yaml
```

View File

@ -1,95 +0,0 @@
---
title: Performance Tuning Guide
description: Tweaking your Jaeger instance to achieve a better performance
weight: 10
---
Jaeger was built from day 1 to be able to ingest huge amounts of data in a resilient way. To better utilize resources that might cause delays, such as storage or network communications, Jaeger buffers and batches data. When more spans are generated than Jaeger is able to safely process, spans might get dropped. However, the defaults might not fit all scenarios: for instance, Agents running as a sidecar might have more memory constraints than Agents running as a daemon in bare metal.
## Deployment considerations
Although performance tuning the individual components is important, the way Jaeger is deployed can be decisive in obtaining optimal performance.
### Scale the Collector up and down
Use the auto-scaling capabilities of your platform: the Collector is nearly horizontally scalable so that more instances can be added and removed on-demand. A good way to scale up and down is by checking the `jaeger_collector_queue_length` metric: add instances when the length is higher than 50% of the maximum size for extended periods of time. Another metric that can be taken into consideration is `jaeger_collector_in_queue_latency_bucket`, which is a histogram indicating how long spans have been waiting in the queue before a worker picked it up. When the queue latency gets higher over time, its a good indication to increase the number of the workers, or to improve the storage performance.
Adding Collector instances is recommended when your platform provides auto-scaling capabilities, or when it's easier to start/stop Collector instances than changing existing, running instances. Scaling horizontally is also indicated when the CPU usage should be spread across nodes.
### Make sure the storage can keep up
Each span is written to the storage by the Collector using one worker, blocking it until the span has been stored. When the storage is too slow, the number of workers blocked by the storage might be too high, causing spans to be dropped. To help diagnose this situation, the histogram `jaeger_collector_save_latency_bucket` can be analyzed. Ideally, the latency should remain the same over time. When the histogram shows that most spans are taking longer and longer over time, its a good indication that your storage might need some attention.
### Place the Agents close to your applications
The Agent is meant to be placed on the same host as the instrumented application, in order to avoid UDP packet loss over the network. This is typically accomplished by having one Agent per bare metal host for traditional applications, or as a sidecar in container environments like Kubernetes, as this helps spread the load handled by Agents with the additional advantage of allowing each Agent to be tweaked individually, according to the applications needs and importance.
### Consider using Apache Kafka as intermediate buffer
Jaeger [can use Apache Kafka](../architecture/) as a buffer between the Collector and the actual backing storage (Elasticsearch, Apache Cassandra). This is ideal for cases where the traffic spikes are relatively frequent (prime time traffic) but the storage can eventually catch up once the traffic normalizes. For that, the `SPAN_STORAGE_TYPE` environment variable should be set to `kafka` in the Collector and the Jaeger Ingester component can be used, reading data from Kafka and writing it to the storage.
In addition to the performance aspects, having spans written to Kafka is useful for building real time data pipeline for aggregations and feature extraction from traces.
## Client (Tracer) settings
The Jaeger Clients are built to have minimal effect to the instrumented application. As such, it has conservative defaults that might not be suitable for all cases. Note that Jaeger Clients can be configured programmatically or via [environment variables](../client-features/).
### Adjust the sampling configuration
Together, the `JAEGER_SAMPLER_TYPE` and `JAEGER_SAMPLER_PARAM` specify how often traces should be "sampled", ie, recorded and sent to the Jaeger backend. For applications generating a large number of spans, setting the sampling type to `probabilistic` and the value to `0.001` (the default) will cause traces to be reported with a 1/1000th chance. Note that the sampling decision is made at the root span and propagated down to all child spans.
For applications with low to medium traffic, setting the sampling type to `const` and value to `1` will cause all spans to be reported. Similarly, tracing can be disabled by setting the value to `0`, while context propagation will continue to work.
Some Clients support the setting `JAEGER_DISABLED` to completely disable the Jaeger Tracer. This is recommended only if the Tracer is behaving in a way that causes problems to the instrumented application, as it will not propagate the context to the downstream services.
{{< info >}}
We recommend to set your clients to use the [`remote` sampling strategy](../sampling/#collector-sampling-configuration), so that admins can centrally set the concrete sampling strategy for each service.
{{< /info >}}
### Increase in-memory queue size
Most of the Jaeger clients, such as the Java, Go, and C# clients, buffer spans in memory before sending them to the Jaeger Agent/Collector. The maximum size of this buffer is defined by the environment variable `JAEGER_REPORTER_MAX_QUEUE_SIZE` (default value: about `100` spans): the larger the size, the higher the potential memory consumption. When the instrumented application is generating a large number of spans, its possible that the queue will be full causing the Client to discard the new spans (metric `jaeger_tracer_reporter_spans_total{result="dropped",}`).
In most common scenarios, the queue will be close to empty (metric: `jaeger_tracer_reporter_queue_length`), as spans are flushed to the Agent or Collector at regular intervals or when a certain size of the batch is reached. The detailed behavior of this queue is described in this [GitHub issue](https://github.com/jaegertracing/jaeger-client-java/issues/607).
### Modify the batched spans flush interval
The Java, Go, NodeJS, Python and C# Clients allow the customization of the flush interval (default value: `1000` milliseconds, or 1 second) used by the reporters, such as the `RemoteReporter`, to trigger a `flush` operation, sending all in-memory spans to the Agent or Collector. The lower the flush interval is set to, the more frequent the flush operations happen. As most reporters will wait until enough data is in the queue, this setting will force a flush operation at periodic intervals, so that spans are sent to the backend in a timely fashion.
When the instrumented application is generating a large number of spans and the Agent/Collector is close to the application, the networking overhead might be low, justifying a higher number of flush operations. When the `HttpSender` is being used and the Collector is not close enough to the application, the networking overhead might be too high so that a higher value for this property makes sense.
## Agent settings
Jaeger Agents receive data from Clients, sending them in batches to the Collector. When not properly configured, it might end up discarding data even if the host machine has plenty of resources.
### Adjust server queue sizes
The set of “server queue size” properties ( `processor.jaeger-binary.server-queue-size`, `processor.jaeger-compact.server-queue-size`, `processor.zipkin-compact.server-queue-size`) indicate the maximum number of span batches that the Agent can accept and store in memory. Its safe to assume that `jaeger-compact` is the most important processor in your Agent setup, as its the only one available in most Clients, such as the Java and Go Clients.
The default value for each queue is `1000` span batches. Given that each span batch has up to 64KiB worth of spans, each queue can hold up to 64MiB worth of spans.
In typical scenarios, the queue will be close to empty (metric `jaeger_agent_thrift_udp_server_queue_size`) as span batches should be quickly picked up and processed by a worker. However, sudden spikes in the number of span batches submitted by Clients might occur, causing the batches to be queued. When the queue is full, the older batches are overridden causing spans to be discarded (metric `jaeger_agent_thrift_udp_server_packets_dropped_total`).
### Adjust processor workers
The set of “processor workers” properties ( `processor.jaeger-binary.workers`, `processor.jaeger-compact.workers`, `processor.zipkin-compact.workers`) indicate the number of parallel span batch processors to start. Each worker type has a default size of `10`. In general, span batches are processed as soon as they are placed in the server queue and will block a worker until the whole packet is sent to the Collector. For Agents processing data from multiple Clients, the number of workers should be increased. Given that the cost of each worker is low, a good rule of thumb is 10 workers per Client with moderate traffic: given that each span batch might contain up to 64KiB worth of spans, it means that 10 workers are able to send about 640KiB concurrently to a Collector.
## Collector settings
The Collector receives data from Clients and Agents. When not properly configured, it might process less data than what would be possible on the same host, or it might overload the host by consuming more memory than permitted.
### Adjust queue size
Similar to the Agent, the Collector is able to receive spans and place them in an internal queue for processing. This allows the Collector to return immediately to the Client/Agent instead of waiting for the span to make its way to the storage.
The setting `collector.queue-size` (default: `2000`) dictates how many spans the queue should support. In the typical scenario, the queue will be close to empty, as enough workers should exist picking up spans from the queue and sending them to the storage. When the number of items in the queue (metric `jaeger_collector_queue_length`) is permanently high, its an indication that either the number of workers should be increased or that the storage cannot keep up with the volume of data that its receiving. When the queue is full, the older items in the queue are overridden, causing spans to be discarded (metric `jaeger_collector_spans_dropped_total`).
{{< warning >}}
The queue size for the Agent is about _span batches_, whereas the queue size for the Collector is about _individual spans_.
{{< /warning >}}
Given that the queue size should be close to empty most of the time, this setting should be as high as the available memory for the Collector, to provide maximum protection against sudden traffic spikes. However, if your storage layer is under-provisioned and cannot keep up, even a large queue will quickly fill up and start dropping data.
### Adjust processor workers
Items from the span queue in the Collector are picked up by workers. Each worker picks one span from the queue and persists it to the storage. The number of workers can be specified by the setting `collector.num-workers` (default: `50`) and should be as high as needed to keep the queue close to zero. The general rule is: the faster the backing storage, the lower the number of workers can be. Given that workers are relatively cheap, this number can be increased at will. As a general rule, one worker per 50 items in the queue should be sufficient when the storage is fast. With a `collector.queue-size` of `2000`, having about `40` workers should be sufficient. For slower storage mechanisms, this ratio should be adjusted accordingly, having more workers per queue item.

View File

@ -1,66 +0,0 @@
---
title: Sampling
hasparent: true
---
Jaeger libraries implement consistent upfront (or head-based) sampling. For example, assume we have a simple call graph where service A calls service B, and B calls service C: `A -> B -> C`. When service A receives a request that contains no tracing information, Jaeger tracer will start a new {{< tip "trace" >}}, assign it a random trace ID, and make a sampling decision based on the currently installed sampling strategy. The sampling decision will be propagated with the requests to B and to C, so those services will not be making the sampling decision again but instead will respect the decision made by the top service A. This approach guarantees that if a trace is sampled, all its {{< tip "spans" "span" >}} will be recorded in the backend. If each service was making its own sampling decision we would rarely get complete traces in the backend.
## Client Sampling Configuration
When using configuration object to instantiate the tracer, the type of sampling can be selected via `sampler.type` and `sampler.param` properties. Jaeger libraries support the following samplers:
* **Constant** (`sampler.type=const`) sampler always makes the same decision for all traces. It either samples all traces (`sampler.param=1`) or none of them (`sampler.param=0`).
* **Probabilistic** (`sampler.type=probabilistic`) sampler makes a random sampling decision with the probability of sampling equal to the value of `sampler.param` property. For example, with `sampler.param=0.1` approximately 1 in 10 traces will be sampled.
* **Rate Limiting** (`sampler.type=ratelimiting`) sampler uses a leaky bucket rate limiter to ensure that traces are sampled with a certain constant rate. For example, when `sampler.param=2.0` it will sample requests with the rate of 2 traces per second.
* **Remote** (`sampler.type=remote`, which is also the default) sampler consults Jaeger agent for the appropriate sampling strategy to use in the current service. This allows controlling the sampling strategies in the services from a [central configuration](#collector-sampling-configuration) in Jaeger backend, or even dynamically (see [Adaptive Sampling](https://github.com/jaegertracing/jaeger/issues/365)).
### Adaptive Sampler
Adaptive sampler is a composite sampler that combines two functions:
* It makes sampling decisions on a per-operation basis, i.e. based on {{< tip "span" >}} operation name. This is especially useful in the API services whose endpoints may have very different traffic volumes and using a single probabilistic sampler for the whole service might starve (never sample) some of the low QPS endpoints.
* It supports a minimum guaranteed rate of sampling, such as always allowing up to N {{< tip "traces" "trace" >}} per seconds and then sampling anything above that with a certain probability (everything is per-operation, not per-service).
Per-operation parameters can be configured statically or pulled periodically from Jaeger backend with the help of Remote sampler. Adaptive sampler is designed to work with the upcoming [Adaptive Sampling](https://github.com/jaegertracing/jaeger/issues/365) feature of the Jaeger backend.
## Collector Sampling Configuration
Collectors can be instantiated with static sampling strategies (which are propagated to the respective service if configured with Remote sampler) via the `--sampling.strategies-file` option. This option requires a path to a json file which have the sampling strategies defined.
Example `strategies.json`
```json
{
"service_strategies": [
{
"service": "foo",
"type": "probabilistic",
"param": 0.8,
"operation_strategies": [
{
"operation": "op1",
"type": "probabilistic",
"param": 0.2
},
{
"operation": "op2",
"type": "probabilistic",
"param": 0.4
}
]
},
{
"service": "bar",
"type": "ratelimiting",
"param": 5
}
],
"default_strategy": {
"type": "probabilistic",
"param": 0.5
}
}
```
`service_strategies` defines service specific sampling strategies and `operation_strategies` defines operation specific sampling strategies. There are 2 types of strategies possible: `probabilistic` and `ratelimiting` which are described [above](#client-sampling-configuration) (NOTE: `ratelimiting` is not supported for `operation_strategies`). `default_strategy` defines the catch-all sampling strategy that is propagated if the service is not included as part of `service_strategies`.
In the above example, all service `foo` operations are sampled probabilistically with a probability of 0.8 except `op1` and `op2` which are probabilistically sampled with a probability of 0.2 and 0.4 respectively. All operations for service `bar` are ratelimited at 5 traces per second. Any other service is probabilistically sampled with a probability of 0.5.

View File

@ -1,43 +0,0 @@
---
title: Windows Service Deployment
hasparent: true
---
In Windows environments, Jaeger processes can be hosted and managed as Windows services controlled via the `sc` utility. To configure such services on Windows, download [nssm.exe](https://nssm.cc/download) for the appropriate architecture, and issue commands similar to how Jaeger is typically run. The example below showcases a basic Elasticsearch setup, configured using both environment variables and process arguments.
## Agent
```bat
nssm install JaegerAgent C:\Jaeger\jaeger-agent.exe --reporter.grpc.host-port=localhost:14250
nssm set JaegerAgent AppStdout C:\Jaeger\jaeger-agent.out.log
nssm set JaegerAgent AppStderr C:\Jaeger\jaeger-agent.err.log
nssm set JaegerAgent Description Jaeger Agent service
nssm start JaegerAgent
```
## Collector
```bat
nssm install JaegerCollector C:\Jaeger\jaeger-collector.exe --es.server-urls=http://localhost:9200 --es.username=jaeger --es.password=PASSWORD
nssm set JaegerCollector AppStdout C:\Jaeger\jaeger-collector.out.log
nssm set JaegerCollector AppStderr C:\Jaeger\jaeger-collector.err.log
nssm set JaegerCollector Description Jaeger Collector service
nssm set JaegerCollector AppEnvironmentExtra SPAN_STORAGE_TYPE=elasticsearch
nssm start JaegerCollector
```
## Query UI
```bat
nssm install JaegerUI C:\Jaeger\jaeger-query.exe --es.server-urls=http://localhost:9200 --es.username=jaeger --es.password=PASSWORD
nssm set JaegerUI AppStdout C:\Jaeger\jaeger-ui.out.log
nssm set JaegerUI AppStderr C:\Jaeger\jaeger-ui.err.log
nssm set JaegerUI Description Jaeger Query service
nssm set JaegerUI AppEnvironmentExtra SPAN_STORAGE_TYPE=elasticsearch
nssm start JaegerUI
```
For additional information & docs, please see [the NSSM usage guide.](https://nssm.cc/usage)

View File

@ -1,70 +0,0 @@
---
title: Introduction
weight: 1
children:
- title: Features
url: features
---
Welcome to Jaeger's documentation portal! Below, you'll find information for beginners and experienced Jaeger users.
If you can't find what you are looking for, or have an issue not covered here, we'd love to [hear from you](/get-in-touch).
## About
Jaeger, inspired by [Dapper][dapper] and [OpenZipkin](http://zipkin.io),
is a distributed tracing system released as open source by [Uber Technologies][ubeross].
It is used for monitoring and troubleshooting microservices-based distributed systems, including:
* Distributed context propagation
* Distributed transaction monitoring
* Root cause analysis
* Service dependency analysis
* Performance / latency optimization
Uber published a blog post, [Evolving Distributed Tracing at Uber](https://eng.uber.com/distributed-tracing/), where they explain the history and reasons for the architectural choices made in Jaeger. [Yuri Shkuro](https://shkuro.com), creator of Jaeger, also published a book [Mastering Distributed Tracing](https://shkuro.com/books/2019-mastering-distributed-tracing/) that covers in-depth many aspects of Jaeger design and operation, as well as distributed tracing in general.
## Features
* [OpenTracing](http://opentracing.io/) compatible data model and instrumentation libraries
* in [Go](https://github.com/jaegertracing/jaeger-client-go), [Java](https://github.com/jaegertracing/jaeger-client-java), [Node](https://github.com/jaegertracing/jaeger-client-node), [Python](https://github.com/jaegertracing/jaeger-client-python)
and [C++](https://github.com/jaegertracing/cpp-client)
* Uses consistent upfront sampling with individual per service/endpoint probabilities
* Multiple storage backends: Cassandra, Elasticsearch, memory.
* Adaptive sampling (coming soon)
* Post-collection data processing pipeline (coming soon)
See [Features](./features/) page for more details.
## Technical Specs
* Backend components implemented in Go
* React/Javascript UI
* Supported storage backends:
* [Cassandra 3.4+](./deployment/#cassandra)
* [Elasticsearch 5.x, 6.x, 7.x](./deployment/#elasticsearch)
* [Kafka](./deployment/#kafka)
* memory storage
## Quick Start
See [running a docker all in one image](getting-started#all-in-one).
## Screenshots
### Traces View
[![Traces View](/img/traces-ss.png)](/img/traces-ss.png)
### Trace Detail View
[![Detail View](/img/trace-detail-ss.png)](/img/trace-detail-ss.png)
## Related links
- [Evolving Distributed tracing At Uber Engineering](https://eng.uber.com/distributed-tracing/)
- [Mastering Distributed Tracing](https://shkuro.com/books/2019-mastering-distributed-tracing/)
- [Tracing HTTP request latency in Go with OpenTracing](https://medium.com/opentracing/tracing-http-request-latency-in-go-with-opentracing-7cc1282a100a)
- [Distributed Tracing with Jaeger & Prometheus on Kubernetes](https://blog.openshift.com/openshift-commons-briefing-82-distributed-tracing-with-jaeger-prometheus-on-kubernetes/)
- [Using Jaeger with Istio](https://istio.io/docs/tasks/telemetry/distributed-tracing.html)
- [Using Jaeger with Envoy](https://www.envoyproxy.io/docs/envoy/latest/start/sandboxes/jaeger_tracing.html)
[dapper]: https://research.google.com/pubs/pub36356.html
[ubeross]: http://uber.github.io

View File

@ -1,87 +0,0 @@
---
title: APIs
hasparent: true
---
Jaeger components implement various APIs for saving or retrieving trace data.
The following labels are used to describe API compatibility guarantees.
* **stable** - the API guarantees backwards compatibility. If breaking changes are going to be made in the future, they will result in a new API version, e.g. `/api/v2` URL prefix or a different namespace in the IDL.
* **internal** - the APIs intended for internal communications between Jaeger components and not recommended for use by external components.
* **deprecated** - the APIs that are only maintained for legacy reasons and will be phased out in the future.
## Span reporting APIs
Agent and Collector are the two components of the Jaeger backend that can receive spans. At this time they support two sets of non-overlapping APIs.
### Thrift over UDP (stable)
The Agent can only receive spans over UDP in Thrift format. The primary API is a UDP packet that contains a Thrift-encoded `Batch` struct defined in [jaeger.thrift][jaeger.thrift] IDL file, located in the [jaeger-idl][jaeger-idl] repository. Most Jaeger Clients use Thrift's `compact` encoding, however some client libraries do not support it (notably, Node.js) and use Thrift's `binary` encoding (sent to a different UDP port). The Agent's API is defined by [agent.thrift][agent.thrift] IDL file.
For legacy reasons, the Agent also accepts spans in Zipkin format, however, only very old versions of Jaeger clients can send data in that format and it is officially deprecated.
### Protobuf via gRPC (stable)
In a typical Jaeger deployment, Agents receive spans from Clients and forward them to Collectors. Since Jaeger version 1.11 the official and recommended protocol between Agents and Collectors is gRPC with Protobuf.
The Protobuf IDL [collector.proto][collector.proto] is currently located in the main Jaeger repository, under [model/proto/api_v2][collector.proto]. In the future it will be moved to [jaeger-idl][jaeger-idl] repository ([jaeger-idl/issues/55](https://github.com/jaegertracing/jaeger-idl/issues/55)).
### Thrift over HTTP (stable)
In some cases it is not feasible to deploy Jaeger Agent next to the application, for example, when the application code is running as AWS Lambda function. In these scenarios the Jaeger Clients can be configured to submit spans directly to the Collectors over HTTP/HTTPS.
The same [jaeger.thrift][jaeger.thrift] payload can be submitted in HTTP POST request to `/api/traces` endpoint, for example, `https://jaeger-collector:14268/api/traces`. The `Batch` struct needs to be encoded using Thrift's `binary` encoding, and the HTTP request should specify the content type header:
```
Content-Type: application/vnd.apache.thrift.binary
```
### JSON over HTTP (n/a)
There is no official Jaeger JSON format that can be accepted by the collector. In the future the Protobuf-generated JSON may be supported.
### Thrift via TChannel (deprecated)
Agent and Collector can communicate using TChannel protocol. This protocol is generally not supported by the routing infrastructure and has been deprecated. It will be eventually removed from Jaeger.
### Zipkin Formats (stable)
Jaeger Collector can also accept spans in several Zipkin data format, namely JSON v1/v2 and Thrift. The Collector needs to be configured to enable Zipkin HTTP server, e.g. on port 9411 used by Zipkin collectors. The server enables two endpoints that expect POST requests:
* `/api/v1/spans` for submitting spans in Zipkin JSON v1 or Zipkin Thrift format.
* `/api/v2/spans` for submitting spans in Zipkin JSON v2.
## Trace retrieval APIs
Traces saved in the storage can be retrieved by calling Jaeger Query Service.
### gRPC/Protobuf (stable)
The recommended way for programmatically retrieving traces and other data is via gRPC endpoint defined in [query.proto][query.proto] IDL file (located in the main Jaeger repository, similar to [collector.proto][collector.proto]).
### HTTP JSON (internal)
Jaeger UI communicates with Jaeger Query Service via JSON API. For example, a trace can be retrieved via GET request to `https://jaeger-query:16686/api/traces/{trace-id-hex-string}`. This JSON API is intentionally undocumented and subject to change.
## Clients configuration (internal)
Client libraries not only submit finished spans to Jaeger backend, but also periodically poll the Agents for various configurations, such as sampling strategies. The schema for the payload is defined by [sampling.thrift][sampling.thrift], encoded as JSON using Thrift's built-in JSON generation capabilities.
## Service dependencies graph (internal)
Can be retrieved from Query Service at `/api/dependencies` endpoint. The GET request expects two parameters:
* `endTs` (number of milliseconds since epoch) - the end of the time interval
* `lookback` (in milliseconds) - the length the time interval (i.e. start-time + lookback = end-time).
The returned JSON is a list of edges represented as tuples `(caller, callee, count)`.
For programmatic access to service graph, the recommended API is gRPC/Protobuf described above.
[jaeger-idl]: https://github.com/jaegertracing/jaeger-idl/
[jaeger.thrift]: https://github.com/jaegertracing/jaeger-idl/blob/master/thrift/jaeger.thrift
[agent.thrift]: https://github.com/jaegertracing/jaeger-idl/blob/master/thrift/agent.thrift
[sampling.thrift]: https://github.com/jaegertracing/jaeger-idl/blob/master/thrift/sampling.thrift
[collector.proto]: https://github.com/jaegertracing/jaeger/blob/master/model/proto/api_v2/collector.proto
[query.proto]: https://github.com/jaegertracing/jaeger/blob/master/model/proto/api_v2/query.proto

View File

@ -1,13 +0,0 @@
---
title: CLI flags
widescreen: true
hasparent: true
---
This is auto-generated documentation for CLI flags supported by Jaeger binaries.
* CLI flags for some binaries change depending on the `SPAN_STORAGE_TYPE` environment variable. Relevant variations are included below.
* Some binaries support _commands_ (mostly informational), such as `env`, `docs`, and `version`. These commands are not included here.
* All parameters can be also provided via environment variables, by changing all letters to upper-case and replacing all punctuation characters with underscore `_`. For example, the value for the flag `--cassandra.connections-per-host` can be provided via `CASSANDRA_CONNECTIONS_PER_HOST` environment variable.
{{< cli/tools-list >}}

View File

@ -1,469 +0,0 @@
---
title: Deployment
weight: 4
children:
- title: Operator for Kubernetes
navtitle: Kubernetes
url: operator
- title: Frontend/UI
url: frontend-ui
- title: Windows
url: windows
- title: CLI Flags
url: cli
---
The main Jaeger backend components are released as Docker images on Docker Hub:
Component | Repository
--------------------- | ---
**jaeger-agent** | [hub.docker.com/r/jaegertracing/jaeger-agent/](https://hub.docker.com/r/jaegertracing/jaeger-agent/)
**jaeger-collector** | [hub.docker.com/r/jaegertracing/jaeger-collector/](https://hub.docker.com/r/jaegertracing/jaeger-collector/)
**jaeger-query** | [hub.docker.com/r/jaegertracing/jaeger-query/](https://hub.docker.com/r/jaegertracing/jaeger-query/)
**jaeger-ingester** | [hub.docker.com/r/jaegertracing/jaeger-ingester/](https://hub.docker.com/r/jaegertracing/jaeger-ingester/)
There are orchestration templates for running Jaeger with:
* Kubernetes: [github.com/jaegertracing/jaeger-kubernetes](https://github.com/jaegertracing/jaeger-kubernetes),
* OpenShift: [github.com/jaegertracing/jaeger-openshift](https://github.com/jaegertracing/jaeger-openshift).
## Configuration Options
Jaeger binaries can be configured in a number of ways (in the order of decreasing priority):
* command line arguments,
* environment variables,
* configuration files in JSON, TOML, YAML, HCL, or Java properties formats.
To see the complete list of options, run the binary with `help` command. Options that are specific to a certain storage backend are only listed if the storage type is selected. For example, to see all available options in the Collector with Cassandra storage:
```sh
$ docker run --rm \
-e SPAN_STORAGE_TYPE=cassandra \
jaegertracing/jaeger-collector:{{< currentVersion >}} \
help
```
In order to provide configuration parameters via environment variables, find the respective command line option and convert its name to UPPER_SNAKE_CASE, for example:
Command line option | Environment variable
-----------------------------------|-------------------------------
`--cassandra.connections-per-host` | `CASSANDRA_CONNECTIONS_PER_HOST`
`--metrics-backend` | `METRICS_BACKEND`
## Agent
Jaeger client libraries expect **jaeger-agent** process to run locally on each host.
The agent exposes the following ports:
Port | Protocol | Function
----- | ------- | ---
6831 | UDP | accept [jaeger.thrift][jaeger-thrift] in `compact` Thrift protocol used by most current Jaeger clients
6832 | UDP | accept [jaeger.thrift][jaeger-thrift] in `binary` Thrift protocol used by Node.js Jaeger client (because [thriftrw][thriftrw] npm package does not support `compact` protocol)
5778 | HTTP | serve configs, sampling strategies
5775 | UDP | accept [zipkin.thrift][zipkin-thrift] in `compact` Thrift protocol (deprecated; only used by very old Jaeger clients, circa 2016)
14271 | HTTP | Healthcheck at `/` and metrics at `/metrics`
It can be executed directly on the host or via Docker, as follows:
```sh
## make sure to expose only the ports you use in your deployment scenario!
docker run \
--rm \
-p6831:6831/udp \
-p6832:6832/udp \
-p5778:5778/tcp \
-p5775:5775/udp \
jaegertracing/jaeger-agent:{{< currentVersion >}}
```
### Discovery System Integration
The agents can connect point to point to a single collector address, which could be
load balanced by another infrastructure component (e.g. DNS) across multiple collectors.
The agent can also be configured with a static list of collector addresses.
On Docker, a command like the following can be used:
```sh
docker run \
--rm \
-p5775:5775/udp \
-p6831:6831/udp \
-p6832:6832/udp \
-p5778:5778/tcp \
jaegertracing/jaeger-agent:{{< currentVersion >}} \
--reporter.grpc.host-port=jaeger-collector.jaeger-infra.svc:14250
```
Or use `--reporter.tchannel.host-port=jaeger-collector.jaeger-infra.svc:14267` to use
legacy tchannel reporter.
When using gRPC, you have several options for load balancing and name resolution:
* Single connection and no load balancing. This is the default if you specify a single `host:port`. (example: `--reporter.grpc.host-port=jaeger-collector.jaeger-infra.svc:14250`)
* Static list of hostnames and round-robin load balancing. This is what you get with a comma-separated list of addresses. (example: `reporter.grpc.host-port=jaeger-collector1:14250,jaeger-collector2:14250,jaeger-collector3:14250`)
* Dynamic DNS resolution and round-robin load balancing. To get this behaviour, prefix the address with `dns:///` and gRPC will attempt to resolve the hostname using SRV records (for [external load balancing](https://github.com/grpc/grpc/blob/master/doc/load-balancing.md)), TXT records (for [service configs](https://github.com/grpc/grpc/blob/master/doc/service_config.md)), and A records. Refer to the [gRPC Name Resolution docs](https://github.com/grpc/grpc/blob/master/doc/naming.md) and the [dns_resolver.go implementation](https://github.com/grpc/grpc-go/blob/master/resolver/dns/dns_resolver.go) for more info. (example: `--reporter.grpc.host-port=dns:///jaeger-collector.jaeger-infra.svc:14250`)
### Agent level tags
Jaeger supports agent level tags, that can be added to the process tags of all spans passing through the agent. This is supported through the command line flag `--agent.tags=key1=value1,key2=value2,...,keyn=valuen`. Tags can also be set through an environment flag like so - `--agent.tags=key=${envFlag:defaultValue}` - The tag value will be set to the value of the `envFlag` environment key and `defaultValue` if not set. This feature is not supported for the tchannel reporter, enabled using the flags `--collector.host-port` or `--reporter.tchannel.host-port`.
## Collectors
The collectors are stateless and thus many instances of **jaeger-collector** can be run in parallel.
Collectors require almost no configuration, except for the location of Cassandra cluster,
via `--cassandra.keyspace` and `--cassandra.servers` options, or the location of Elasticsearch cluster, via
`--es.server-urls`, depending on which storage is specified. To see all command line options run
```sh
go run ./cmd/collector/main.go -h
```
or, if you don't have the source code
```sh
docker run -it --rm jaegertracing/jaeger-collector:{{< currentVersion >}} -h
```
At default settings the collector exposes the following ports:
Port | Protocol | Function
----- | ------- | ---
14267 | TChannel | used by **jaeger-agent** to send spans in jaeger.thrift format
14250 | gRPC | used by **jaeger-agent** to send spans in model.proto format
14268 | HTTP | can accept spans directly from clients in jaeger.thrift format over binary thrift protocol
9411 | HTTP | can accept Zipkin spans in Thrift, JSON and Proto (disabled by default)
14269 | HTTP | Healthcheck at `/` and metrics at `/metrics`
## Storage Backends
Collectors require a persistent storage backend. Cassandra and Elasticsearch are the primary supported storage backends. Additional backends are [discussed here](https://github.com/jaegertracing/jaeger/issues/638).
The storage type can be passed via `SPAN_STORAGE_TYPE` environment variable. Valid values are `cassandra`, `elasticsearch`, `kafka` (only as a buffer), `grpc-plugin`, `badger` (only with all-in-one) and `memory` (only with all-in-one).
As of version 1.6.0, it's possible to use multiple storage types at the same time by providing a comma-separated list of valid types to the `SPAN_STORAGE_TYPE` environment variable.
It's important to note that all listed storage types are used for writing, but only the first type in the list will be used for reading and archiving.
### Memory
The in-memory storage is not intended for production workloads. It's intended as a simple solution to get started quickly and
data will be lost once the process is gone.
By default, there's no limit in the amount of traces stored in memory but a limit can be established by passing an
integer value via `--memory.max-traces`.
### Badger - local storage
Experimental since Jaeger 1.9
[Badger](https://github.com/dgraph-io/badger) is an embedded local storage, only available
with **all-in-one** distribution. By default it acts as an ephemeral storage using a temporary filesystem.
This can be overridden by using the `--badger.ephemeral=false` option.
```sh
docker run \
-e SPAN_STORAGE_TYPE=badger \
-e BADGER_EPHEMERAL=false \
-e BADGER_DIRECTORY_VALUE=/badger/data \
-e BADGER_DIRECTORY_KEY=/badger/key \
-v <storage_dir_on_host>:/badger \
-p 16686:16686 \
jaegertracing/all-in-one:{{< currentVersion >}}
```
### Cassandra
Supported versions: 3.4+
Deploying Cassandra itself is out of scope for our documentation. One good
source of documentation is the [Apache Cassandra Docs](https://cassandra.apache.org/doc/latest/).
#### Configuration
##### Minimal
```sh
docker run \
-e SPAN_STORAGE_TYPE=cassandra \
-e CASSANDRA_SERVERS=<...> \
jaegertracing/jaeger-collector:{{< currentVersion >}}
```
##### All options
To view the full list of configuration options, you can run the following command:
```sh
docker run \
-e SPAN_STORAGE_TYPE=cassandra \
jaegertracing/jaeger-collector:{{< currentVersion >}} \
--help
```
#### Schema script
A script is provided to initialize Cassandra keyspace and schema
using Cassandra's interactive shell [`cqlsh`][cqlsh]:
```sh
MODE=test sh ./plugin/storage/cassandra/schema/create.sh | cqlsh
```
For production deployment, pass `MODE=prod DATACENTER={datacenter}` arguments to the script,
where `{datacenter}` is the name used in the Cassandra configuration / network topology.
The script also allows overriding TTL, keyspace name, replication factor, etc.
Run the script without arguments to see the full list of recognized parameters.
#### TLS support
Jaeger supports TLS client to node connections as long as you've configured
your Cassandra cluster correctly. After verifying with e.g. `cqlsh`, you can
configure the collector and query like so:
```sh
docker run \
-e CASSANDRA_SERVERS=<...> \
-e CASSANDRA_TLS=true \
-e CASSANDRA_TLS_SERVER_NAME="CN-in-certificate" \
-e CASSANDRA_TLS_KEY=<path to client key file> \
-e CASSANDRA_TLS_CERT=<path to client cert file> \
-e CASSANDRA_TLS_CA=<path to your CA cert file> \
jaegertracing/jaeger-collector:{{< currentVersion >}}
```
The schema tool also supports TLS. You need to make a custom cqlshrc file like
so:
```
# Creating schema in a cassandra cluster requiring client TLS certificates.
#
# Create a volume for the schema docker container containing four files:
# cqlshrc: this file
# ca-cert: the cert authority for your keys
# client-key: the keyfile for your client
# client-cert: the cert file matching client-key
#
# if there is any sort of DNS mismatch and you want to ignore server validation
# issues, then uncomment validate = false below.
#
# When running the container, map this volume to /root/.cassandra and set the
# environment variable CQLSH_SSL=--ssl
[ssl]
certfile = ~/.cassandra/ca-cert
userkey = ~/.cassandra/client-key
usercert = ~/.cassandra/client-cert
# validate = false
```
### Elasticsearch
Supported in Jaeger since 0.6.0
Supported versions: 5.x, 6.x, 7.x
Elasticsearch version is automatically retrieved from root/ping endpoint.
Based on this version Jaeger uses compatible index mappings and Elasticsearch REST API.
The version can be explicitly provided via `--es.version=` flag.
Elasticsearch does not require initialization other than
[installing and running Elasticsearch](https://www.elastic.co/downloads/elasticsearch).
Once it is running, pass the correct configuration values to the Jaeger collector and query service.
#### Configuration
##### Minimal
```sh
docker run \
-e SPAN_STORAGE_TYPE=elasticsearch \
-e ES_SERVER_URLS=<...> \
jaegertracing/jaeger-collector:{{< currentVersion >}}
```
##### All options
To view the full list of configuration options, you can run the following command:
```sh
docker run \
-e SPAN_STORAGE_TYPE=elasticsearch \
jaegertracing/jaeger-collector:{{< currentVersion >}} \
--help
```
#### Shards and Replicas for Elasticsearch indices
Shards and replicas are some configuration values to take special attention to, because this is decided upon
index creation. [This article](https://qbox.io/blog/optimizing-elasticsearch-how-many-shards-per-index) goes into
more information about choosing how many shards should be chosen for optimization.
#### Upgrade Elasticsearch version
Elasticsearch defines wire and index compatibility versions. The index compatibility defines
the minimal version a node can read data from. For example Elasticsearch 7 can read indices
created by Elasticsearch 6, however it cannot read indices created by Elasticsearch 5 even
though they use the same index mappings. Therefore upgrade from Elasticsearch 6 to 7 does not require any
data migration. However, upgrade from Elasticsearch 5 to 7 has to be done through Elasticsearch 6 and wait
until indices created by ES 5.x are removed or explicitly reindexed.
Refer to the Elasticsearch [documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current//setup-upgrade.html)
for wire and index compatibility versions. Generally this information can be retrieved from root/ping REST endpoint.
##### Reindex
Manual reindexing can be used when upgrading from Elasticsearch 5 to 7 (through Elasticsearch 6)
without waiting until indices created by Elasticsearch 5 are removed.
1. Reindex all span indices to new indices with suffix `-1`:
```bash
curl -ivX POST -H "Content-Type: application/json" http://localhost:9200/_reindex -d @reindex.json
{
"source": {
"index": "jaeger-span-*"
},
"dest": {
"index": "jaeger-span"
},
"script": {
"lang": "painless",
"source": "ctx._index = 'jaeger-span-' + (ctx._index.substring('jaeger-span-'.length(), ctx._index.length())) + '-1'"
}
}
```
2. Delete indices with old mapping:
```bash
curl -ivX DELETE -H "Content-Type: application/json" http://localhost:9200/jaeger-span-\*,-\*-1
```
3. Create indices without `-1` suffix:
```bash
curl -ivX POST -H "Content-Type: application/json" http://localhost:9200/_reindex -d @reindex.json
{
"source": {
"index": "jaeger-span-*"
},
"dest": {
"index": "jaeger-span"
},
"script": {
"lang": "painless",
"source": "ctx._index = 'jaeger-span-' + (ctx._index.substring('jaeger-span-'.length(), ctx._index.length() - 2))"
}
}
```
4. Remove suffixed indices:
```bash
curl -ivX DELETE -H "Content-Type: application/json" http://localhost:9200/jaeger-span-\*-1
```
Run the commands analogically for other Jaeger indices.
There might exist more effective migration procedure. Please share with the community any findings.
### Kafka
Supported in Jaeger since 1.6.0
Supported Kafka versions: 0.9+
Kafka can be used as an intermediary buffer between collector and an actual storage.
The collector is configured with `SPAN_STORAGE_TYPE=kafka` that makes it write all received spans
into a Kafka topic. A new component [Ingester](#ingester), added in version 1.7.0, is used to read from
Kafka and store spans in another storage backend (Elasticsearch or Cassandra).
Writing to Kafka is particularly useful for building post-processing data pipelines.
#### Configuration
##### Minimal
```sh
docker run \
-e SPAN_STORAGE_TYPE=kafka \
-e KAFKA_PRODUCER_BROKERS=<...> \
-e KAFKA_TOPIC=<...> \
jaegertracing/jaeger-collector:{{< currentVersion >}}
```
##### All options
To view the full list of configuration options, you can run the following command:
```sh
docker run \
-e SPAN_STORAGE_TYPE=kafka \
jaegertracing/jaeger-collector:{{< currentVersion >}} \
--help
```
#### Topic & partitions
Unless your Kafka cluster is configured to automatically create topics, you will need to create it ahead of time. You can refer to [the Kafka quickstart documentation](https://kafka.apache.org/documentation/#quickstart_createtopic) to learn how.
You can find more information about topics and partitions in general in the [official documentation](https://kafka.apache.org/documentation/#intro_topics). [This article](https://www.confluent.io/blog/how-to-choose-the-number-of-topicspartitions-in-a-kafka-cluster/) provide more details about how to choose the number of partitions.
### Storage plugin
Jaeger supports gRPC based storage plugins. For more information refer to [jaeger/plugin/storage/grpc](https://github.com/jaegertracing/jaeger/tree/master/plugin/storage/grpc)
Available plugins:
* [InfluxDB](https://github.com/influxdata/jaeger-influxdb/)
```sh
docker run \
-e SPAN_STORAGE_TYPE=grpc-plugin \
-e GRPC_STORAGE_PLUGIN_BINARY=<...> \
-e GRPC_STORAGE_PLUGIN_CONFIGURATION_FILE=<...> \
jaegertracing/all-in-one:{{< currentVersion >}}
```
## Ingester
**jaeger-ingester** is a service which reads span data from Kafka topic and writes it to another storage backend (Elasticsearch or Cassandra).
Port | Protocol | Function
----- | ------- | ---
14270 | HTTP | Healthcheck at `/` and metrics at `/metrics`
To view all exposed configuration options run the following command:
```sh
docker run \
-e SPAN_STORAGE_TYPE=cassandra \
jaegertracing/jaeger-ingester:{{< currentVersion >}}
--help
```
## Query Service & UI
**jaeger-query** serves the API endpoints and a React/Javascript UI.
The service is stateless and is typically run behind a load balancer, such as [**NGINX**](https://www.nginx.com/).
At default settings the query service exposes the following port(s):
Port | Protocol | Function
----- | ------- | ---
16686 | HTTP | `/api/*` endpoints and Jaeger UI at `/`
16687 | HTTP | Healthcheck at `/` and metrics at `/metrics`
### Minimal deployment example (Elasticsearch backend):
```sh
docker run -d --rm \
-p 16686:16686 \
-p 16687:16687 \
-e SPAN_STORAGE_TYPE=elasticsearch \
-e ES_SERVER_URLS=http://<ES_SERVER_IP>:<ES_SERVER_PORT> \
jaegertracing/jaeger-query:{{< currentVersion >}}
```
### UI Base Path
The base path for all **jaeger-query** HTTP routes can be set to a non-root value, e.g. `/jaeger` would cause all UI URLs to start with `/jaeger`. This can be useful when running **jaeger-query** behind a reverse proxy.
The base path can be configured via the `--query.base-path` command line parameter or the `QUERY_BASE_PATH` environment variable.
### UI Customization and Embedding
Please refer to the [dedicated Frontend/UI page](../frontend-ui/).
## Aggregation Jobs for Service Dependencies
Production deployments need an external process which aggregates data and creates dependency links between services. Project [spark-dependencies](https://github.com/jaegertracing/spark-dependencies) is a Spark job which derives dependency links and stores them directly to the storage.
## Configuration
All binaries accepts command line properties and environmental variables, power by [viper](https://github.com/spf13/viper) and [cobra](https://github.com/spf13/cobra) libraries. Please refer to the [CLI Flags](../cli/) page for more information.
[cqlsh]: http://cassandra.apache.org/doc/latest/tools/cqlsh.html
[zipkin-thrift]: https://github.com/jaegertracing/jaeger-idl/blob/master/thrift/zipkincore.thrift
[jaeger-thrift]: https://github.com/jaegertracing/jaeger-idl/blob/master/thrift/jaeger.thrift
[thriftrw]: https://www.npmjs.com/package/thriftrw

View File

@ -1,26 +0,0 @@
---
title: Frequently Asked Questions
navtitle: FAQs
description: Answers to some frequently asked questions about Jaeger.
weight: 11
---
## Why is the Dependencies page empty?
The Dependencies page shows a graph of services traced by Jaeger and connections between them. When you are using `all-in-one` binary with in-memory storage, the graph is calculated on-demand from all the traces stored in memory. However, if you are using a real distributed storage like Cassandra or Elasticsearch, it is too expensive to scan all the data in the database to build the service graph. Instead, the Jaeger project provides "big data" jobs that can be used to extract the service graph data from traces:
* https://github.com/jaegertracing/spark-dependencies - the older Spark job that can be run periodically
* https://github.com/jaegertracing/jaeger-analytics - the new (experimental) streaming Flink jobs that run continuously and builds the service graph in smaller time intervals
## Why do I not see any spans in Jaeger?
Please refer to the [Troubleshooting](../troubleshooting/) guide.
## Do I need to run jaeger-agent?
`jaeger-agent` is not always necessary. Jaeger client libraries can be configured to export trace data directly to `jaeger-collector`. However, the following are the reasons why running `jaeger-agent` is recommended:
* If we want Jaeger client libraries to send trace data directly to collectors, we must provide them with a URL of the HTTP endpoint. It means that our applications require additional configuration containing this parameter, especially if we are running multiple Jaeger installations (e.g. in different availability zones or regions) and want the data sent to a nearby installation. In contrast, when using the agent, the libraries require no additional configuration because the agent is always accessible via `localhost`. It acts as a sidecar and proxies the requests to the appropriate collectors.
* The agent can be configured to enrich the tracing data with infrastructure-specific metadata by adding extra tags to the spans, such as the current zone, region, etc. If the agent is running as a host daemon, it will be shared by all applications running on the same host. If the agent is running as a true sidecar, i.e. one per application, it can provide additional functionality such as strong authentication, multi-tenancy (see [this blog post](https://medium.com/jaegertracing/jaeger-and-multitenancy-99dfa1d49dc0)), pod name, etc.
* If we want Jaeger client libraries to use sampling strategies that are centrally configured in the collectors, this is only possible by using the `/sampling` HTTP endpoint on the agent. There is no technical reason why this endpoint cannot be implemented directly in the collectors, it's just [not done yet](https://github.com/jaegertracing/jaeger/issues/1971).
* Agents allow implementing traffic control to the collectors. If we have thousands of hosts in the data center, each running many applications, and each application sending data directly to the collectors, there may be too many open connections for each collector to handle. The agents can load balance this traffic with fewer connections.

View File

@ -1,57 +0,0 @@
---
title: Features
hasparent: true
---
Jaeger is used for monitoring and troubleshooting microservices-based distributed systems, including:
* Distributed context propagation
* Distributed transaction monitoring
* Root cause analysis
* Service dependency analysis
* Performance / latency optimization
## High Scalability
Jaeger backend is designed to have no single points of failure and to scale with the business needs.
For example, any given Jaeger installation at Uber is typically processing several billion {{< tip "spans" "span" >}} per day.
## Native support for OpenTracing
Jaeger backend, Web UI, and instrumentation libraries have been designed from ground up to support the OpenTracing standard.
* Represent {{< tip "traces" "trace" >}} as {{< tip "directed acyclic graphs" "directed acyclic graph" >}} (not just trees) via [span references](https://github.com/opentracing/specification/blob/master/specification.md#references-between-spans)
* Support strongly typed span _tags_ and _structured logs_
* Support general distributed context propagation mechanism via _baggage_
## Multiple storage backends
Jaeger supports two popular open source NoSQL databases as trace storage backends: Cassandra 3.4+ and Elasticsearch 5.x/6.x/7.x.
There are ongoing community experiments using other databases, such as ScyllaDB, InfluxDB, Amazon DynamoDB. Jaeger also ships
with a simple in-memory storage for testing setups.
## Modern Web UI
Jaeger Web UI is implemented in Javascript using popular open source frameworks like React. Several performance
improvements have been released in v1.0 to allow the UI to efficiently deal with large volumes of data, and to display
{{< tip "traces" "trace" >}} with tens of thousands of {{< tip "spans" "span" >}} (e.g. we tried a trace with 80,000 spans).
## Cloud Native Deployment
Jaeger backend is distributed as a collection of Docker images. The binaries support various configuration methods,
including command line options, environment variables, and configuration files in multiple formats (yaml, toml, etc.).
Deployment to Kubernetes clusters is assisted by a [Kubernetes operator](https://github.com/jaegertracing/jaeger-operator), [Kubernetes templates](https://github.com/jaegertracing/jaeger-kubernetes)
and a [Helm chart](https://github.com/kubernetes/charts/tree/master/incubator/jaeger).
## Observability
All Jaeger backend components expose [Prometheus](https://prometheus.io/) metrics by default (other metrics backends are
also supported). Logs are written to standard out using the structured logging library [zap](https://github.com/uber-go/zap).
## Backwards compatibility with Zipkin
Although we recommend instrumenting applications with OpenTracing API and binding to Jaeger client libraries to benefit
from advanced features not available elsewhere, if your organization has already invested in the instrumentation
using Zipkin libraries, you do not have to rewrite all that code. Jaeger provides backwards compatibility with Zipkin
by accepting spans in Zipkin formats (Thrift, JSON v1/v2 and Protobuf) over HTTP. Switching from Zipkin backend is just a matter
of routing the traffic from Zipkin libraries to the Jaeger backend.

View File

@ -1,224 +0,0 @@
---
title: Frontend/UI Configuration
navtitle: Frontend/UI
hasparent: true
weight: 7
---
## Configuration
Several aspects of the UI can be configured:
* The Dependencies section can be enabled / configured
* Google Analytics tracking can be enabled / configured
* Additional menu options can be added to the global nav
These options can be configured by a JSON configuration file. The `--query.ui-config` command line parameter of the query service must then be set to the path to the JSON file when the query service is started.
An example configuration file:
```json
{
"dependencies": {
"dagMaxNumServices": 200,
"menuEnabled": true
},
"archiveEnabled": true,
"tracking": {
"gaID": "UA-000000-2",
"trackErrors": true
},
"menu": [
{
"label": "About Jaeger",
"items": [
{
"label": "GitHub",
"url": "https://github.com/jaegertracing/jaeger"
},
{
"label": "Docs",
"url": "http://jaeger.readthedocs.io/en/latest/"
}
]
}
],
"linkPatterns": [{
"type": "process",
"key": "jaeger.version",
"url": "https://github.com/jaegertracing/jaeger-client-java/releases/tag/#{jaeger.version}",
"text": "Information about Jaeger release #{jaeger.version}"
}]
}
```
### Dependencies
`dependencies.dagMaxNumServices` defines the maximum number of services allowed before the DAG dependency view is disabled. Default: `200`.
`dependencies.menuEnabled` enables (`true`) or disables (`false`) the dependencies menu button. Default: `true`.
### Archive Support
`archiveEnabled` enables (`true`) or disables (`false`) the archive traces button. Default: `false`. It requires a configuration of an archive storage in Query service. Archived traces are only accessible directly by ID, they are not searchable.
### Google Analytics Tracking
`tracking.gaID` defines the Google Analytics tracking ID. This is required for Google Analytics tracking, and setting it to a non-`null` value enables Google Analytics tracking. Default: `null`.
`tracking.trackErrors` enables (`true`) or disables (`false`) error tracking via Google Analytics. Errors can only be tracked if a valid Google Analytics ID is provided. For additional details on error tracking via Google Analytics see the [tracking README](https://github.com/jaegertracing/jaeger-ui/blob/c622330546afc1be59a42f874bcc1c2fadf7e69a/src/utils/tracking/README.md) in the UI repo. Default: `true`.
### Custom Menu Items
`menu` allows additional links to be added to the global nav. The additional links are right-aligned.
In the sample JSON config above, the configured menu will have a dropdown labeled "About Jaeger" with sub-options for "GitHub" and "Docs". The format for a link in the top right menu is as follows:
```json
{
"label": "Some text here",
"url": "https://example.com"
}
```
Links can either be members of the `menu` Array, directly, or they can be grouped into a dropdown menu option. The format for a group of links is:
```json
{
"label": "Dropdown button",
"items": [ ]
}
```
The `items` Array should contain one or more link configurations.
### Link Patterns
The `linkPatterns` node can be used to create links from fields displayed in the Jaeger UI.
Field | Description
------|------------
type | The metadata section in which your link will be added: process, tags, logs
key | The name of tag/process/log attribute which value will be displayed as a link
url | The URL where the link should point to, it can be an external site or relative path in Jaeger UI
text | The text displayed in the tooltip for the link
Both `url` and `text` can be defined as templates (i.e. using `#{field-name}`) where Jaeger UI will dynamically substitute values based on tags/logs data.
## Embedded Mode
Starting with version 1.9, Jaeger UI provides an "embedded" layout mode which is intended to support integrating Jaeger UI into other applications. Currently (as of `v0`), the approach taken is to remove various UI elements from the page to make the UI better suited for space-constrained layouts.
The embedded mode is induced and configured via URL query parameters.
To enter embedded mode, the `uiEmbed=v0` query parameter and value must be added to the URL. For example, the following URL will show the trace with ID `abc123` in embedded mode:
```
http://localhost:16686/trace/abc123?uiEmbed=v0
```
`uiEmbed=v0` is required.
Further, each page supported has an <img src="/img/frontend-ui/embed-open-icon.png" style="width: 20px; height:20px;display:inline;" alt="Embed open window"> button added that will open the non-embedded page in a new tab.
The following pages support embedded mode:
* Search Page
* Trace Page
### Search Page
To integrate the Search Trace Page to our application we have to indicate to the Jaeger UI that we want to use the embed mode with `uiEmbed=v0`.
For example:
```
http://localhost:16686/search?
service=my-service&
start=1543917759557000&
end=1543921359557000&
limit=20&
lookback=1h&
maxDuration&
minDuration&
uiEmbed=v0
```
![Embed Search Traces](/img/frontend-ui/embed-search-traces.png)
#### Configuration options
The following query parameter can be used to configure the layout of the search page :
* `uiSearchHideGraph=1` - disables the display of the scatter plot above the search results
```
http://localhost:16686/search?
service=my-service&
start=1543917759557000&
end=1543921359557000&
limit=20&
lookback=1h&
maxDuration&
minDuration&
uiEmbed=v0&
uiSearchHideGraph=1
```
![Embed Search Traces without Graph](/img/frontend-ui/embed-search-traces-hide-graph.png)
### Trace Page
To integrate the Trace Page to our application we have to indicate to the Jaeger UI that we want to use the embed mode with `uiEmbed=v0`.
For example:
```sh
http://localhost:16686/trace/{trace-id}?uiEmbed=v0
```
![Embed Trace view](/img/frontend-ui/embed-trace-view.png)
If we have navigated to this view from the search traces page we'll have a button to go back to the results page.
![Embed Trace view](/img/frontend-ui/embed-trace-view-with-back-button.png)
#### Configuration options
The following query parameters can be used to configure the layout of the trace page :
* `uiTimelineCollapseTitle=1` causes the trace header to start out collapsed, which hides the summary and the minimap.
```
http://localhost:16686/trace/{trace-id}?
uiEmbed=v0&
uiTimelineCollapseTitle=1
```
![Embed Trace view](/img/frontend-ui/embed-trace-view-with-collapse.png)
* `uiTimelineHideMinimap=1` removes the minimap, entirely, regardless of whether the trace header is expanded or not.
```
http://localhost:16686/trace/{trace-id}?
uiEmbed=v0&
uiTimelineHideMinimap=1
```
![Embed Trace view](/img/frontend-ui/embed-trace-view-with-hide-minimap.png)
* `uiTimelineHideSummary=1` - removes the trace summary information (number of services, etc.) entirely, regardless of whether the trace header is expanded or not.
```
http://localhost:16686/trace/{trace-id}?
uiEmbed=v0&
uiTimelineHideSummary=1
```
![Embed Trace view](/img/frontend-ui/embed-trace-view-with-hide-summary.png)
We can also combine the options:
```
http://localhost:16686/trace/{trace-id}?
uiEmbed=v0&
uiTimelineHideMinimap=1&
uiTimelineHideSummary=1
```
![Embed Trace view](/img/frontend-ui/embed-trace-view-with-hide-details-and-hide-minimap.png)

View File

@ -1,130 +0,0 @@
---
title: Getting Started
description: Get up and running with Jaeger in your local environment
weight: 2
---
## Instrumentation
Your applications must be instrumented before they can send tracing data to Jaeger backend. Check the [Client Libraries](../client-libraries) section for information about how to use the OpenTracing API and how to initialize and configure Jaeger tracers.
## All in One
All-in-one is an executable designed for quick local testing, launches the Jaeger UI, collector, query, and agent, with an in memory storage component.
The simplest way to start the all-in-one is to use the pre-built image published to DockerHub (a single command line).
```bash
$ docker run -d --name jaeger \
-e COLLECTOR_ZIPKIN_HTTP_PORT=9411 \
-p 5775:5775/udp \
-p 6831:6831/udp \
-p 6832:6832/udp \
-p 5778:5778 \
-p 16686:16686 \
-p 14268:14268 \
-p 14250:14250 \
-p 9411:9411 \
jaegertracing/all-in-one:{{< currentVersion >}}
```
Or run the `jaeger-all-in-one(.exe)` executable from the [binary distribution archives][download]:
```bash
$ jaeger-all-in-one --collector.zipkin.http-port=9411
```
You can then navigate to `http://localhost:16686` to access the Jaeger UI.
The container exposes the following ports:
Port | Protocol | Component | Function
----- | ------- | --------- | ---
5775 | UDP | agent | accept `zipkin.thrift` over compact thrift protocol (deprecated, used by legacy clients only)
6831 | UDP | agent | accept `jaeger.thrift` over compact thrift protocol
6832 | UDP | agent | accept `jaeger.thrift` over binary thrift protocol
5778 | HTTP | agent | serve configs
16686 | HTTP | query | serve frontend
14268 | HTTP | collector | accept `jaeger.thrift` directly from clients
14250 | HTTP | collector | accept `model.proto`
9411 | HTTP | collector | Zipkin compatible endpoint (optional)
## Kubernetes and OpenShift
* Kubernetes templates: https://github.com/jaegertracing/jaeger-kubernetes
* Kubernetes Operator: https://github.com/jaegertracing/jaeger-operator
* OpenShift templates: https://github.com/jaegertracing/jaeger-openshift
## Sample App: HotROD
HotROD (Rides on Demand) is a demo application that consists of several microservices and
illustrates the use of the [OpenTracing API](http://opentracing.io).
A tutorial / walkthrough is available in the blog post:
[Take OpenTracing for a HotROD ride][hotrod-tutorial].
It can be run standalone, but requires Jaeger backend to view the traces.
### Features
- Discover architecture of the whole system via data-driven dependency
diagram.
- View request timeline and errors; understand how the app works.
- Find sources of latency and lack of concurrency.
- Highly contextualized logging.
- Use baggage propagation to:
- Diagnose inter-request contention (queueing).
- Attribute time spent in a service.
- Use open source libraries with OpenTracing integration to get
vendor-neutral instrumentation for free.
### Prerequisites
- You need Go 1.11 or higher installed on your machine to run from source.
- Requires a [running Jaeger backend](#all-in-one) to view the traces.
### Running
#### From Source
```bash
mkdir -p $GOPATH/src/github.com/jaegertracing
cd $GOPATH/src/github.com/jaegertracing
git clone git@github.com:jaegertracing/jaeger.git jaeger
cd jaeger
make install
go run ./examples/hotrod/main.go all
```
#### From docker
```bash
$ docker run --rm -it \
--link jaeger \
-p8080-8083:8080-8083 \
-e JAEGER_AGENT_HOST="jaeger" \
jaegertracing/example-hotrod:{{< currentVersion >}} \
all
```
#### From binary distribution
Run `example-hotrod(.exe)` executable from the [binary distribution archives][download]:
```bash
$ example-hotrod all
```
Then navigate to `http://localhost:8080`.
## Migrating from Zipkin
Collector service exposes Zipkin compatible REST API `/api/v1/spans` which accepts both Thrift and JSON. Also there is `/api/v2/spans` for JSON and Proto.
By default it's disabled. It can be enabled with `--collector.zipkin.http-port=9411`.
Zipkin [Thrift](https://github.com/jaegertracing/jaeger-idl/blob/master/thrift/zipkincore.thrift) IDL and Zipkin [Proto](https://github.com/jaegertracing/jaeger-idl/blob/master/proto/zipkin.proto) IDL files can be found in [jaegertracing/jaeger-idl](https://github.com/jaegertracing/jaeger-idl) repository.
They're compatible with [openzipkin/zipkin-api](https://github.com/openzipkin/zipkin-api) [Thrift](https://github.com/openzipkin/zipkin-api/blob/master/thrift/zipkinCore.thrift) and [Proto](https://github.com/openzipkin/zipkin-api/blob/master/zipkin.proto).
[hotrod-tutorial]: https://medium.com/@YuriShkuro/take-opentracing-for-a-hotrod-ride-f6e3141f7941
[download]: ../../../download/

File diff suppressed because it is too large Load Diff

View File

@ -1,95 +0,0 @@
---
title: Performance Tuning Guide
description: Tweaking your Jaeger instance to achieve a better performance
weight: 10
---
Jaeger was built from day 1 to be able to ingest huge amounts of data in a resilient way. To better utilize resources that might cause delays, such as storage or network communications, Jaeger buffers and batches data. When more spans are generated than Jaeger is able to safely process, spans might get dropped. However, the defaults might not fit all scenarios: for instance, Agents running as a sidecar might have more memory constraints than Agents running as a daemon in bare metal.
## Deployment considerations
Although performance tuning the individual components is important, the way Jaeger is deployed can be decisive in obtaining optimal performance.
### Scale the Collector up and down
Use the auto-scaling capabilities of your platform: the Collector is nearly horizontally scalable so that more instances can be added and removed on-demand. A good way to scale up and down is by checking the `jaeger_collector_queue_length` metric: add instances when the length is higher than 50% of the maximum size for extended periods of time. Another metric that can be taken into consideration is `jaeger_collector_in_queue_latency_bucket`, which is a histogram indicating how long spans have been waiting in the queue before a worker picked it up. When the queue latency gets higher over time, its a good indication to increase the number of the workers, or to improve the storage performance.
Adding Collector instances is recommended when your platform provides auto-scaling capabilities, or when it's easier to start/stop Collector instances than changing existing, running instances. Scaling horizontally is also indicated when the CPU usage should be spread across nodes.
### Make sure the storage can keep up
Each span is written to the storage by the Collector using one worker, blocking it until the span has been stored. When the storage is too slow, the number of workers blocked by the storage might be too high, causing spans to be dropped. To help diagnose this situation, the histogram `jaeger_collector_save_latency_bucket` can be analyzed. Ideally, the latency should remain the same over time. When the histogram shows that most spans are taking longer and longer over time, its a good indication that your storage might need some attention.
### Place the Agents close to your applications
The Agent is meant to be placed on the same host as the instrumented application, in order to avoid UDP packet loss over the network. This is typically accomplished by having one Agent per bare metal host for traditional applications, or as a sidecar in container environments like Kubernetes, as this helps spread the load handled by Agents with the additional advantage of allowing each Agent to be tweaked individually, according to the applications needs and importance.
### Consider using Apache Kafka as intermediate buffer
Jaeger [can use Apache Kafka](../architecture/) as a buffer between the Collector and the actual backing storage (Elasticsearch, Apache Cassandra). This is ideal for cases where the traffic spikes are relatively frequent (prime time traffic) but the storage can eventually catch up once the traffic normalizes. For that, the `SPAN_STORAGE_TYPE` environment variable should be set to `kafka` in the Collector and the Jaeger Ingester component can be used, reading data from Kafka and writing it to the storage.
In addition to the performance aspects, having spans written to Kafka is useful for building real time data pipeline for aggregations and feature extraction from traces.
## Client (Tracer) settings
The Jaeger Clients are built to have minimal effect to the instrumented application. As such, it has conservative defaults that might not be suitable for all cases. Note that Jaeger Clients can be configured programmatically or via [environment variables](../client-features/).
### Adjust the sampling configuration
Together, the `JAEGER_SAMPLER_TYPE` and `JAEGER_SAMPLER_PARAM` specify how often traces should be "sampled", ie, recorded and sent to the Jaeger backend. For applications generating a large number of spans, setting the sampling type to `probabilistic` and the value to `0.001` (the default) will cause traces to be reported with a 1/1000th chance. Note that the sampling decision is made at the root span and propagated down to all child spans.
For applications with low to medium traffic, setting the sampling type to `const` and value to `1` will cause all spans to be reported. Similarly, tracing can be disabled by setting the value to `0`, while context propagation will continue to work.
Some Clients support the setting `JAEGER_DISABLED` to completely disable the Jaeger Tracer. This is recommended only if the Tracer is behaving in a way that causes problems to the instrumented application, as it will not propagate the context to the downstream services.
{{< info >}}
We recommend to set your clients to use the [`remote` sampling strategy](../sampling/#collector-sampling-configuration), so that admins can centrally set the concrete sampling strategy for each service.
{{< /info >}}
### Increase in-memory queue size
Most of the Jaeger clients, such as the Java, Go, and C# clients, buffer spans in memory before sending them to the Jaeger Agent/Collector. The maximum size of this buffer is defined by the environment variable `JAEGER_REPORTER_MAX_QUEUE_SIZE` (default value: about `100` spans): the larger the size, the higher the potential memory consumption. When the instrumented application is generating a large number of spans, its possible that the queue will be full causing the Client to discard the new spans (metric `jaeger_tracer_reporter_spans_total{result="dropped",}`).
In most common scenarios, the queue will be close to empty (metric: `jaeger_tracer_reporter_queue_length`), as spans are flushed to the Agent or Collector at regular intervals or when a certain size of the batch is reached. The detailed behavior of this queue is described in this [GitHub issue](https://github.com/jaegertracing/jaeger-client-java/issues/607).
### Modify the batched spans flush interval
The Java, Go, NodeJS, Python and C# Clients allow the customization of the flush interval (default value: `1000` milliseconds, or 1 second) used by the reporters, such as the `RemoteReporter`, to trigger a `flush` operation, sending all in-memory spans to the Agent or Collector. The lower the flush interval is set to, the more frequent the flush operations happen. As most reporters will wait until enough data is in the queue, this setting will force a flush operation at periodic intervals, so that spans are sent to the backend in a timely fashion.
When the instrumented application is generating a large number of spans and the Agent/Collector is close to the application, the networking overhead might be low, justifying a higher number of flush operations. When the `HttpSender` is being used and the Collector is not close enough to the application, the networking overhead might be too high so that a higher value for this property makes sense.
## Agent settings
Jaeger Agents receive data from Clients, sending them in batches to the Collector. When not properly configured, it might end up discarding data even if the host machine has plenty of resources.
### Adjust server queue sizes
The set of “server queue size” properties ( `processor.jaeger-binary.server-queue-size`, `processor.jaeger-compact.server-queue-size`, `processor.zipkin-compact.server-queue-size`) indicate the maximum number of span batches that the Agent can accept and store in memory. Its safe to assume that `jaeger-compact` is the most important processor in your Agent setup, as its the only one available in most Clients, such as the Java and Go Clients.
The default value for each queue is `1000` span batches. Given that each span batch has up to 64KiB worth of spans, each queue can hold up to 64MiB worth of spans.
In typical scenarios, the queue will be close to empty (metric `jaeger_agent_thrift_udp_server_queue_size`) as span batches should be quickly picked up and processed by a worker. However, sudden spikes in the number of span batches submitted by Clients might occur, causing the batches to be queued. When the queue is full, the older batches are overridden causing spans to be discarded (metric `jaeger_agent_thrift_udp_server_packets_dropped_total`).
### Adjust processor workers
The set of “processor workers” properties ( `processor.jaeger-binary.workers`, `processor.jaeger-compact.workers`, `processor.zipkin-compact.workers`) indicate the number of parallel span batch processors to start. Each worker type has a default size of `10`. In general, span batches are processed as soon as they are placed in the server queue and will block a worker until the whole packet is sent to the Collector. For Agents processing data from multiple Clients, the number of workers should be increased. Given that the cost of each worker is low, a good rule of thumb is 10 workers per Client with moderate traffic: given that each span batch might contain up to 64KiB worth of spans, it means that 10 workers are able to send about 640KiB concurrently to a Collector.
## Collector settings
The Collector receives data from Clients and Agents. When not properly configured, it might process less data than what would be possible on the same host, or it might overload the host by consuming more memory than permitted.
### Adjust queue size
Similar to the Agent, the Collector is able to receive spans and place them in an internal queue for processing. This allows the Collector to return immediately to the Client/Agent instead of waiting for the span to make its way to the storage.
The setting `collector.queue-size` (default: `2000`) dictates how many spans the queue should support. In the typical scenario, the queue will be close to empty, as enough workers should exist picking up spans from the queue and sending them to the storage. When the number of items in the queue (metric `jaeger_collector_queue_length`) is permanently high, its an indication that either the number of workers should be increased or that the storage cannot keep up with the volume of data that its receiving. When the queue is full, the older items in the queue are overridden, causing spans to be discarded (metric `jaeger_collector_spans_dropped_total`).
{{< warning >}}
The queue size for the Agent is about _span batches_, whereas the queue size for the Collector is about _individual spans_.
{{< /warning >}}
Given that the queue size should be close to empty most of the time, this setting should be as high as the available memory for the Collector, to provide maximum protection against sudden traffic spikes. However, if your storage layer is under-provisioned and cannot keep up, even a large queue will quickly fill up and start dropping data.
### Adjust processor workers
Items from the span queue in the Collector are picked up by workers. Each worker picks one span from the queue and persists it to the storage. The number of workers can be specified by the setting `collector.num-workers` (default: `50`) and should be as high as needed to keep the queue close to zero. The general rule is: the faster the backing storage, the lower the number of workers can be. Given that workers are relatively cheap, this number can be increased at will. As a general rule, one worker per 50 items in the queue should be sufficient when the storage is fast. With a `collector.queue-size` of `2000`, having about `40` workers should be sufficient. For slower storage mechanisms, this ratio should be adjusted accordingly, having more workers per queue item.

View File

@ -1,66 +0,0 @@
---
title: Sampling
hasparent: true
---
Jaeger libraries implement consistent upfront (or head-based) sampling. For example, assume we have a simple call graph where service A calls service B, and B calls service C: `A -> B -> C`. When service A receives a request that contains no tracing information, Jaeger tracer will start a new {{< tip "trace" >}}, assign it a random trace ID, and make a sampling decision based on the currently installed sampling strategy. The sampling decision will be propagated with the requests to B and to C, so those services will not be making the sampling decision again but instead will respect the decision made by the top service A. This approach guarantees that if a trace is sampled, all its {{< tip "spans" "span" >}} will be recorded in the backend. If each service was making its own sampling decision we would rarely get complete traces in the backend.
## Client Sampling Configuration
When using configuration object to instantiate the tracer, the type of sampling can be selected via `sampler.type` and `sampler.param` properties. Jaeger libraries support the following samplers:
* **Constant** (`sampler.type=const`) sampler always makes the same decision for all traces. It either samples all traces (`sampler.param=1`) or none of them (`sampler.param=0`).
* **Probabilistic** (`sampler.type=probabilistic`) sampler makes a random sampling decision with the probability of sampling equal to the value of `sampler.param` property. For example, with `sampler.param=0.1` approximately 1 in 10 traces will be sampled.
* **Rate Limiting** (`sampler.type=ratelimiting`) sampler uses a leaky bucket rate limiter to ensure that traces are sampled with a certain constant rate. For example, when `sampler.param=2.0` it will sample requests with the rate of 2 traces per second.
* **Remote** (`sampler.type=remote`, which is also the default) sampler consults Jaeger agent for the appropriate sampling strategy to use in the current service. This allows controlling the sampling strategies in the services from a [central configuration](#collector-sampling-configuration) in Jaeger backend, or even dynamically (see [Adaptive Sampling](https://github.com/jaegertracing/jaeger/issues/365)).
### Adaptive Sampler
Adaptive sampler is a composite sampler that combines two functions:
* It makes sampling decisions on a per-operation basis, i.e. based on {{< tip "span" >}} operation name. This is especially useful in the API services whose endpoints may have very different traffic volumes and using a single probabilistic sampler for the whole service might starve (never sample) some of the low QPS endpoints.
* It supports a minimum guaranteed rate of sampling, such as always allowing up to N {{< tip "traces" "trace" >}} per seconds and then sampling anything above that with a certain probability (everything is per-operation, not per-service).
Per-operation parameters can be configured statically or pulled periodically from Jaeger backend with the help of Remote sampler. Adaptive sampler is designed to work with the upcoming [Adaptive Sampling](https://github.com/jaegertracing/jaeger/issues/365) feature of the Jaeger backend.
## Collector Sampling Configuration
Collectors can be instantiated with static sampling strategies (which are propagated to the respective service if configured with Remote sampler) via the `--sampling.strategies-file` option. This option requires a path to a json file which have the sampling strategies defined.
Example `strategies.json`
```json
{
"service_strategies": [
{
"service": "foo",
"type": "probabilistic",
"param": 0.8,
"operation_strategies": [
{
"operation": "op1",
"type": "probabilistic",
"param": 0.2
},
{
"operation": "op2",
"type": "probabilistic",
"param": 0.4
}
]
},
{
"service": "bar",
"type": "ratelimiting",
"param": 5
}
],
"default_strategy": {
"type": "probabilistic",
"param": 0.5
}
}
```
`service_strategies` defines service specific sampling strategies and `operation_strategies` defines operation specific sampling strategies. There are 2 types of strategies possible: `probabilistic` and `ratelimiting` which are described [above](#client-sampling-configuration) (NOTE: `ratelimiting` is not supported for `operation_strategies`). `default_strategy` defines the catch-all sampling strategy that is propagated if the service is not included as part of `service_strategies`.
In the above example, all service `foo` operations are sampled probabilistically with a probability of 0.8 except `op1` and `op2` which are probabilistically sampled with a probability of 0.2 and 0.4 respectively. All operations for service `bar` are ratelimited at 5 traces per second. Any other service is probabilistically sampled with a probability of 0.5.

View File

@ -1,43 +0,0 @@
---
title: Windows Service Deployment
hasparent: true
---
In Windows environments, Jaeger processes can be hosted and managed as Windows services controlled via the `sc` utility. To configure such services on Windows, download [nssm.exe](https://nssm.cc/download) for the appropriate architecture, and issue commands similar to how Jaeger is typically run. The example below showcases a basic Elasticsearch setup, configured using both environment variables and process arguments.
## Agent
```bat
nssm install JaegerAgent C:\Jaeger\jaeger-agent.exe --reporter.grpc.host-port=localhost:14250
nssm set JaegerAgent AppStdout C:\Jaeger\jaeger-agent.out.log
nssm set JaegerAgent AppStderr C:\Jaeger\jaeger-agent.err.log
nssm set JaegerAgent Description Jaeger Agent service
nssm start JaegerAgent
```
## Collector
```bat
nssm install JaegerCollector C:\Jaeger\jaeger-collector.exe --es.server-urls=http://localhost:9200 --es.username=jaeger --es.password=PASSWORD
nssm set JaegerCollector AppStdout C:\Jaeger\jaeger-collector.out.log
nssm set JaegerCollector AppStderr C:\Jaeger\jaeger-collector.err.log
nssm set JaegerCollector Description Jaeger Collector service
nssm set JaegerCollector AppEnvironmentExtra SPAN_STORAGE_TYPE=elasticsearch
nssm start JaegerCollector
```
## Query UI
```bat
nssm install JaegerUI C:\Jaeger\jaeger-query.exe --es.server-urls=http://localhost:9200 --es.username=jaeger --es.password=PASSWORD
nssm set JaegerUI AppStdout C:\Jaeger\jaeger-ui.out.log
nssm set JaegerUI AppStderr C:\Jaeger\jaeger-ui.err.log
nssm set JaegerUI Description Jaeger Query service
nssm set JaegerUI AppEnvironmentExtra SPAN_STORAGE_TYPE=elasticsearch
nssm start JaegerUI
```
For additional information & docs, please see [the NSSM usage guide.](https://nssm.cc/usage)

View File

@ -1,70 +0,0 @@
---
title: Introduction
weight: 1
children:
- title: Features
url: features
---
Welcome to Jaeger's documentation portal! Below, you'll find information for beginners and experienced Jaeger users.
If you can't find what you are looking for, or have an issue not covered here, we'd love to [hear from you](/get-in-touch).
## About
Jaeger, inspired by [Dapper][dapper] and [OpenZipkin](http://zipkin.io),
is a distributed tracing system released as open source by [Uber Technologies][ubeross].
It is used for monitoring and troubleshooting microservices-based distributed systems, including:
* Distributed context propagation
* Distributed transaction monitoring
* Root cause analysis
* Service dependency analysis
* Performance / latency optimization
Uber published a blog post, [Evolving Distributed Tracing at Uber](https://eng.uber.com/distributed-tracing/), where they explain the history and reasons for the architectural choices made in Jaeger. [Yuri Shkuro](https://shkuro.com), creator of Jaeger, also published a book [Mastering Distributed Tracing](https://shkuro.com/books/2019-mastering-distributed-tracing/) that covers in-depth many aspects of Jaeger design and operation, as well as distributed tracing in general.
## Features
* [OpenTracing](http://opentracing.io/) compatible data model and instrumentation libraries
* in [Go](https://github.com/jaegertracing/jaeger-client-go), [Java](https://github.com/jaegertracing/jaeger-client-java), [Node](https://github.com/jaegertracing/jaeger-client-node), [Python](https://github.com/jaegertracing/jaeger-client-python),
[C++](https://github.com/jaegertracing/cpp-client) and [C#](https://github.com/jaegertracing/jaeger-client-csharp)
* Uses consistent upfront sampling with individual per service/endpoint probabilities
* Multiple storage backends: Cassandra, Elasticsearch, memory.
* Adaptive sampling (coming soon)
* Post-collection data processing pipeline (coming soon)
See [Features](./features/) page for more details.
## Technical Specs
* Backend components implemented in Go
* React/Javascript UI
* Supported storage backends:
* [Cassandra 3.4+](./deployment/#cassandra)
* [Elasticsearch 5.x, 6.x, 7.x](./deployment/#elasticsearch)
* [Kafka](./deployment/#kafka)
* memory storage
## Quick Start
See [running a docker all in one image](getting-started#all-in-one).
## Screenshots
### Traces View
[![Traces View](/img/traces-ss.png)](/img/traces-ss.png)
### Trace Detail View
[![Detail View](/img/trace-detail-ss.png)](/img/trace-detail-ss.png)
## Related links
- [Evolving Distributed tracing At Uber Engineering](https://eng.uber.com/distributed-tracing/)
- [Mastering Distributed Tracing](https://shkuro.com/books/2019-mastering-distributed-tracing/)
- [Tracing HTTP request latency in Go with OpenTracing](https://medium.com/opentracing/tracing-http-request-latency-in-go-with-opentracing-7cc1282a100a)
- [Distributed Tracing with Jaeger & Prometheus on Kubernetes](https://blog.openshift.com/openshift-commons-briefing-82-distributed-tracing-with-jaeger-prometheus-on-kubernetes/)
- [Using Jaeger with Istio](https://istio.io/docs/tasks/telemetry/distributed-tracing.html)
- [Using Jaeger with Envoy](https://www.envoyproxy.io/docs/envoy/latest/start/sandboxes/jaeger_tracing.html)
[dapper]: https://research.google.com/pubs/pub36356.html
[ubeross]: http://uber.github.io

View File

@ -1,85 +0,0 @@
---
title: APIs
hasparent: true
---
Jaeger components implement various APIs for saving or retrieving trace data.
The following labels are used to describe API compatibility guarantees.
* **stable** - the API guarantees backwards compatibility. If breaking changes are going to be made in the future, they will result in a new API version, e.g. `/api/v2` URL prefix or a different namespace in the IDL.
* **internal** - the APIs intended for internal communications between Jaeger components and not recommended for use by external components.
* **deprecated** - the APIs that are only maintained for legacy reasons and will be phased out in the future.
## Span reporting APIs
Agent and Collector are the two components of the Jaeger backend that can receive spans. At this time they support two sets of non-overlapping APIs.
### Thrift over UDP (stable)
The Agent can only receive spans over UDP in Thrift format. The primary API is a UDP packet that contains a Thrift-encoded `Batch` struct defined in [jaeger.thrift][jaeger.thrift] IDL file, located in the [jaeger-idl][jaeger-idl] repository. Most Jaeger Clients use Thrift's `compact` encoding, however some client libraries do not support it (notably, Node.js) and use Thrift's `binary` encoding (sent to a different UDP port). The Agent's API is defined by [agent.thrift][agent.thrift] IDL file.
For legacy reasons, the Agent also accepts spans in Zipkin format, however, only very old versions of Jaeger clients can send data in that format and it is officially deprecated.
### Protobuf via gRPC (stable)
In a typical Jaeger deployment, Agents receive spans from Clients and forward them to Collectors. Since Jaeger version 1.11 the official and recommended protocol between Agents and Collectors is gRPC with Protobuf as defined in [collector.proto][collector.proto] IDL file.
### Thrift over HTTP (stable)
In some cases it is not feasible to deploy Jaeger Agent next to the application, for example, when the application code is running as AWS Lambda function. In these scenarios the Jaeger Clients can be configured to submit spans directly to the Collectors over HTTP/HTTPS.
The same [jaeger.thrift][jaeger.thrift] payload can be submitted in HTTP POST request to `/api/traces` endpoint, for example, `https://jaeger-collector:14268/api/traces`. The `Batch` struct needs to be encoded using Thrift's `binary` encoding, and the HTTP request should specify the content type header:
```
Content-Type: application/vnd.apache.thrift.binary
```
### JSON over HTTP (n/a)
There is no official Jaeger JSON format that can be accepted by the collector. In the future the Protobuf-generated JSON may be supported.
### Thrift via TChannel (deprecated)
Agent and Collector can communicate using TChannel protocol. This protocol is generally not supported by the routing infrastructure and has been deprecated. It will be eventually removed from Jaeger.
### Zipkin Formats (stable)
Jaeger Collector can also accept spans in several Zipkin data format, namely JSON v1/v2 and Thrift. The Collector needs to be configured to enable Zipkin HTTP server, e.g. on port 9411 used by Zipkin collectors. The server enables two endpoints that expect POST requests:
* `/api/v1/spans` for submitting spans in Zipkin JSON v1 or Zipkin Thrift format.
* `/api/v2/spans` for submitting spans in Zipkin JSON v2.
## Trace retrieval APIs
Traces saved in the storage can be retrieved by calling Jaeger Query Service.
### gRPC/Protobuf (stable)
The recommended way for programmatically retrieving traces and other data is via gRPC endpoint defined in [query.proto][query.proto] IDL file.
### HTTP JSON (internal)
Jaeger UI communicates with Jaeger Query Service via JSON API. For example, a trace can be retrieved via GET request to `https://jaeger-query:16686/api/traces/{trace-id-hex-string}`. This JSON API is intentionally undocumented and subject to change.
## Clients configuration (internal)
Client libraries not only submit finished spans to Jaeger backend, but also periodically poll the Agents for various configurations, such as sampling strategies. The schema for the payload is defined by [sampling.thrift][sampling.thrift], encoded as JSON using Thrift's built-in JSON generation capabilities.
## Service dependencies graph (internal)
Can be retrieved from Query Service at `/api/dependencies` endpoint. The GET request expects two parameters:
* `endTs` (number of milliseconds since epoch) - the end of the time interval
* `lookback` (in milliseconds) - the length the time interval (i.e. start-time + lookback = end-time).
The returned JSON is a list of edges represented as tuples `(caller, callee, count)`.
For programmatic access to service graph, the recommended API is gRPC/Protobuf described above.
[jaeger-idl]: https://github.com/jaegertracing/jaeger-idl/
[jaeger.thrift]: https://github.com/jaegertracing/jaeger-idl/blob/master/thrift/jaeger.thrift
[agent.thrift]: https://github.com/jaegertracing/jaeger-idl/blob/master/thrift/agent.thrift
[sampling.thrift]: https://github.com/jaegertracing/jaeger-idl/blob/master/thrift/sampling.thrift
[collector.proto]: https://github.com/jaegertracing/jaeger-idl/blob/master/proto/api_v2/collector.proto
[query.proto]: https://github.com/jaegertracing/jaeger-idl/blob/master/proto/api_v2/query.proto

View File

@ -1,69 +0,0 @@
---
title: Architecture
weight: 3
children:
- title: APIs
url: apis
- title: Sampling
url: sampling
---
Jaeger's clients adhere to the data model described in the OpenTracing standard. Reading the [specification](https://github.com/opentracing/specification/blob/master/specification.md) will help you understand this section better.
## Terminology
Let's start with a quick refresher on the terminology defined by the [OpenTracing Specification](https://github.com/opentracing/specification/blob/master/specification.md).
### Span
{{< definition "span" >}}
![Traces And Spans](/img/spans-traces.png)
### Trace
{{< definition "trace" >}}
## Components
Jaeger can be deployed either as all-in-one binary, where all Jaeger backend components
run in a single process, or as a scalable distributed system, discussed below.
There are two main deployment options:
1. Collectors are writing directly to storage.
2. Collectors are writing to Kafka as a preliminary buffer.
![Architecture](/img/architecture-v1.png)
*Illustration of direct-to-storage architecture*
![Architecture](/img/architecture-v2.png)
*Illustration of architecture with Kafka as intermediate buffer*
This section details the constituent parts of Jaeger and how they relate to each other. It is arranged by the order in which spans from your application interact with them.
### Jaeger client libraries
Jaeger clients are language specific implementations of the [OpenTracing API](https://opentracing.io). They can be used to instrument applications for distributed tracing either manually or with a variety of existing open source frameworks, such as Flask, Dropwizard, gRPC, and many more, that are already integrated with OpenTracing.
An instrumented service creates {{< tip "spans" "span" >}} when receiving new requests and attaches context information ({{< tip "trace" >}} id, {{< tip "span" "span" >}} id, and {{< tip "baggage" "baggage" >}}) to outgoing requests. Only the ids and baggage are propagated with requests; all other profiling data, like operation name, timing, tags and logs, is not propagated. Instead, it is transmitted out of process to the Jaeger backend asynchronously, in the background.
The instrumentation is designed to be always on in production. To minimize the overhead, Jaeger clients employ various sampling strategies. When a trace is sampled, the profiling span data is captured and transmitted to the Jaeger backend. When a trace is not sampled, no profiling data is collected at all, and the calls to the OpenTracing APIs are short-circuited to incur the minimal amount of overhead. By default, Jaeger clients sample 0.1% of traces (1 in 1000), and have the ability to retrieve sampling strategies from the Jaeger backend. For more information, please refer to [Sampling](../sampling/).
![Context propagation explained](/img/context-prop.png)
*Illustration of context propagation*
### Agent
{{< definition "agent" >}}
### Collector
{{< definition "collector" >}}
### Query
{{< definition "query" >}}
### Ingester
{{< definition "ingester" >}}

View File

@ -1,13 +0,0 @@
---
title: CLI flags
widescreen: true
hasparent: true
---
This is auto-generated documentation for CLI flags supported by Jaeger binaries.
* CLI flags for some binaries change depending on the `SPAN_STORAGE_TYPE` environment variable. Relevant variations are included below.
* Some binaries support _commands_ (mostly informational), such as `env`, `docs`, and `version`. These commands are not included here.
* All parameters can be also provided via environment variables, by changing all letters to upper-case and replacing all punctuation characters with underscore `_`. For example, the value for the flag `--cassandra.connections-per-host` can be provided via `CASSANDRA_CONNECTIONS_PER_HOST` environment variable.
{{< cli/tools-list >}}

View File

@ -1,527 +0,0 @@
---
title: Deployment
weight: 4
children:
- title: Operator for Kubernetes
navtitle: Kubernetes
url: operator
- title: Frontend/UI
url: frontend-ui
- title: Windows
url: windows
- title: CLI Flags
url: cli
---
The main Jaeger backend components are released as Docker images on Docker Hub:
Component | Repository
--------------------- | ---
**jaeger-agent** | [hub.docker.com/r/jaegertracing/jaeger-agent/](https://hub.docker.com/r/jaegertracing/jaeger-agent/)
**jaeger-collector** | [hub.docker.com/r/jaegertracing/jaeger-collector/](https://hub.docker.com/r/jaegertracing/jaeger-collector/)
**jaeger-query** | [hub.docker.com/r/jaegertracing/jaeger-query/](https://hub.docker.com/r/jaegertracing/jaeger-query/)
**jaeger-ingester** | [hub.docker.com/r/jaegertracing/jaeger-ingester/](https://hub.docker.com/r/jaegertracing/jaeger-ingester/)
There are orchestration templates for running Jaeger with:
* Kubernetes: [github.com/jaegertracing/jaeger-kubernetes](https://github.com/jaegertracing/jaeger-kubernetes),
* OpenShift: [github.com/jaegertracing/jaeger-openshift](https://github.com/jaegertracing/jaeger-openshift).
## Configuration Options
Jaeger binaries can be configured in a number of ways (in the order of decreasing priority):
* command line arguments,
* environment variables,
* configuration files in JSON, TOML, YAML, HCL, or Java properties formats.
To see the complete list of options, run the binary with `help` command. Options that are specific to a certain storage backend are only listed if the storage type is selected. For example, to see all available options in the Collector with Cassandra storage:
```sh
$ docker run --rm \
-e SPAN_STORAGE_TYPE=cassandra \
jaegertracing/jaeger-collector:{{< currentVersion >}} \
help
```
In order to provide configuration parameters via environment variables, find the respective command line option and convert its name to UPPER_SNAKE_CASE, for example:
Command line option | Environment variable
-----------------------------------|-------------------------------
`--cassandra.connections-per-host` | `CASSANDRA_CONNECTIONS_PER_HOST`
`--metrics-backend` | `METRICS_BACKEND`
## Agent
Jaeger client libraries expect **jaeger-agent** process to run locally on each host.
The agent exposes the following ports:
Port | Protocol | Function
----- | ------- | ---
6831 | UDP | accept [jaeger.thrift][jaeger-thrift] in `compact` Thrift protocol used by most current Jaeger clients
6832 | UDP | accept [jaeger.thrift][jaeger-thrift] in `binary` Thrift protocol used by Node.js Jaeger client (because [thriftrw][thriftrw] npm package does not support `compact` protocol)
5778 | HTTP | serve configs, sampling strategies
5775 | UDP | accept [zipkin.thrift][zipkin-thrift] in `compact` Thrift protocol (deprecated; only used by very old Jaeger clients, circa 2016)
14271 | HTTP | admin port: health check at `/` and metrics at `/metrics`
It can be executed directly on the host or via Docker, as follows:
```sh
## make sure to expose only the ports you use in your deployment scenario!
docker run \
--rm \
-p6831:6831/udp \
-p6832:6832/udp \
-p5778:5778/tcp \
-p5775:5775/udp \
jaegertracing/jaeger-agent:{{< currentVersion >}}
```
### Discovery System Integration
The agents can connect point to point to a single collector address, which could be
load balanced by another infrastructure component (e.g. DNS) across multiple collectors.
The agent can also be configured with a static list of collector addresses.
On Docker, a command like the following can be used:
```sh
docker run \
--rm \
-p5775:5775/udp \
-p6831:6831/udp \
-p6832:6832/udp \
-p5778:5778/tcp \
jaegertracing/jaeger-agent:{{< currentVersion >}} \
--reporter.grpc.host-port=jaeger-collector.jaeger-infra.svc:14250
```
Or use `--reporter.tchannel.host-port=jaeger-collector.jaeger-infra.svc:14267` to use
legacy tchannel reporter.
When using gRPC, you have several options for load balancing and name resolution:
* Single connection and no load balancing. This is the default if you specify a single `host:port`. (example: `--reporter.grpc.host-port=jaeger-collector.jaeger-infra.svc:14250`)
* Static list of hostnames and round-robin load balancing. This is what you get with a comma-separated list of addresses. (example: `reporter.grpc.host-port=jaeger-collector1:14250,jaeger-collector2:14250,jaeger-collector3:14250`)
* Dynamic DNS resolution and round-robin load balancing. To get this behaviour, prefix the address with `dns:///` and gRPC will attempt to resolve the hostname using SRV records (for [external load balancing](https://github.com/grpc/grpc/blob/master/doc/load-balancing.md)), TXT records (for [service configs](https://github.com/grpc/grpc/blob/master/doc/service_config.md)), and A records. Refer to the [gRPC Name Resolution docs](https://github.com/grpc/grpc/blob/master/doc/naming.md) and the [dns_resolver.go implementation](https://github.com/grpc/grpc-go/blob/master/resolver/dns/dns_resolver.go) for more info. (example: `--reporter.grpc.host-port=dns:///jaeger-collector.jaeger-infra.svc:14250`)
### Agent level tags
Jaeger supports agent level tags, that can be added to the process tags of all spans passing through the agent. This is supported through the command line flag `--agent.tags=key1=value1,key2=value2,...,keyn=valuen`. Tags can also be set through an environment flag like so - `--agent.tags=key=${envFlag:defaultValue}` - The tag value will be set to the value of the `envFlag` environment key and `defaultValue` if not set. This feature is not supported for the tchannel reporter, enabled using the flags `--collector.host-port` or `--reporter.tchannel.host-port`.
## Collectors
The collectors are stateless and thus many instances of **jaeger-collector** can be run in parallel.
Collectors require almost no configuration, except for the location of Cassandra cluster,
via `--cassandra.keyspace` and `--cassandra.servers` options, or the location of Elasticsearch cluster, via
`--es.server-urls`, depending on which storage is specified. To see all command line options run
```sh
go run ./cmd/collector/main.go -h
```
or, if you don't have the source code
```sh
docker run -it --rm jaegertracing/jaeger-collector:{{< currentVersion >}} -h
```
At default settings the collector exposes the following ports:
Port | Protocol | Function
----- | ------- | ---
14267 | TChannel | used by **jaeger-agent** to send spans in jaeger.thrift format
14250 | gRPC | used by **jaeger-agent** to send spans in model.proto format
14268 | HTTP | can accept spans directly from clients in jaeger.thrift format over binary thrift protocol
9411 | HTTP | can accept Zipkin spans in Thrift, JSON and Proto (disabled by default)
14269 | HTTP | admin port: health check at `/` and metrics at `/metrics`
## Storage Backends
Collectors require a persistent storage backend. Cassandra and Elasticsearch are the primary supported storage backends. Additional backends are [discussed here](https://github.com/jaegertracing/jaeger/issues/638).
The storage type can be passed via `SPAN_STORAGE_TYPE` environment variable. Valid values are `cassandra`, `elasticsearch`, `kafka` (only as a buffer), `grpc-plugin`, `badger` (only with all-in-one) and `memory` (only with all-in-one).
As of version 1.6.0, it's possible to use multiple storage types at the same time by providing a comma-separated list of valid types to the `SPAN_STORAGE_TYPE` environment variable.
It's important to note that all listed storage types are used for writing, but only the first type in the list will be used for reading and archiving.
### Memory
The in-memory storage is not intended for production workloads. It's intended as a simple solution to get started quickly and
data will be lost once the process is gone.
By default, there's no limit in the amount of traces stored in memory but a limit can be established by passing an
integer value via `--memory.max-traces`.
### Badger - local storage
Experimental since Jaeger 1.9
[Badger](https://github.com/dgraph-io/badger) is an embedded local storage, only available
with **all-in-one** distribution. By default it acts as an ephemeral storage using a temporary filesystem.
This can be overridden by using the `--badger.ephemeral=false` option.
```sh
docker run \
-e SPAN_STORAGE_TYPE=badger \
-e BADGER_EPHEMERAL=false \
-e BADGER_DIRECTORY_VALUE=/badger/data \
-e BADGER_DIRECTORY_KEY=/badger/key \
-v <storage_dir_on_host>:/badger \
-p 16686:16686 \
jaegertracing/all-in-one:{{< currentVersion >}}
```
### Cassandra
Supported versions: 3.4+
Deploying Cassandra itself is out of scope for our documentation. One good
source of documentation is the [Apache Cassandra Docs](https://cassandra.apache.org/doc/latest/).
#### Configuration
##### Minimal
```sh
docker run \
-e SPAN_STORAGE_TYPE=cassandra \
-e CASSANDRA_SERVERS=<...> \
jaegertracing/jaeger-collector:{{< currentVersion >}}
```
##### All options
To view the full list of configuration options, you can run the following command:
```sh
docker run \
-e SPAN_STORAGE_TYPE=cassandra \
jaegertracing/jaeger-collector:{{< currentVersion >}} \
--help
```
#### Schema script
A script is provided to initialize Cassandra keyspace and schema
using Cassandra's interactive shell [`cqlsh`][cqlsh]:
```sh
MODE=test sh ./plugin/storage/cassandra/schema/create.sh | cqlsh
```
For production deployment, pass `MODE=prod DATACENTER={datacenter}` arguments to the script,
where `{datacenter}` is the name used in the Cassandra configuration / network topology.
The script also allows overriding TTL, keyspace name, replication factor, etc.
Run the script without arguments to see the full list of recognized parameters.
#### TLS support
Jaeger supports TLS client to node connections as long as you've configured
your Cassandra cluster correctly. After verifying with e.g. `cqlsh`, you can
configure the collector and query like so:
```sh
docker run \
-e CASSANDRA_SERVERS=<...> \
-e CASSANDRA_TLS=true \
-e CASSANDRA_TLS_SERVER_NAME="CN-in-certificate" \
-e CASSANDRA_TLS_KEY=<path to client key file> \
-e CASSANDRA_TLS_CERT=<path to client cert file> \
-e CASSANDRA_TLS_CA=<path to your CA cert file> \
jaegertracing/jaeger-collector:{{< currentVersion >}}
```
The schema tool also supports TLS. You need to make a custom cqlshrc file like
so:
```
# Creating schema in a cassandra cluster requiring client TLS certificates.
#
# Create a volume for the schema docker container containing four files:
# cqlshrc: this file
# ca-cert: the cert authority for your keys
# client-key: the keyfile for your client
# client-cert: the cert file matching client-key
#
# if there is any sort of DNS mismatch and you want to ignore server validation
# issues, then uncomment validate = false below.
#
# When running the container, map this volume to /root/.cassandra and set the
# environment variable CQLSH_SSL=--ssl
[ssl]
certfile = ~/.cassandra/ca-cert
userkey = ~/.cassandra/client-key
usercert = ~/.cassandra/client-cert
# validate = false
```
### Elasticsearch
Supported in Jaeger since 0.6.0
Supported versions: 5.x, 6.x, 7.x
Elasticsearch version is automatically retrieved from root/ping endpoint.
Based on this version Jaeger uses compatible index mappings and Elasticsearch REST API.
The version can be explicitly provided via `--es.version=` flag.
Elasticsearch does not require initialization other than
[installing and running Elasticsearch](https://www.elastic.co/downloads/elasticsearch).
Once it is running, pass the correct configuration values to the Jaeger collector and query service.
#### Configuration
##### Minimal
```sh
docker run \
-e SPAN_STORAGE_TYPE=elasticsearch \
-e ES_SERVER_URLS=<...> \
jaegertracing/jaeger-collector:{{< currentVersion >}}
```
##### All options
To view the full list of configuration options, you can run the following command:
```sh
docker run \
-e SPAN_STORAGE_TYPE=elasticsearch \
jaegertracing/jaeger-collector:{{< currentVersion >}} \
--help
```
#### Shards and Replicas for Elasticsearch indices
Shards and replicas are some configuration values to take special attention to, because this is decided upon
index creation. [This article](https://qbox.io/blog/optimizing-elasticsearch-how-many-shards-per-index) goes into
more information about choosing how many shards should be chosen for optimization.
#### Elasticsearch Rollover
[Elasticsearch rollover](https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-rollover-index.html) is an index management strategy that optimizes use of resources allocated to indices.
For example, indices that do not contain any data still allocate shards, and conversely, a single index might contain significantly more data than the others.
Jaeger by default stores data in daily indices which might not optimally utilize resources. Rollover feature can be enabled by `--es.use-aliases=true`.
Rollover lets you configure when to roll over to a new index based on one or more of the following criteria:
* `max_age` - the maximum age of the index. It uses [time units](https://www.elastic.co/guide/en/elasticsearch/reference/master/common-options.html#time-units): `d`, `h`, `m`.
* `max_docs` - the maximum documents in the index.
* `max_size` - the maximum estimated size of primary shards (since Elasticsearch 6.x). It uses [byte size units](https://www.elastic.co/guide/en/elasticsearch/reference/master/common-options.html#byte-units) `tb`, `gb`, `mb`.
Rollover index management strategy is more complex than using the default daily indices and it requires an initialisation job to prepare the storage and two cron jobs to manage indices.
To learn more about rollover index management in Jaeger refer to this
[article](https://medium.com/jaegertracing/using-elasticsearch-rollover-to-manage-indices-8b3d0c77915d).
##### Initialize
The following command prepares Elasticsearch for rollover deployment by creating index aliases, indices, and index templates:
```sh
docker run -it --rm --net=host jaegertracing/jaeger-es-rollover:latest init http://localhost:9200 # <1>
```
If you need to initialize archive storage, add `-e ARCHIVE=true`.
After the initialization Jaeger can be deployed with `--es.use-aliases=true`.
##### Rolling over to a new index
The next step is to periodically execute the rollover API which rolls the write alias to a new index based on supplied conditions. The command also adds a new index to the read alias to make new data available for search.
```shell
docker run -it --rm --net=host -e CONDITIONS='{"max_age": "2d"}' jaegertracing/jaeger-es-rollover:latest rollover http://localhost:9200 # <1>
```
<1> The command rolls the alias over to a new index if the age of the current write index is older than 2 days. For more conditions see [Elasticsearch docs](https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-rollover-index.html).
The next step is to remove old indices from read aliases. It means that old data will not be available for search. This imitates the behavior of `--es.max-span-age` flag used in the default index-per-day deployment. This step could be optional and old indices could be simply removed by index cleaner in the next step.
```sh
docker run -it --rm --net=host -e UNIT=days -e UNIT_COUNT=7 jaegertracing/jaeger-es-rollover:latest lookback http://localhost:9200 # <1>
```
<1> Removes indices older than 7 days from read alias.
##### Remove old data
The historical data can be removed with the `jaeger-es-index-cleaner` that is also used for daily indices.
```shell
docker run -it --rm --net=host -e ROLLOVER=true jaegertracing/jaeger-es-index-cleaner:latest 14 http://localhost:9200 # <1>
```
<1> Remove indices older than 14 days.
#### Upgrade Elasticsearch version
Elasticsearch defines wire and index compatibility versions. The index compatibility defines
the minimal version a node can read data from. For example Elasticsearch 7 can read indices
created by Elasticsearch 6, however it cannot read indices created by Elasticsearch 5 even
though they use the same index mappings. Therefore upgrade from Elasticsearch 6 to 7 does not require any
data migration. However, upgrade from Elasticsearch 5 to 7 has to be done through Elasticsearch 6 and wait
until indices created by ES 5.x are removed or explicitly reindexed.
Refer to the Elasticsearch [documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current//setup-upgrade.html)
for wire and index compatibility versions. Generally this information can be retrieved from root/ping REST endpoint.
##### Reindex
Manual reindexing can be used when upgrading from Elasticsearch 5 to 7 (through Elasticsearch 6)
without waiting until indices created by Elasticsearch 5 are removed.
1. Reindex all span indices to new indices with suffix `-1`:
```bash
curl -ivX POST -H "Content-Type: application/json" http://localhost:9200/_reindex -d @reindex.json
{
"source": {
"index": "jaeger-span-*"
},
"dest": {
"index": "jaeger-span"
},
"script": {
"lang": "painless",
"source": "ctx._index = 'jaeger-span-' + (ctx._index.substring('jaeger-span-'.length(), ctx._index.length())) + '-1'"
}
}
```
2. Delete indices with old mapping:
```bash
curl -ivX DELETE -H "Content-Type: application/json" http://localhost:9200/jaeger-span-\*,-\*-1
```
3. Create indices without `-1` suffix:
```bash
curl -ivX POST -H "Content-Type: application/json" http://localhost:9200/_reindex -d @reindex.json
{
"source": {
"index": "jaeger-span-*"
},
"dest": {
"index": "jaeger-span"
},
"script": {
"lang": "painless",
"source": "ctx._index = 'jaeger-span-' + (ctx._index.substring('jaeger-span-'.length(), ctx._index.length() - 2))"
}
}
```
4. Remove suffixed indices:
```bash
curl -ivX DELETE -H "Content-Type: application/json" http://localhost:9200/jaeger-span-\*-1
```
Run the commands analogically for other Jaeger indices.
There might exist more effective migration procedure. Please share with the community any findings.
### Kafka
Supported in Jaeger since 1.6.0
Supported Kafka versions: 0.9+
Kafka can be used as an intermediary buffer between collector and an actual storage.
The collector is configured with `SPAN_STORAGE_TYPE=kafka` that makes it write all received spans
into a Kafka topic. A new component [Ingester](#ingester), added in version 1.7.0, is used to read from
Kafka and store spans in another storage backend (Elasticsearch or Cassandra).
Writing to Kafka is particularly useful for building post-processing data pipelines.
#### Configuration
##### Minimal
```sh
docker run \
-e SPAN_STORAGE_TYPE=kafka \
-e KAFKA_PRODUCER_BROKERS=<...> \
-e KAFKA_TOPIC=<...> \
jaegertracing/jaeger-collector:{{< currentVersion >}}
```
##### All options
To view the full list of configuration options, you can run the following command:
```sh
docker run \
-e SPAN_STORAGE_TYPE=kafka \
jaegertracing/jaeger-collector:{{< currentVersion >}} \
--help
```
#### Topic & partitions
Unless your Kafka cluster is configured to automatically create topics, you will need to create it ahead of time. You can refer to [the Kafka quickstart documentation](https://kafka.apache.org/documentation/#quickstart_createtopic) to learn how.
You can find more information about topics and partitions in general in the [official documentation](https://kafka.apache.org/documentation/#intro_topics). [This article](https://www.confluent.io/blog/how-to-choose-the-number-of-topicspartitions-in-a-kafka-cluster/) provide more details about how to choose the number of partitions.
### Storage plugin
Jaeger supports gRPC based storage plugins. For more information refer to [jaeger/plugin/storage/grpc](https://github.com/jaegertracing/jaeger/tree/master/plugin/storage/grpc)
Available plugins:
* [InfluxDB](https://github.com/influxdata/jaeger-influxdb/)
* [Logz.io](https://github.com/logzio/jaeger-logzio) - secure, scalable, managed, cloud-based ELK storage.
```sh
docker run \
-e SPAN_STORAGE_TYPE=grpc-plugin \
-e GRPC_STORAGE_PLUGIN_BINARY=<...> \
-e GRPC_STORAGE_PLUGIN_CONFIGURATION_FILE=<...> \
jaegertracing/all-in-one:{{< currentVersion >}}
```
## Ingester
**jaeger-ingester** is a service which reads span data from Kafka topic and writes it to another storage backend (Elasticsearch or Cassandra).
Port | Protocol | Function
----- | ------- | ---
14270 | HTTP | admin port: health check at `/` and metrics at `/metrics`
To view all exposed configuration options run the following command:
```sh
docker run \
-e SPAN_STORAGE_TYPE=cassandra \
jaegertracing/jaeger-ingester:{{< currentVersion >}}
--help
```
## Query Service & UI
**jaeger-query** serves the API endpoints and a React/Javascript UI.
The service is stateless and is typically run behind a load balancer, such as [**NGINX**](https://www.nginx.com/).
At default settings the query service exposes the following port(s):
Port | Protocol | Function
----- | ------- | ---
16686 | HTTP | `/api/*` endpoints and Jaeger UI at `/`
16687 | HTTP | admin port: health check at `/` and metrics at `/metrics`
### Minimal deployment example (Elasticsearch backend):
```sh
docker run -d --rm \
-p 16686:16686 \
-p 16687:16687 \
-e SPAN_STORAGE_TYPE=elasticsearch \
-e ES_SERVER_URLS=http://<ES_SERVER_IP>:<ES_SERVER_PORT> \
jaegertracing/jaeger-query:{{< currentVersion >}}
```
### UI Base Path
The base path for all **jaeger-query** HTTP routes can be set to a non-root value, e.g. `/jaeger` would cause all UI URLs to start with `/jaeger`. This can be useful when running **jaeger-query** behind a reverse proxy.
The base path can be configured via the `--query.base-path` command line parameter or the `QUERY_BASE_PATH` environment variable.
### UI Customization and Embedding
Please refer to the [dedicated Frontend/UI page](../frontend-ui/).
## Aggregation Jobs for Service Dependencies
Production deployments need an external process which aggregates data and creates dependency links between services. Project [spark-dependencies](https://github.com/jaegertracing/spark-dependencies) is a Spark job which derives dependency links and stores them directly to the storage.
## Configuration
All binaries accepts command line properties and environmental variables, power by [viper](https://github.com/spf13/viper) and [cobra](https://github.com/spf13/cobra) libraries. Please refer to the [CLI Flags](../cli/) page for more information.
[cqlsh]: http://cassandra.apache.org/doc/latest/tools/cqlsh.html
[zipkin-thrift]: https://github.com/jaegertracing/jaeger-idl/blob/master/thrift/zipkincore.thrift
[jaeger-thrift]: https://github.com/jaegertracing/jaeger-idl/blob/master/thrift/jaeger.thrift
[thriftrw]: https://www.npmjs.com/package/thriftrw

View File

@ -1,25 +0,0 @@
---
title: Frequently Asked Questions
navtitle: FAQs
description: Answers to some frequently asked questions about Jaeger.
weight: 11
---
## Why is the Dependencies page empty?
The Dependencies page shows a graph of services traced by Jaeger and connections between them. When you are using `all-in-one` binary with in-memory storage, the graph is calculated on-demand from all the traces stored in memory. However, if you are using a real distributed storage like Cassandra or Elasticsearch, it is too expensive to scan all the data in the database to build the service graph. Instead, the Jaeger project provides "big data" jobs that can be used to extract the service graph data from traces:
* https://github.com/jaegertracing/spark-dependencies - the older Spark job that can be run periodically
* https://github.com/jaegertracing/jaeger-analytics - the new (experimental) streaming Flink jobs that run continuously and builds the service graph in smaller time intervals
## Why do I not see any spans in Jaeger?
Please refer to the [Troubleshooting](../troubleshooting/) guide.
## Do I need to run jaeger-agent?
`jaeger-agent` is not always necessary. Jaeger client libraries can be configured to export trace data directly to `jaeger-collector`. However, the following are the reasons why running `jaeger-agent` is recommended:
* If we want Jaeger client libraries to send trace data directly to collectors, we must provide them with a URL of the HTTP endpoint. It means that our applications require additional configuration containing this parameter, especially if we are running multiple Jaeger installations (e.g. in different availability zones or regions) and want the data sent to a nearby installation. In contrast, when using the agent, the libraries require no additional configuration because the agent is always accessible via `localhost`. It acts as a sidecar and proxies the requests to the appropriate collectors.
* The agent can be configured to enrich the tracing data with infrastructure-specific metadata by adding extra tags to the spans, such as the current zone, region, etc. If the agent is running as a host daemon, it will be shared by all applications running on the same host. If the agent is running as a true sidecar, i.e. one per application, it can provide additional functionality such as strong authentication, multi-tenancy (see [this blog post](https://medium.com/jaegertracing/jaeger-and-multitenancy-99dfa1d49dc0)), pod name, etc.
* Agents allow implementing traffic control to the collectors. If we have thousands of hosts in the data center, each running many applications, and each application sending data directly to the collectors, there may be too many open connections for each collector to handle. The agents can load balance this traffic with fewer connections.

View File

@ -1,57 +0,0 @@
---
title: Features
hasparent: true
---
Jaeger is used for monitoring and troubleshooting microservices-based distributed systems, including:
* Distributed context propagation
* Distributed transaction monitoring
* Root cause analysis
* Service dependency analysis
* Performance / latency optimization
## High Scalability
Jaeger backend is designed to have no single points of failure and to scale with the business needs.
For example, any given Jaeger installation at Uber is typically processing several billion {{< tip "spans" "span" >}} per day.
## Native support for OpenTracing
Jaeger backend, Web UI, and instrumentation libraries have been designed from ground up to support the OpenTracing standard.
* Represent {{< tip "traces" "trace" >}} as {{< tip "directed acyclic graphs" "directed acyclic graph" >}} (not just trees) via [span references](https://github.com/opentracing/specification/blob/master/specification.md#references-between-spans)
* Support strongly typed span _tags_ and _structured logs_
* Support general distributed context propagation mechanism via _baggage_
## Multiple storage backends
Jaeger supports two popular open source NoSQL databases as trace storage backends: Cassandra 3.4+ and Elasticsearch 5.x/6.x/7.x.
There are ongoing community experiments using other databases, such as ScyllaDB, InfluxDB, Amazon DynamoDB, Logz.io. Jaeger also ships
with a simple in-memory storage for testing setups.
## Modern Web UI
Jaeger Web UI is implemented in Javascript using popular open source frameworks like React. Several performance
improvements have been released in v1.0 to allow the UI to efficiently deal with large volumes of data, and to display
{{< tip "traces" "trace" >}} with tens of thousands of {{< tip "spans" "span" >}} (e.g. we tried a trace with 80,000 spans).
## Cloud Native Deployment
Jaeger backend is distributed as a collection of Docker images. The binaries support various configuration methods,
including command line options, environment variables, and configuration files in multiple formats (yaml, toml, etc.).
Deployment to Kubernetes clusters is assisted by a [Kubernetes operator](https://github.com/jaegertracing/jaeger-operator), [Kubernetes templates](https://github.com/jaegertracing/jaeger-kubernetes)
and a [Helm chart](https://github.com/kubernetes/charts/tree/master/incubator/jaeger).
## Observability
All Jaeger backend components expose [Prometheus](https://prometheus.io/) metrics by default (other metrics backends are
also supported). Logs are written to standard out using the structured logging library [zap](https://github.com/uber-go/zap).
## Backwards compatibility with Zipkin
Although we recommend instrumenting applications with OpenTracing API and binding to Jaeger client libraries to benefit
from advanced features not available elsewhere, if your organization has already invested in the instrumentation
using Zipkin libraries, you do not have to rewrite all that code. Jaeger provides backwards compatibility with Zipkin
by accepting spans in Zipkin formats (Thrift, JSON v1/v2 and Protobuf) over HTTP. Switching from Zipkin backend is just a matter
of routing the traffic from Zipkin libraries to the Jaeger backend.

View File

@ -1,245 +0,0 @@
---
title: Frontend/UI Configuration
navtitle: Frontend/UI
hasparent: true
weight: 7
---
## Configuration
Several aspects of the UI can be configured:
* The Dependencies section can be enabled / configured
* Google Analytics tracking can be enabled / configured
* Additional menu options can be added to the global nav
* Search input limits can be configured
These options can be configured by a JSON configuration file. The `--query.ui-config` command line parameter of the query service must then be set to the path to the JSON file when the query service is started.
An example configuration file:
```json
{
"dependencies": {
"dagMaxNumServices": 200,
"menuEnabled": true
},
"archiveEnabled": true,
"tracking": {
"gaID": "UA-000000-2",
"trackErrors": true
},
"menu": [
{
"label": "About Jaeger",
"items": [
{
"label": "GitHub",
"url": "https://github.com/jaegertracing/jaeger"
},
{
"label": "Docs",
"url": "http://jaeger.readthedocs.io/en/latest/"
}
]
}
],
"search": {
"maxLookback": {
"label": "2 Days",
"value": "2d"
},
"maxLimit": 1500
},
"linkPatterns": [{
"type": "process",
"key": "jaeger.version",
"url": "https://github.com/jaegertracing/jaeger-client-java/releases/tag/#{jaeger.version}",
"text": "Information about Jaeger release #{jaeger.version}"
}]
}
```
### Dependencies
`dependencies.dagMaxNumServices` defines the maximum number of services allowed before the DAG dependency view is disabled. Default: `200`.
`dependencies.menuEnabled` enables (`true`) or disables (`false`) the dependencies menu button. Default: `true`.
### Archive Support
`archiveEnabled` enables (`true`) or disables (`false`) the archive traces button. Default: `false`. It requires a configuration of an archive storage in Query service. Archived traces are only accessible directly by ID, they are not searchable.
### Google Analytics Tracking
`tracking.gaID` defines the Google Analytics tracking ID. This is required for Google Analytics tracking, and setting it to a non-`null` value enables Google Analytics tracking. Default: `null`.
`tracking.trackErrors` enables (`true`) or disables (`false`) error tracking via Google Analytics. Errors can only be tracked if a valid Google Analytics ID is provided. For additional details on error tracking via Google Analytics see the [tracking README](https://github.com/jaegertracing/jaeger-ui/blob/c622330546afc1be59a42f874bcc1c2fadf7e69a/src/utils/tracking/README.md) in the UI repo. Default: `true`.
### Custom Menu Items
`menu` allows additional links to be added to the global nav. The additional links are right-aligned.
In the sample JSON config above, the configured menu will have a dropdown labeled "About Jaeger" with sub-options for "GitHub" and "Docs". The format for a link in the top right menu is as follows:
```json
{
"label": "Some text here",
"url": "https://example.com"
}
```
Links can either be members of the `menu` Array, directly, or they can be grouped into a dropdown menu option. The format for a group of links is:
```json
{
"label": "Dropdown button",
"items": [ ]
}
```
The `items` Array should contain one or more link configurations.
### Search Input Limit
The `search.maxLimit` configures the maximum results that the input let you search.
The `search.maxLookback` configures the maximum time before the present users can query for traces. The options in the Lookback dropdown greater than this value will not be shown.
Field | Description
------|------------
label | The text displayed in the search form dropdown
value | The value submitted in the search query if the label is selected
### Link Patterns
The `linkPatterns` node can be used to create links from fields displayed in the Jaeger UI.
Field | Description
------|------------
type | The metadata section in which your link will be added: process, tags, logs, traces
key | The name of tag/process/log attribute which value will be displayed as a link, this field is not necessary for type `traces`.
url | The URL where the link should point to, it can be an external site or relative path in Jaeger UI
text | The text displayed in the tooltip for the link
Both `url` and `text` can be defined as templates (i.e. using `#{field-name}`) where Jaeger UI will dynamically substitute values based on tags/logs/traces data.
For traces, the supported template fields are: `duration`, `endTime`, `startTime`, `traceName` and `traceID`.
## Embedded Mode
Starting with version 1.9, Jaeger UI provides an "embedded" layout mode which is intended to support integrating Jaeger UI into other applications. Currently (as of `v0`), the approach taken is to remove various UI elements from the page to make the UI better suited for space-constrained layouts.
The embedded mode is induced and configured via URL query parameters.
To enter embedded mode, the `uiEmbed=v0` query parameter and value must be added to the URL. For example, the following URL will show the trace with ID `abc123` in embedded mode:
```
http://localhost:16686/trace/abc123?uiEmbed=v0
```
`uiEmbed=v0` is required.
Further, each page supported has an <img src="/img/frontend-ui/embed-open-icon.png" style="width: 20px; height:20px;display:inline;" alt="Embed open window"> button added that will open the non-embedded page in a new tab.
The following pages support embedded mode:
* Search Page
* Trace Page
### Search Page
To integrate the Search Trace Page to our application we have to indicate to the Jaeger UI that we want to use the embed mode with `uiEmbed=v0`.
For example:
```
http://localhost:16686/search?
service=my-service&
start=1543917759557000&
end=1543921359557000&
limit=20&
lookback=1h&
maxDuration&
minDuration&
uiEmbed=v0
```
![Embed Search Traces](/img/frontend-ui/embed-search-traces.png)
#### Configuration options
The following query parameter can be used to configure the layout of the search page :
* `uiSearchHideGraph=1` - disables the display of the scatter plot above the search results
```
http://localhost:16686/search?
service=my-service&
start=1543917759557000&
end=1543921359557000&
limit=20&
lookback=1h&
maxDuration&
minDuration&
uiEmbed=v0&
uiSearchHideGraph=1
```
![Embed Search Traces without Graph](/img/frontend-ui/embed-search-traces-hide-graph.png)
### Trace Page
To integrate the Trace Page to our application we have to indicate to the Jaeger UI that we want to use the embed mode with `uiEmbed=v0`.
For example:
```sh
http://localhost:16686/trace/{trace-id}?uiEmbed=v0
```
![Embed Trace view](/img/frontend-ui/embed-trace-view.png)
If we have navigated to this view from the search traces page we'll have a button to go back to the results page.
![Embed Trace view](/img/frontend-ui/embed-trace-view-with-back-button.png)
#### Configuration options
The following query parameters can be used to configure the layout of the trace page :
* `uiTimelineCollapseTitle=1` causes the trace header to start out collapsed, which hides the summary and the minimap.
```
http://localhost:16686/trace/{trace-id}?
uiEmbed=v0&
uiTimelineCollapseTitle=1
```
![Embed Trace view](/img/frontend-ui/embed-trace-view-with-collapse.png)
* `uiTimelineHideMinimap=1` removes the minimap, entirely, regardless of whether the trace header is expanded or not.
```
http://localhost:16686/trace/{trace-id}?
uiEmbed=v0&
uiTimelineHideMinimap=1
```
![Embed Trace view](/img/frontend-ui/embed-trace-view-with-hide-minimap.png)
* `uiTimelineHideSummary=1` - removes the trace summary information (number of services, etc.) entirely, regardless of whether the trace header is expanded or not.
```
http://localhost:16686/trace/{trace-id}?
uiEmbed=v0&
uiTimelineHideSummary=1
```
![Embed Trace view](/img/frontend-ui/embed-trace-view-with-hide-summary.png)
We can also combine the options:
```
http://localhost:16686/trace/{trace-id}?
uiEmbed=v0&
uiTimelineHideMinimap=1&
uiTimelineHideSummary=1
```
![Embed Trace view](/img/frontend-ui/embed-trace-view-with-hide-details-and-hide-minimap.png)

View File

@ -1,130 +0,0 @@
---
title: Getting Started
description: Get up and running with Jaeger in your local environment
weight: 2
---
## Instrumentation
Your applications must be instrumented before they can send tracing data to Jaeger backend. Check the [Client Libraries](../client-libraries) section for information about how to use the OpenTracing API and how to initialize and configure Jaeger tracers.
## All in One
All-in-one is an executable designed for quick local testing, launches the Jaeger UI, collector, query, and agent, with an in memory storage component.
The simplest way to start the all-in-one is to use the pre-built image published to DockerHub (a single command line).
```bash
$ docker run -d --name jaeger \
-e COLLECTOR_ZIPKIN_HTTP_PORT=9411 \
-p 5775:5775/udp \
-p 6831:6831/udp \
-p 6832:6832/udp \
-p 5778:5778 \
-p 16686:16686 \
-p 14268:14268 \
-p 14250:14250 \
-p 9411:9411 \
jaegertracing/all-in-one:{{< currentVersion >}}
```
Or run the `jaeger-all-in-one(.exe)` executable from the [binary distribution archives][download]:
```bash
$ jaeger-all-in-one --collector.zipkin.http-port=9411
```
You can then navigate to `http://localhost:16686` to access the Jaeger UI.
The container exposes the following ports:
Port | Protocol | Component | Function
----- | ------- | --------- | ---
5775 | UDP | agent | accept `zipkin.thrift` over compact thrift protocol (deprecated, used by legacy clients only)
6831 | UDP | agent | accept `jaeger.thrift` over compact thrift protocol
6832 | UDP | agent | accept `jaeger.thrift` over binary thrift protocol
5778 | HTTP | agent | serve configs
16686 | HTTP | query | serve frontend
14268 | HTTP | collector | accept `jaeger.thrift` directly from clients
14250 | HTTP | collector | accept `model.proto`
9411 | HTTP | collector | Zipkin compatible endpoint (optional)
## Kubernetes and OpenShift
* Kubernetes templates: https://github.com/jaegertracing/jaeger-kubernetes
* Kubernetes Operator: https://github.com/jaegertracing/jaeger-operator
* OpenShift templates: https://github.com/jaegertracing/jaeger-openshift
## Sample App: HotROD
HotROD (Rides on Demand) is a demo application that consists of several microservices and
illustrates the use of the [OpenTracing API](http://opentracing.io).
A tutorial / walkthrough is available in the blog post:
[Take OpenTracing for a HotROD ride][hotrod-tutorial].
It can be run standalone, but requires Jaeger backend to view the traces.
### Features
- Discover architecture of the whole system via data-driven dependency
diagram.
- View request timeline and errors; understand how the app works.
- Find sources of latency and lack of concurrency.
- Highly contextualized logging.
- Use baggage propagation to:
- Diagnose inter-request contention (queueing).
- Attribute time spent in a service.
- Use open source libraries with OpenTracing integration to get
vendor-neutral instrumentation for free.
### Prerequisites
- You need Go 1.11 or higher installed on your machine to run from source.
- Requires a [running Jaeger backend](#all-in-one) to view the traces.
### Running
#### From Source
```bash
mkdir -p $GOPATH/src/github.com/jaegertracing
cd $GOPATH/src/github.com/jaegertracing
git clone git@github.com:jaegertracing/jaeger.git jaeger
cd jaeger
make install
go run ./examples/hotrod/main.go all
```
#### From docker
```bash
$ docker run --rm -it \
--link jaeger \
-p8080-8083:8080-8083 \
-e JAEGER_AGENT_HOST="jaeger" \
jaegertracing/example-hotrod:{{< currentVersion >}} \
all
```
#### From binary distribution
Run `example-hotrod(.exe)` executable from the [binary distribution archives][download]:
```bash
$ example-hotrod all
```
Then navigate to `http://localhost:8080`.
## Migrating from Zipkin
Collector service exposes Zipkin compatible REST API `/api/v1/spans` which accepts both Thrift and JSON. Also there is `/api/v2/spans` for JSON and Proto.
By default it's disabled. It can be enabled with `--collector.zipkin.http-port=9411`.
Zipkin [Thrift](https://github.com/jaegertracing/jaeger-idl/blob/master/thrift/zipkincore.thrift) IDL and Zipkin [Proto](https://github.com/jaegertracing/jaeger-idl/blob/master/proto/zipkin.proto) IDL files can be found in [jaegertracing/jaeger-idl](https://github.com/jaegertracing/jaeger-idl) repository.
They're compatible with [openzipkin/zipkin-api](https://github.com/openzipkin/zipkin-api) [Thrift](https://github.com/openzipkin/zipkin-api/blob/master/thrift/zipkinCore.thrift) and [Proto](https://github.com/openzipkin/zipkin-api/blob/master/zipkin.proto).
[hotrod-tutorial]: https://medium.com/@YuriShkuro/take-opentracing-for-a-hotrod-ride-f6e3141f7941
[download]: ../../../download/

View File

@ -1,47 +0,0 @@
---
title: Monitoring Jaeger
navtitle: Monitoring
weight: 8
---
Jaeger itself is a distributed, microservices based system. If you run it in production, you will likely want to setup adequate monitoring for different components, e.g. to ensure that the backend is not saturated by too much tracing data.
## Metrics
By default Jaeger microservices expose metrics in Prometheus format. It is controlled by the following command line options:
* `--admin-http-port` the port number where the HTTP admin server is running
* `--metrics-backend` controls how the measurements are exposed. The default value is `prometheus`, another option is `expvar`, the Go standard mechanism for exposing process level statistics.
* `--metrics-http-route` specifies the name of the HTTP endpoint used to scrape the metrics (`/metrics` by default).
Each Jaeger component exposes the metrics scraping endpoint on the admin port:
Component | Port
--------------------- | ---
**jaeger-agent** | 14271
**jaeger-collector** | 14269
**jaeger-query** | 16687
**jaeger-ingester** | 14270
**all-in-one** | 14269
### Prometheus monitoring mixin for Jaeger
The Prometheus monitoring mixin for Jaeger provides a starting point for people wanting to monitor Jaeger using Prometheus, Alertmanager, and Grafana. This includes a prebuilt [dashboard](https://github.com/jaegertracing/jaeger/blob/master/monitoring/jaeger-mixin/dashboard-for-grafana.json). For more information, see [the documentation](https://github.com/jaegertracing/jaeger/tree/master/monitoring/jaeger-mixin).
## Logging
Jaeger components only log to standard out, using structured logging library [go.uber.org/zap](https://github.com/uber-go/zap) configured to write log lines as JSON encoded strings, for example:
```json
{"level":"info","ts":1517621222.261759,"caller":"healthcheck/handler.go:99","msg":"Health Check server started","http-port":14269,"status":"unavailable"}
```
The log level can be adjusted via `--log-level` command line switch; default level is `info`.
## Traces
Jaeger has the ability to trace some of its own components, namely the requests to the Query service. For example, if you start `all-in-one` as described in [Getting Started](../getting-started), and refresh the UI screen a few times, you will see `jaeger-query` populated in the Services dropdown. If you prefer not to see these traces in the Jaeger UI, you can disable them by running Jaeger backend components with `JAEGER_DISABLED=true` environment variable, for example:
```
docker run -e JAEGER_DISABLED=true -p 16686:16686 jaegertracing/all-in-one:{{< currentVersion >}}
```

File diff suppressed because it is too large Load Diff

View File

@ -1,97 +0,0 @@
---
title: Performance Tuning Guide
description: Tweaking your Jaeger instance to achieve a better performance
weight: 10
---
Jaeger was built from day 1 to be able to ingest huge amounts of data in a resilient way. To better utilize resources that might cause delays, such as storage or network communications, Jaeger buffers and batches data. When more spans are generated than Jaeger is able to safely process, spans might get dropped. However, the defaults might not fit all scenarios: for instance, Agents running as a sidecar might have more memory constraints than Agents running as a daemon in bare metal.
## Deployment considerations
Although performance tuning the individual components is important, the way Jaeger is deployed can be decisive in obtaining optimal performance.
### Scale the Collector up and down
Use the auto-scaling capabilities of your platform: the Collector is nearly horizontally scalable so that more instances can be added and removed on-demand. A good way to scale up and down is by checking the `jaeger_collector_queue_length` metric: add instances when the length is higher than 50% of the maximum size for extended periods of time. Another metric that can be taken into consideration is `jaeger_collector_in_queue_latency_bucket`, which is a histogram indicating how long spans have been waiting in the queue before a worker picked it up. When the queue latency gets higher over time, its a good indication to increase the number of the workers, or to improve the storage performance.
Adding Collector instances is recommended when your platform provides auto-scaling capabilities, or when it's easier to start/stop Collector instances than changing existing, running instances. Scaling horizontally is also indicated when the CPU usage should be spread across nodes.
### Make sure the storage can keep up
Each span is written to the storage by the Collector using one worker, blocking it until the span has been stored. When the storage is too slow, the number of workers blocked by the storage might be too high, causing spans to be dropped. To help diagnose this situation, the histogram `jaeger_collector_save_latency_bucket` can be analyzed. Ideally, the latency should remain the same over time. When the histogram shows that most spans are taking longer and longer over time, its a good indication that your storage might need some attention.
### Place the Agents close to your applications
The Agent is meant to be placed on the same host as the instrumented application, in order to avoid UDP packet loss over the network. This is typically accomplished by having one Agent per bare metal host for traditional applications, or as a sidecar in container environments like Kubernetes, as this helps spread the load handled by Agents with the additional advantage of allowing each Agent to be tweaked individually, according to the applications needs and importance.
### Consider using Apache Kafka as intermediate buffer
Jaeger [can use Apache Kafka](../architecture/) as a buffer between the Collector and the actual backing storage (Elasticsearch, Apache Cassandra). This is ideal for cases where the traffic spikes are relatively frequent (prime time traffic) but the storage can eventually catch up once the traffic normalizes. For that, the `SPAN_STORAGE_TYPE` environment variable should be set to `kafka` in the Collector and the Jaeger Ingester component can be used, reading data from Kafka and writing it to the storage.
In addition to the performance aspects, having spans written to Kafka is useful for building real time data pipeline for aggregations and feature extraction from traces.
## Client (Tracer) settings
The Jaeger Clients are built to have minimal effect to the instrumented application. As such, it has conservative defaults that might not be suitable for all cases. Note that Jaeger Clients can be configured programmatically or via [environment variables](../client-features/).
### Adjust the sampling configuration
Together, the `JAEGER_SAMPLER_TYPE` and `JAEGER_SAMPLER_PARAM` specify how often traces should be "sampled", ie, recorded and sent to the Jaeger backend. For applications generating a large number of spans, setting the sampling type to `probabilistic` and the value to `0.001` (the default) will cause traces to be reported with a 1/1000th chance. Note that the sampling decision is made at the root span and propagated down to all child spans.
For applications with low to medium traffic, setting the sampling type to `const` and value to `1` will cause all spans to be reported. Similarly, tracing can be disabled by setting the value to `0`, while context propagation will continue to work.
Some Clients support the setting `JAEGER_DISABLED` to completely disable the Jaeger Tracer. This is recommended only if the Tracer is behaving in a way that causes problems to the instrumented application, as it will not propagate the context to the downstream services.
{{< info >}}
We recommend to set your clients to use the [`remote` sampling strategy](../sampling/#collector-sampling-configuration), so that admins can centrally set the concrete sampling strategy for each service.
{{< /info >}}
### Increase in-memory queue size
Most of the Jaeger clients, such as the Java, Go, and C# clients, buffer spans in memory before sending them to the Jaeger Agent/Collector. The maximum size of this buffer is defined by the environment variable `JAEGER_REPORTER_MAX_QUEUE_SIZE` (default value: about `100` spans): the larger the size, the higher the potential memory consumption. When the instrumented application is generating a large number of spans, its possible that the queue will be full causing the Client to discard the new spans (metric `jaeger_tracer_reporter_spans_total{result="dropped",}`).
In most common scenarios, the queue will be close to empty (metric: `jaeger_tracer_reporter_queue_length`), as spans are flushed to the Agent or Collector at regular intervals or when a certain size of the batch is reached. The detailed behavior of this queue is described in this [GitHub issue](https://github.com/jaegertracing/jaeger-client-java/issues/607).
### Modify the batched spans flush interval
The Java, Go, NodeJS, Python and C# Clients allow the customization of the flush interval (default value: `1000` milliseconds, or 1 second) used by the reporters, such as the `RemoteReporter`, to trigger a `flush` operation, sending all in-memory spans to the Agent or Collector. The lower the flush interval is set to, the more frequent the flush operations happen. As most reporters will wait until enough data is in the queue, this setting will force a flush operation at periodic intervals, so that spans are sent to the backend in a timely fashion.
When the instrumented application is generating a large number of spans and the Agent/Collector is close to the application, the networking overhead might be low, justifying a higher number of flush operations. When the `HttpSender` is being used and the Collector is not close enough to the application, the networking overhead might be too high so that a higher value for this property makes sense.
## Agent settings
Jaeger Agents receive data from Clients, sending them in batches to the Collector. When not properly configured, it might end up discarding data even if the host machine has plenty of resources.
### Adjust server queue sizes
The set of “server queue size” properties ( `processor.jaeger-binary.server-queue-size`, `processor.jaeger-compact.server-queue-size`, `processor.zipkin-compact.server-queue-size`) indicate the maximum number of span batches that the Agent can accept and store in memory. Its safe to assume that `jaeger-compact` is the most important processor in your Agent setup, as its the only one available in most Clients, such as the Java and Go Clients.
The default value for each queue is `1000` span batches. Given that each span batch has up to 64KiB worth of spans, each queue can hold up to 64MiB worth of spans.
In typical scenarios, the queue will be close to empty (metric `jaeger_agent_thrift_udp_server_queue_size`) as span batches should be quickly picked up and processed by a worker. However, sudden spikes in the number of span batches submitted by Clients might occur, causing the batches to be queued. When the queue is full, the older batches are overridden causing spans to be discarded (metric `jaeger_agent_thrift_udp_server_packets_dropped_total`).
### Adjust processor workers
The set of “processor workers” properties ( `processor.jaeger-binary.workers`, `processor.jaeger-compact.workers`, `processor.zipkin-compact.workers`) indicate the number of parallel span batch processors to start. Each worker type has a default size of `10`. In general, span batches are processed as soon as they are placed in the server queue and will block a worker until the whole packet is sent to the Collector. For Agents processing data from multiple Clients, the number of workers should be increased. Given that the cost of each worker is low, a good rule of thumb is 10 workers per Client with moderate traffic: given that each span batch might contain up to 64KiB worth of spans, it means that 10 workers are able to send about 640KiB concurrently to a Collector.
## Collector settings
The Collector receives data from Clients and Agents. When not properly configured, it might process less data than what would be possible on the same host, or it might overload the host by consuming more memory than permitted.
### Adjust queue size
Similar to the Agent, the Collector is able to receive spans and place them in an internal queue for processing. This allows the Collector to return immediately to the Client/Agent instead of waiting for the span to make its way to the storage.
The setting `collector.queue-size` (default: `2000`) dictates how many spans the queue should support. In the typical scenario, the queue will be close to empty, as enough workers should exist picking up spans from the queue and sending them to the storage. When the number of items in the queue (metric `jaeger_collector_queue_length`) is permanently high, its an indication that either the number of workers should be increased or that the storage cannot keep up with the volume of data that its receiving. When the queue is full, the older items in the queue are overridden, causing spans to be discarded (metric `jaeger_collector_spans_dropped_total`).
{{< warning >}}
The queue size for the Agent is about _span batches_, whereas the queue size for the Collector is about _individual spans_.
{{< /warning >}}
Given that the queue size should be close to empty most of the time, this setting should be as high as the available memory for the Collector, to provide maximum protection against sudden traffic spikes. However, if your storage layer is under-provisioned and cannot keep up, even a large queue will quickly fill up and start dropping data.
Experimental: starting from Jaeger 1.17, the Jaeger Collector can adjust the queue size automatically based on the memory requirements and average span size. Set the flag `collector.queue-size-memory` to the maximum memory size in MiB that the collector should use, and Jaeger will periodically calculate the ideal queue size based on the average span size it has seen. For safety reasons, the maximum queue size is hard-coded to 1 million records. If you are using this feature, [give us your feedback](https://www.jaegertracing.io/get-in-touch/)!
### Adjust processor workers
Items from the span queue in the Collector are picked up by workers. Each worker picks one span from the queue and persists it to the storage. The number of workers can be specified by the setting `collector.num-workers` (default: `50`) and should be as high as needed to keep the queue close to zero. The general rule is: the faster the backing storage, the lower the number of workers can be. Given that workers are relatively cheap, this number can be increased at will. As a general rule, one worker per 50 items in the queue should be sufficient when the storage is fast. With a `collector.queue-size` of `2000`, having about `40` workers should be sufficient. For slower storage mechanisms, this ratio should be adjusted accordingly, having more workers per queue item.

View File

@ -1,85 +0,0 @@
---
title: Sampling
hasparent: true
---
Jaeger libraries implement consistent upfront (or head-based) sampling. For example, assume we have a simple call graph where service A calls service B, and B calls service C: `A -> B -> C`. When service A receives a request that contains no tracing information, Jaeger tracer will start a new {{< tip "trace" >}}, assign it a random trace ID, and make a sampling decision based on the currently installed sampling strategy. The sampling decision will be propagated with the requests to B and to C, so those services will not be making the sampling decision again but instead will respect the decision made by the top service A. This approach guarantees that if a trace is sampled, all its {{< tip "spans" "span" >}} will be recorded in the backend. If each service was making its own sampling decision we would rarely get complete traces in the backend.
## Client Sampling Configuration
When using configuration object to instantiate the tracer, the type of sampling can be selected via `sampler.type` and `sampler.param` properties. Jaeger libraries support the following samplers:
* **Constant** (`sampler.type=const`) sampler always makes the same decision for all traces. It either samples all traces (`sampler.param=1`) or none of them (`sampler.param=0`).
* **Probabilistic** (`sampler.type=probabilistic`) sampler makes a random sampling decision with the probability of sampling equal to the value of `sampler.param` property. For example, with `sampler.param=0.1` approximately 1 in 10 traces will be sampled.
* **Rate Limiting** (`sampler.type=ratelimiting`) sampler uses a leaky bucket rate limiter to ensure that traces are sampled with a certain constant rate. For example, when `sampler.param=2.0` it will sample requests with the rate of 2 traces per second.
* **Remote** (`sampler.type=remote`, which is also the default) sampler consults Jaeger agent for the appropriate sampling strategy to use in the current service. This allows controlling the sampling strategies in the services from a [central configuration](#collector-sampling-configuration) in Jaeger backend, or even dynamically (see [Adaptive Sampling](https://github.com/jaegertracing/jaeger/issues/365)).
### Adaptive Sampler
Adaptive sampler is a composite sampler that combines two functions:
* It makes sampling decisions on a per-operation basis, i.e. based on {{< tip "span" >}} operation name. This is especially useful in the API services whose endpoints may have very different traffic volumes and using a single probabilistic sampler for the whole service might starve (never sample) some of the low QPS endpoints.
* It supports a minimum guaranteed rate of sampling, such as always allowing up to N {{< tip "traces" "trace" >}} per seconds and then sampling anything above that with a certain probability (everything is per-operation, not per-service).
Per-operation parameters can be configured statically or pulled periodically from Jaeger backend with the help of Remote sampler. Adaptive sampler is designed to work with the upcoming [Adaptive Sampling](https://github.com/jaegertracing/jaeger/issues/365) feature of the Jaeger backend.
## Collector Sampling Configuration
Collectors can be instantiated with static sampling strategies (which are propagated to the respective service if configured with Remote sampler) via the `--sampling.strategies-file` option. This option requires a path to a json file which defines the sampling strategies.
If no configuration is provided, the collectors will return the default probabilistic sampling policy with probability 0.001 (0.1%) for all services.
Example `strategies.json`:
```json
{
"service_strategies": [
{
"service": "foo",
"type": "probabilistic",
"param": 0.8,
"operation_strategies": [
{
"operation": "op1",
"type": "probabilistic",
"param": 0.2
},
{
"operation": "op2",
"type": "probabilistic",
"param": 0.4
}
]
},
{
"service": "bar",
"type": "ratelimiting",
"param": 5
}
],
"default_strategy": {
"type": "probabilistic",
"param": 0.5,
"operation_strategies": [
{
"operation": "/health",
"type": "probabilistic",
"param": 0.0
},
{
"operation": "/metrics",
"type": "probabilistic",
"param": 0.0
}
]
}
}
```
`service_strategies` element defines service specific sampling strategies and `operation_strategies` defines operation specific sampling strategies. There are 2 types of strategies possible: `probabilistic` and `ratelimiting` which are described [above](#client-sampling-configuration) (NOTE: `ratelimiting` is not supported for `operation_strategies`). `default_strategy` defines the catch-all sampling strategy that is propagated if the service is not included as part of `service_strategies`.
In the above example:
* All operations of service `foo` are sampled with probability 0.8 except for operations `op1` and `op2` which are probabilistically sampled with probabilities 0.2 and 0.4 respectively.
* All operations for service `bar` are rate-limited at 5 traces per second.
* Any other service will be sampled with probability 0.5 defined by the `default_strategy`.
* The `default_strategy` also includes shared per-operation strategies. In this example we disable tracing on `/health` and `/metrics` endpoints for all services by using probability 0. These per-operation strategies will apply to any new service not listed in the config, as well as to the `foo` and `bar` services unless they define their own strategies for these two operations.

View File

@ -1,43 +0,0 @@
---
title: Windows Service Deployment
hasparent: true
---
In Windows environments, Jaeger processes can be hosted and managed as Windows services controlled via the `sc` utility. To configure such services on Windows, download [nssm.exe](https://nssm.cc/download) for the appropriate architecture, and issue commands similar to how Jaeger is typically run. The example below showcases a basic Elasticsearch setup, configured using both environment variables and process arguments.
## Agent
```bat
nssm install JaegerAgent C:\Jaeger\jaeger-agent.exe --reporter.grpc.host-port=localhost:14250
nssm set JaegerAgent AppStdout C:\Jaeger\jaeger-agent.out.log
nssm set JaegerAgent AppStderr C:\Jaeger\jaeger-agent.err.log
nssm set JaegerAgent Description Jaeger Agent service
nssm start JaegerAgent
```
## Collector
```bat
nssm install JaegerCollector C:\Jaeger\jaeger-collector.exe --es.server-urls=http://localhost:9200 --es.username=jaeger --es.password=PASSWORD
nssm set JaegerCollector AppStdout C:\Jaeger\jaeger-collector.out.log
nssm set JaegerCollector AppStderr C:\Jaeger\jaeger-collector.err.log
nssm set JaegerCollector Description Jaeger Collector service
nssm set JaegerCollector AppEnvironmentExtra SPAN_STORAGE_TYPE=elasticsearch
nssm start JaegerCollector
```
## Query UI
```bat
nssm install JaegerUI C:\Jaeger\jaeger-query.exe --es.server-urls=http://localhost:9200 --es.username=jaeger --es.password=PASSWORD
nssm set JaegerUI AppStdout C:\Jaeger\jaeger-ui.out.log
nssm set JaegerUI AppStderr C:\Jaeger\jaeger-ui.err.log
nssm set JaegerUI Description Jaeger Query service
nssm set JaegerUI AppEnvironmentExtra SPAN_STORAGE_TYPE=elasticsearch
nssm start JaegerUI
```
For additional information & docs, please see [the NSSM usage guide.](https://nssm.cc/usage)

View File

@ -1,70 +0,0 @@
---
title: Introduction
weight: 1
children:
- title: Features
url: features
---
Welcome to Jaeger's documentation portal! Below, you'll find information for beginners and experienced Jaeger users.
If you can't find what you are looking for, or have an issue not covered here, we'd love to [hear from you](/get-in-touch).
## About
Jaeger, inspired by [Dapper][dapper] and [OpenZipkin](http://zipkin.io),
is a distributed tracing system released as open source by [Uber Technologies][ubeross].
It is used for monitoring and troubleshooting microservices-based distributed systems, including:
* Distributed context propagation
* Distributed transaction monitoring
* Root cause analysis
* Service dependency analysis
* Performance / latency optimization
Uber published a blog post, [Evolving Distributed Tracing at Uber](https://eng.uber.com/distributed-tracing/), where they explain the history and reasons for the architectural choices made in Jaeger. [Yuri Shkuro](https://shkuro.com), creator of Jaeger, also published a book [Mastering Distributed Tracing](https://shkuro.com/books/2019-mastering-distributed-tracing/) that covers in-depth many aspects of Jaeger design and operation, as well as distributed tracing in general.
## Features
* [OpenTracing](http://opentracing.io/) compatible data model and instrumentation libraries
* in [Go](https://github.com/jaegertracing/jaeger-client-go), [Java](https://github.com/jaegertracing/jaeger-client-java), [Node](https://github.com/jaegertracing/jaeger-client-node), [Python](https://github.com/jaegertracing/jaeger-client-python),
[C++](https://github.com/jaegertracing/cpp-client) and [C#](https://github.com/jaegertracing/jaeger-client-csharp)
* Uses consistent upfront sampling with individual per service/endpoint probabilities
* Multiple storage backends: Cassandra, Elasticsearch, memory.
* Adaptive sampling (coming soon)
* Post-collection data processing pipeline (coming soon)
See [Features](./features/) page for more details.
## Technical Specs
* Backend components implemented in Go
* React/Javascript UI
* Supported storage backends:
* [Cassandra 3.4+](./deployment/#cassandra)
* [Elasticsearch 5.x, 6.x, 7.x](./deployment/#elasticsearch)
* [Kafka](./deployment/#kafka)
* memory storage
## Quick Start
See [running a docker all in one image](getting-started#all-in-one).
## Screenshots
### Traces View
[![Traces View](/img/traces-ss.png)](/img/traces-ss.png)
### Trace Detail View
[![Detail View](/img/trace-detail-ss.png)](/img/trace-detail-ss.png)
## Related links
- [Evolving Distributed tracing At Uber Engineering](https://eng.uber.com/distributed-tracing/)
- [Mastering Distributed Tracing](https://shkuro.com/books/2019-mastering-distributed-tracing/)
- [Tracing HTTP request latency in Go with OpenTracing](https://medium.com/opentracing/tracing-http-request-latency-in-go-with-opentracing-7cc1282a100a)
- [Distributed Tracing with Jaeger & Prometheus on Kubernetes](https://blog.openshift.com/openshift-commons-briefing-82-distributed-tracing-with-jaeger-prometheus-on-kubernetes/)
- [Using Jaeger with Istio](https://istio.io/docs/tasks/telemetry/distributed-tracing.html)
- [Using Jaeger with Envoy](https://www.envoyproxy.io/docs/envoy/latest/start/sandboxes/jaeger_tracing.html)
[dapper]: https://research.google.com/pubs/pub36356.html
[ubeross]: http://uber.github.io

Some files were not shown because too many files have changed in this diff Show More