Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

es-index-cleaner:latest is not working as expected #3228

Closed
maksim-paskal opened this issue Aug 24, 2021 · 24 comments · Fixed by #3261
Closed

es-index-cleaner:latest is not working as expected #3228

maksim-paskal opened this issue Aug 24, 2021 · 24 comments · Fixed by #3261

Comments

@maksim-paskal
Copy link

maksim-paskal commented Aug 24, 2021

We use jaeger installed in kubernetes cluster with elasticsearch backend with rollover and now - old indexes not removed. Helm chart use jaegertracing/jaeger-es-index-cleaner:latest image for removing old indexes - and this not working as expected

Expected behavior
Old indexes must be removed as described in documentation

Version (please complete the following information):

  • OS: Linux
  • Jaeger version: 1.22.0
  • Deployment: Kubernetes

Additional context
As hotfix - downgrade to image jaegertracing/jaeger-es-index-cleaner:1

#3192

@jpkrohling
Copy link
Contributor

@maksim-paskal, do you mind providing logs and more information on what is not working?

cc @pavolloffay

@maksim-paskal
Copy link
Author

maksim-paskal commented Aug 24, 2021

Sure. As I mension before - we use jaeger installation in kubernetes with elasticsearch backend and rollover - we install jaeger with helm chart with enabled esIndexCleaner to clear old indexes in our elasticsearch backend to reduce disk usage

...
esIndexCleaner:
  enabled: true
  schedule: "0 * * * *"
  numberOfDays: 1
  extraEnv:
  - name: ES_TLS_ENABLED
    value: "true"
  - name: ES_TLS_SKIP_HOST_VERIFY
    value: "true"
  - name: ROLLOVER
    value: 'true'
...

It's create CronJob with this specification

...
spec:
  containers:
  - args:
    - "1"
    - http://elasticsearch:9200
    env:
    - name: ES_TLS_ENABLED
      value: "true"
    - name: ES_TLS_SKIP_HOST_VERIFY
      value: "true"
    - name: ROLLOVER
      value: "true"
    - name: ES_SERVER_URLS
      value: http://elasticsearch:9200
    - name: ES_USERNAME
      value: elastic
    - name: ES_PASSWORD
      valueFrom:
        secretKeyRef:
          key: password
          name: jaeger-elasticsearch
    - name: ES_INDEX_PREFIX
      value: jaeger-prod
    image: jaegertracing/jaeger-es-index-cleaner:latest
...

It's successfuly works until today - we notice that our disk usage significantly increased - we realize that old jaeger indexes not removing - cronjob logs

{"level":"info","ts":1629795860.802725,"caller":"./main.go:83","msg":"Indices before this date will be deleted","date":1629763200}
{"level":"info","ts":1629795860.8028526,"caller":"./main.go:95","msg":"No indices to delete"}

I think that the problem in es-index-cleaner golang implementation (#3192) this implementation do not use environment variables that was used in old python implementation - we clear old indexes only with dowgrading to python implementation jaegertracing/jaeger-es-index-cleaner:1

@pavolloffay
Copy link
Member

@maksim-paskal thanks for reporting this.

Based on the provided configuration it seems that you want to run the index cleaner every hour https://crontab.guru/#0__** and keep the data for one day?

@maksim-paskal
Copy link
Author

yes. We use only last 24 hours for traces.jaeger-es-index-cleaner helps us prune old data every hour.

@pavolloffay
Copy link
Member

I think that the problem in es-index-cleaner golang implementation (#3192) this implementation do not use environment variables that was used in old python implementation - we clear old indexes only with dowgrading to python implementation jaegertracing/jaeger-es-index-cleaner:1

The golang implementation uses the same env variables. It's configured via cobra/viper like in the other jaeger binaries.

Here are the docker image SHAs it seems that 1, 1.26 and 1.26.0 have the same SHA so you should be using the golang implementation if you specified 1.

 docker pull jaegertracing/jaeger-es-index-cleaner:1                                                                                                                                                                                                                                                                            1 ↵ ploffay@fedora
1: Pulling from jaegertracing/jaeger-es-index-cleaner
4e9f2cdf4387: Already exists 
bd863d97c41b: Already exists 
7abde820361d: Pull complete 
Digest: sha256:520279aa82234dd08e3439907e2ec229c6501524a7886f133fd7c897c86667c8
Status: Downloaded newer image for jaegertracing/jaeger-es-index-cleaner:1
docker.io/jaegertracing/jaeger-es-index-cleaner:1
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
~ » docker pull jaegertracing/jaeger-es-index-cleaner:1.26                                                                                                                                                                                                                                                                             ploffay@fedora
1.26: Pulling from jaegertracing/jaeger-es-index-cleaner
Digest: sha256:520279aa82234dd08e3439907e2ec229c6501524a7886f133fd7c897c86667c8
Status: Downloaded newer image for jaegertracing/jaeger-es-index-cleaner:1.26
docker.io/jaegertracing/jaeger-es-index-cleaner:1.26
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
~ » docker pull jaegertracing/jaeger-es-index-cleaner:1.26.0                                                                                                                                                                                                                                                                           ploffay@fedora
1.26.0: Pulling from jaegertracing/jaeger-es-index-cleaner
Digest: sha256:520279aa82234dd08e3439907e2ec229c6501524a7886f133fd7c897c86667c8
Status: Downloaded newer image for jaegertracing/jaeger-es-index-cleaner:1.26.0
docker.io/jaegertracing/jaeger-es-index-cleaner:1.26.0

@maksim-paskal
Copy link
Author

It seems that image jaegertracing/jaeger-es-index-cleaner:1 16 days ago was jaegertracing/jaeger-es-index-cleaner@sha256:5e0adb0e8623dd334709943999a6b9d3e283090efcc05a7f90c34804a7e71758 and it was with python implementation - it save us that moment.

I check pod with image jaeger-es-index-cleaner:1 today - and now this image is in go implemetation

jaegertracing/jaeger-es-index-cleaner@sha256:520279aa82234dd08e3439907e2ec229c6501524a7886f133fd7c897c86667c8

todays logs of jaeger-es-index-cleaner pod is No indices to delete

{"level":"info","ts":1631174408.3293278,"caller":"./main.go:83","msg":"Indices before this date will be deleted","date":1631145600}
{"level":"info","ts":1631174408.3294582,"caller":"./main.go:95","msg":"No indices to delete"}

@pavolloffay I think the problem in environment

env:
- name: ES_INDEX_PREFIX
   value: jaeger-prod

it should be

env:
- name: INDEX_PREFIX
   value: jaeger-prod

But I do not understand how it can work in python implementation early...

Today I try to run it with

kubectl run test --image jaegertracing/jaeger-es-index-cleaner@sha256:5e0adb0e8623dd334709943999a6b9d3e283090efcc05a7f90c34804a7e71758 --restart Never -it --rm --command sh

# and run
export ES_TLS_ENABLED="true"
export ES_TLS_SKIP_HOST_VERIFY="true"
export ROLLOVER="true"
export ES_SERVER_URLS="http://elasticsearch-master.elk.svc.cluster.local:9200"
export ES_USERNAME="test"
export ES_PASSWORD="test"
export ES_INDEX_PREFIX="jaeger-prod"

python3 /es-index-cleaner/esCleaner.py "1" http://elasticsearch-master.elk.svc.cluster.local:9200

result

usr/local/lib/python3.8/site-packages/elasticsearch/connection/base.py:208: ElasticsearchWarning: this request accesses system indices: [.apm-agent-configuration, .apm-custom-link, .async-search, .kibana_7.12.0_001, .kibana_task_manager_7.12.0_001, .tasks], but in a future major version, direct access to system indices will be prevented by default
  warnings.warn(message, category=ElasticsearchWarning)
Removing jaeger-prod-jaeger-span-001027
Removing jaeger-prod-jaeger-span-001025
Removing jaeger-prod-jaeger-span-001022
Removing jaeger-prod-jaeger-span-001031
Removing jaeger-prod-jaeger-service-000993
Removing jaeger-prod-jaeger-service-000994
Removing jaeger-prod-jaeger-span-001030
Removing jaeger-prod-jaeger-service-000989
Removing jaeger-prod-jaeger-service-000998
Removing jaeger-prod-jaeger-span-001028
Removing jaeger-prod-jaeger-service-000997
Removing jaeger-prod-jaeger-span-001029
Removing jaeger-prod-jaeger-span-001020
Removing jaeger-prod-jaeger-span-001023
Removing jaeger-prod-jaeger-service-000990
Removing jaeger-prod-jaeger-span-001024
Removing jaeger-prod-jaeger-service-000987
Removing jaeger-prod-jaeger-span-001021
Removing jaeger-prod-jaeger-service-000988
Removing jaeger-prod-jaeger-service-000992
Removing jaeger-prod-jaeger-service-000995
Removing jaeger-prod-jaeger-service-000996
Removing jaeger-prod-jaeger-service-000991
Removing jaeger-prod-jaeger-span-001026

with go implementation, with this environment - No indices to delete

{"level":"info","ts":1631174408.3293278,"caller":"./main.go:83","msg":"Indices before this date will be deleted","date":1631145600}
{"level":"info","ts":1631174408.3294582,"caller":"./main.go:95","msg":"No indices to delete"}

@pavolloffay Sorry for this noise, it seems some elasticsearch specific... It's not a bug for go implementation

@pavolloffay
Copy link
Member

The python implementation uses INDEX_PREFIX https://github.com/jaegertracing/jaeger/blob/v1.23.0/plugin/storage/es/esRollover.py#L35 and the golang based as well

 docker run jaegertracing/jaeger-es-index-cleaner:1 help                                                                                                                                                                                                                               ploffay@fedora
Error: wrong number of arguments
Usage:
  jaeger-es-index-cleaner NUM_OF_DAYS http://HOSTNAME:PORT [flags]

Flags:
      --archive                       Whether to remove archive indices. It works only for rollover
      --es.password string            The password required by storage
      --es.tls.ca string              Path to a TLS CA (Certification Authority) file used to verify the remote server(s) (by default will use the system truststore)
      --es.tls.cert string            Path to a TLS Certificate file, used to identify this process to the remote server(s)
      --es.tls.enabled                Enable TLS when talking to the remote server(s)
      --es.tls.key string             Path to a TLS Private Key file, used to identify this process to the remote server(s)
      --es.tls.server-name string     Override the TLS server name we expect in the certificate of the remote server(s)
      --es.tls.skip-host-verify       (insecure) Skip server's certificate chain and host name verification
      --es.username string            The username required by storage
  -h, --help                          help for jaeger-es-index-cleaner
      --index-date-separator string   Index date separator (default "-")
      --index-prefix string           Index prefix
      --rollover                      Whether to remove indices created by rollover
      --timeout int                   Number of seconds to wait for master node response (default 120)

2021/09/09 14:27:47 wrong number of arguments

The --index.prefix is translated to INDEX_PREFIX.

@pavolloffay Sorry for this noise, it seems some elasticsearch specific... It's not a bug for go implementation

It can be a bug in golang implemenation as well. The date comparison is done in our implementation not in ES. I will try to have a look at it.

@ichasco-heytrade
Copy link

ichasco-heytrade commented Sep 13, 2021

I have the same error.

With the tag: 1.26.0 it is not working, but with the tag 1.25.0 it works.

Thanks!

@pavolloffay
Copy link
Member

I have submitted #3261 to fix this issue. But I am not sure if the PR fixes the issue or not.

I have built docker image with changes in that PR - pavolloffay/jaeger-es-index-cleaner:PR3261. @maksim-paskal and @ichasco-heytrade could you please use the image and see whether the problem is fixed?

@ichasco-heytrade
Copy link

Hi, it doesn't work:

time="2021-09-13T13:54:34Z" level=info msg="spawning process: [/go/bin/es-index-cleaner-linux 3 http://elasticsearch-master-headless.logs.svc.cluster.local:9200]" app=vault-env
{"level":"info","ts":1631541274.909411,"caller":"./main.go:86","msg":"Indices before this date will be deleted","date":"2021-09-11T00:00:00Z"}
{"level":"info","ts":1631541274.909444,"caller":"./main.go:95","msg":"Queried indices","indices":[{"Index":"jaeger-jaeger-dependencies-2021-09-10","CreationTime":"2021-09-10T00:31:05.536Z","Aliases":{}},{"Index":"jaeger-jaeger-dependencies-2021-09-12","CreationTime":"2021-09-12T23:49:37.522Z","Aliases":{}},{"Index":"jaeger-jaeger-service-2021-09-13","CreationTime":"2021-09-13T08:27:11.907Z","Aliases":{}},{"Index":"jaeger-span-000003","CreationTime":"2021-09-13T09:46:08.791Z","Aliases":{"jaeger-span-read":true,"jaeger-span-write":true}},{"Index":"jaeger-jaeger-service-2021-09-10","CreationTime":"2021-09-10T00:05:33.082Z","Aliases":{}},{"Index":"jaeger-jaeger-span-2021-09-11","CreationTime":"2021-09-11T00:00:00.283Z","Aliases":{}},{"Index":"jaeger-jaeger-span-2021-09-12","CreationTime":"2021-09-12T14:38:02.716Z","Aliases":{}},{"Index":"jaeger-span-000001","CreationTime":"2021-09-09T08:24:23.207Z","Aliases":{"jaeger-span-read":true}},{"Index":"jaeger-jaeger-service-2021-09-11","CreationTime":"2021-09-11T00:00:30.282Z","Aliases":{}},{"Index":"jaeger-service-000001","CreationTime":"2021-09-09T08:24:24.296Z","Aliases":{"jaeger-service-read":true}},{"Index":"jaeger-service-000002","CreationTime":"2021-09-11T00:10:10.001Z","Aliases":{"jaeger-service-read":true}},{"Index":"jaeger-service-000003","CreationTime":"2021-09-13T09:46:09.194Z","Aliases":{"jaeger-service-read":true,"jaeger-service-write":true}},{"Index":"jaeger-jaeger-span-2021-09-13","CreationTime":"2021-09-13T08:27:12.093Z","Aliases":{}},{"Index":"jaeger-span-000002","CreationTime":"2021-09-11T00:10:09.333Z","Aliases":{"jaeger-span-read":true}},{"Index":"jaeger-jaeger-dependencies-2021-09-11","CreationTime":"2021-09-11T00:02:02.033Z","Aliases":{}},{"Index":"jaeger-jaeger-dependencies-2021-09-13","CreationTime":"2021-09-13T09:18:33.816Z","Aliases":{}},{"Index":"jaeger-jaeger-service-2021-09-12","CreationTime":"2021-09-12T14:48:42.644Z","Aliases":{}},{"Index":"jaeger-jaeger-span-2021-09-10","CreationTime":"2021-09-10T00:00:00.083Z","Aliases":{}}]}
{"level":"info","ts":1631541274.909679,"caller":"./main.go:99","msg":"No indices to delete"}

It should delete this index jaeger-jaeger-dependencies-2021-09-10

Thanks

@pavolloffay
Copy link
Member

Here are the commands that I used to unsuccessfully tried to reproduce the issue (the indices were deleted):

docker run -it --rm -e "ES_JAVA_OPTS=-Xms2g -Xmx2g" -p 9200:9200 -p 9300:9300 -e "http.host=0.0.0.0" -e "discovery.type=single-node" -e "xpack.security.enabled=false" --name=elasticsearch  docker.elastic.co/elasticsearch/elasticsearch:5.6.10

docker run --net=host -e INDEX_PREFIX=jaeger-prod jaegertracing/jaeger-es-rollover:1.26.0 init http://localhost:9200
docker run --net=host -e CONDITIONS='{}' -e INDEX_PREFIX=jaeger-prod jaegertracing/jaeger-es-rollover:1.26.0 rollover http://localhost:9200

docker run --net=host -e INDEX_PREFIX=jaeger-prod -e ROLLOVER=true jaegertracing/jaeger-es-index-cleaner:1.26.0 0 http://localhost:9200
# {"level":"info","ts":1631540557.3836107,"caller":"./main.go:83","msg":"Indices before this date will be deleted","date":1631577600}
# {"level":"info","ts":1631540557.38408,"caller":"./main.go:98","msg":"Deleting indices","indices":[{"Index":"jaeger-prod-jaeger-span-000001","CreationTime":"2021-09-13T13:42:19.232Z","Aliases":{"jaeger-prod-jaeger-span-read":true}},{"Index":"jaeger-prod-jaeger-service-000001","CreationTime":"2021-09-13T13:42:19.476Z","Aliases":{"jaeger-prod-jaeger-service-read":true}}]}

@maksim-paskal
Copy link
Author

@pavolloffay my issue resolved with changing pod env name from ES_INDEX_PREFIX to INDEX_PREFIX. Now I use latest docker image with go implementation and my old indexes is deleted. I realy do not understand how it work in python implementation early with incorrect env name ES_INDEX_PREFIX...

@ichasco-heytrade did you use rollover? https://www.jaegertracing.io/docs/1.26/deployment/#elasticsearch-rollover

@pavolloffay
Copy link
Member

@ichasco-heytrade

@pavolloffay pavolloffay reopened this Sep 13, 2021
@pavolloffay
Copy link
Member

@ichasco-heytrade did you configure INDEX_PREFIX=jaeger env var or --index-prefix=jaeger?

@ichasco-heytrade
Copy link

ichasco-heytrade commented Sep 13, 2021

Hi, yes, I am using rollover. I have tested with the env ROLLOVER=true and without it and in both of cases don't do anything.

time="2021-09-13T17:55:52Z" level=info msg="spawning process: [/go/bin/es-index-cleaner-linux 3 http://elasticsearch-master-headless.logs.svc.cluster.local:9200 --index-prefix=jaeger]" app=vault-env
{"level":"info","ts":1631555752.2350557,"caller":"./main.go:86","msg":"Indices before this date will be deleted","date":"2021-09-11T00:00:00Z"}
{"level":"info","ts":1631555752.2351038,"caller":"./main.go:95","msg":"Queried indices","indices":[{"Index":"jaeger-jaeger-dependencies-2021-09-11","CreationTime":"2021-09-11T00:02:02.033Z","Aliases":{}},{"Index":"jaeger-jaeger-dependencies-2021-09-12","CreationTime":"2021-09-12T23:49:37.522Z","Aliases":{}},{"Index":"jaeger-jaeger-service-2021-09-11","CreationTime":"2021-09-11T00:00:30.282Z","Aliases":{}},{"Index":"jaeger-jaeger-service-2021-09-12","CreationTime":"2021-09-12T14:48:42.644Z","Aliases":{}},{"Index":"jaeger-jaeger-service-2021-09-13","CreationTime":"2021-09-13T08:27:11.907Z","Aliases":{}},{"Index":"jaeger-jaeger-span-2021-09-10","CreationTime":"2021-09-10T00:00:00.083Z","Aliases":{}},{"Index":"jaeger-jaeger-span-2021-09-12","CreationTime":"2021-09-12T14:38:02.716Z","Aliases":{}},{"Index":"jaeger-jaeger-dependencies-2021-09-10","CreationTime":"2021-09-10T00:31:05.536Z","Aliases":{}},{"Index":"jaeger-jaeger-span-2021-09-13","CreationTime":"2021-09-13T08:27:12.093Z","Aliases":{}},{"Index":"jaeger-jaeger-service-2021-09-10","CreationTime":"2021-09-10T00:05:33.082Z","Aliases":{}},{"Index":"jaeger-jaeger-span-2021-09-11","CreationTime":"2021-09-11T00:00:00.283Z","Aliases":{}},{"Index":"jaeger-jaeger-dependencies-2021-09-13","CreationTime":"2021-09-13T09:18:33.816Z","Aliases":{}}]}
{"level":"info","ts":1631555752.2353046,"caller":"./main.go:99","msg":"No indices to delete"}

I have tested also with the INDEX_PREFIX env and with the arg and it don't do anything

@ichasco-heytrade
Copy link

For me only works with:

  • jaegertracing/jaeger-es-index-cleaner:1.25.0
  • ES_INDEX_PREFIX=jaeger env

I don't need to set ROLLVOER env. It works also without it

@pavolloffay
Copy link
Member

Hi, yes, I am using rollover. I have tested with the env ROLLOVER=true and without it and in both of cases don't do anything.

It does not seem like you are using rollover:

{"level":"info","ts":1631555752.2351038,"caller":"./main.go:95","msg":"Queried indices","indices":[{"Index":"jaeger-jaeger-dependencies-2021-09-11","CreationTime":"2021-09-11T00:02:02.033Z","Aliases":{}},{"Index":"jaeger-jaeger-dependencies-2021-09-12","CreationTime":"2021-09-12T23:49:37.522Z","Aliases":{}},{"Index":"jaeger-jaeger-service-2021-09-11","CreationTime":"2021-09-11T00:00:30.282Z","Aliases":{}},{"Index":"jaeger-jaeger-service-2021-09-12","CreationTime":"2021-09-12T14:48:42.644Z","Aliases":{}},{"Index":"jaeger-jaeger-service-2021-09-13","CreationTime":"2021-09-13T08:27:11.907Z","Aliases":{}},{"Index":"jaeger-jaeger-span-2021-09-10","CreationTime":"2021-09-10T00:00:00.083Z","Aliases":{}},{"Index":"jaeger-jaeger-span-2021-09-12","CreationTime":"2021-09-12T14:38:02.716Z","Aliases":{}},{"Index":"jaeger-jaeger-dependencies-2021-09-10","CreationTime":"2021-09-10T00:31:05.536Z","Aliases":{}},{"Index":"jaeger-jaeger-span-2021-09-13","CreationTime":"2021-09-13T08:27:12.093Z","Aliases":{}},{"Index":"jaeger-jaeger-service-2021-09-10","CreationTime":"2021-09-10T00:05:33.082Z","Aliases":{}},{"Index":"jaeger-jaeger-span-2021-09-11","CreationTime":"2021-09-11T00:00:00.283Z","Aliases":{}},{"Index":"jaeger-jaeger-dependencies-2021-09-13","CreationTime":"2021-09-13T09:18:33.816Z","Aliases":{}}]}

The rollover indices do not have a date in the index name.

@ichasco-heytrade
Copy link

time="2021-09-13T18:18:18Z" level=info msg="spawning process: [python3 /es-rollover/esRollover.py rollover http://elasticsearch-master-headless.logs.svc.cluster.local:9200]" app=vault-env
/usr/local/lib/python3.8/site-packages/elasticsearch/connection/base.py:208: ElasticsearchWarning: this request accesses system indices: [.kibana_1], but in a future major version, direct access to system indices will be prevented by default
  warnings.warn(message, category=ElasticsearchWarning)
Rollover jaeger-span-write, based on conditions {'max_age': '1d'}
Adding index jaeger-span-000003 to alias jaeger-span-read
Rollover jaeger-service-write, based on conditions {'max_age': '1d'}
Adding index jaeger-service-000003 to alias jaeger-service-read

The job is scheduled

@pavolloffay
Copy link
Member

The job might be scheduled but the indices list from the es-cleaner does not show that the deployment was using the rollover - #3228 (comment)

@pavolloffay
Copy link
Member

pavolloffay commented Sep 14, 2021

@ichasco-heytrade here is my reproducer for #3228 (comment) to remove jaeger-jaeger-dependencies-2021-09-10. The test passes so it means that the index will be deleted.

PR #3264

To remove the jaeger-jaeger-dependencies-2021-09-10 try running:

docker run --rm -it -e INDEX_PREFIX=jaeger pavolloffay/jaeger-es-index-cleaner:PR3261 3 <es-url>

Do not enable rollover bc the index is not managed by the rollover.

@ichasco-heytrade
Copy link

Now works!. Thanks!

@pavolloffay
Copy link
Member

thanks for the configuration.

I am closing this.

@ichasco-heytrade
Copy link

Hi,

This is still failing. The PR hasn't been merged. Is there any reason?

Thanks!

@kyrogue
Copy link

kyrogue commented Jan 5, 2022

I resolved my issue by adding the ROLLOVER='true' environment variable, using the golang version of the index cleaner

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

5 participants