Graylog crashes on loading Enterprise plugin (docker)

I am testing a Graylog setup based on docker images.

I also want to run the Enterprise plugin. I downloaded the integration and Enterprise integration plugins via https://docs.graylog.org/en/3.3/pages/integrations/setup.html

I followed the steps to use volume mounted plugins but when I have a mount entry for the Enterprise plugin in my docker compose file, the graylog container crashes.

Here my volume mounted config:

graylog:
    image: graylog/graylog:3.3
    volumes:
      - graylog_data:/usr/share/graylog/data
      - /opt/graylog/plugin/graylog-plugin-integrations-3.3.8.jar:/usr/share/graylog/plugin/graylog-plugin-integrations-3.3.8.jar
      - /opt/graylog/plugin/graylog-plugin-enterprise-integrations-3.3.8.jar:/usr/share/graylog/plugin/graylog-plugin-enterprise-integrations-3.3.8.jar
    environment:

Here the docker log of the graylog container:

2020-11-24 15:42:33,087 WARN : org.graylog2.shared.security.tls.DefaultTLSProtocolProvider - JRE doesn't support all default TLS protocols. Changing <[TLSv1.2, TLSv1.3]> to <[TLSv1.2]>
2020-11-24 15:42:33,779 INFO : org.graylog2.bootstrap.CmdLineTool - Loaded plugin: AWS plugins 3.3.8 [org.graylog.aws.AWSPlugin]
2020-11-24 15:42:33,780 INFO : org.graylog2.bootstrap.CmdLineTool - Loaded plugin: Enterprise Integrations 3.3.8 [org.graylog.enterprise.integrations.EnterpriseIntegrationsPlugin]
2020-11-24 15:42:33,780 INFO : org.graylog2.bootstrap.CmdLineTool - Loaded plugin: Integrations 3.3.8 [org.graylog.integrations.IntegrationsPlugin]
2020-11-24 15:42:33,781 INFO : org.graylog2.bootstrap.CmdLineTool - Loaded plugin: Collector 3.3.8 [org.graylog.plugins.collector.CollectorPlugin]
2020-11-24 15:42:33,793 INFO : org.graylog2.bootstrap.CmdLineTool - Loaded plugin: Threat Intelligence Plugin 3.3.8 [org.graylog.plugins.threatintel.ThreatIntelPlugin]
2020-11-24 15:42:34,434 INFO : org.graylog2.bootstrap.CmdLineTool - Running with JVM arguments: -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -XX:NewRatio=1 -XX:MaxMetaspaceSize=256m -XX:+ResizeTLAB -XX:+UseConcMarkSweepGC -XX:+CMSConcurrentMTEnabled -XX:+CMSClassUnloadingEnabled -XX:+UseParNewGC -XX:-OmitStackTraceInFastThrow -Dlog4j.configurationFile=/usr/share/graylog/data/config/log4j2.xml -Djava.library.path=/usr/share/graylog/lib/sigar/ -Dgraylog2.installation_source=docker
2020-11-24 15:42:35,305 INFO : org.hibernate.validator.internal.util.Version - HV000001: Hibernate Validator null
[wterstegen@tpms-pvux-tst graylog]$ sudo docker logs 8bf797490467
2020-11-24 15:42:33,087 WARN : org.graylog2.shared.security.tls.DefaultTLSProtocolProvider - JRE doesn't support all default TLS protocols. Changing <[TLSv1.2, TLSv1.3]> to <[TLSv1.2]>
2020-11-24 15:42:33,779 INFO : org.graylog2.bootstrap.CmdLineTool - Loaded plugin: AWS plugins 3.3.8 [org.graylog.aws.AWSPlugin]
2020-11-24 15:42:33,780 INFO : org.graylog2.bootstrap.CmdLineTool - Loaded plugin: Enterprise Integrations 3.3.8 [org.graylog.enterprise.integrations.EnterpriseIntegrationsPlugin]
2020-11-24 15:42:33,780 INFO : org.graylog2.bootstrap.CmdLineTool - Loaded plugin: Integrations 3.3.8 [org.graylog.integrations.IntegrationsPlugin]
2020-11-24 15:42:33,781 INFO : org.graylog2.bootstrap.CmdLineTool - Loaded plugin: Collector 3.3.8 [org.graylog.plugins.collector.CollectorPlugin]
2020-11-24 15:42:33,793 INFO : org.graylog2.bootstrap.CmdLineTool - Loaded plugin: Threat Intelligence Plugin 3.3.8 [org.graylog.plugins.threatintel.ThreatIntelPlugin]
2020-11-24 15:42:34,434 INFO : org.graylog2.bootstrap.CmdLineTool - Running with JVM arguments: -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -XX:NewRatio=1 -XX:MaxMetaspaceSize=256m -XX:+ResizeTLAB -XX:+UseConcMarkSweepGC -XX:+CMSConcurrentMTEnabled -XX:+CMSClassUnloadingEnabled -XX:+UseParNewGC -XX:-OmitStackTraceInFastThrow -Dlog4j.configurationFile=/usr/share/graylog/data/config/log4j2.xml -Djava.library.path=/usr/share/graylog/lib/sigar/ -Dgraylog2.installation_source=docker
2020-11-24 15:42:35,305 INFO : org.hibernate.validator.internal.util.Version - HV000001: Hibernate Validator null
[wterstegen@tpms-pvux-tst graylog]$ sudo docker logs 8bf797490467
2020-11-24 15:42:33,087 WARN : org.graylog2.shared.security.tls.DefaultTLSProtocolProvider - JRE doesn't support all default TLS protocols. Changing <[TLSv1.2, TLSv1.3]> to <[TLSv1.2]>
2020-11-24 15:42:33,779 INFO : org.graylog2.bootstrap.CmdLineTool - Loaded plugin: AWS plugins 3.3.8 [org.graylog.aws.AWSPlugin]
2020-11-24 15:42:33,780 INFO : org.graylog2.bootstrap.CmdLineTool - Loaded plugin: Enterprise Integrations 3.3.8 [org.graylog.enterprise.integrations.EnterpriseIntegrationsPlugin]
2020-11-24 15:42:33,780 INFO : org.graylog2.bootstrap.CmdLineTool - Loaded plugin: Integrations 3.3.8 [org.graylog.integrations.IntegrationsPlugin]
2020-11-24 15:42:33,781 INFO : org.graylog2.bootstrap.CmdLineTool - Loaded plugin: Collector 3.3.8 [org.graylog.plugins.collector.CollectorPlugin]
2020-11-24 15:42:33,793 INFO : org.graylog2.bootstrap.CmdLineTool - Loaded plugin: Threat Intelligence Plugin 3.3.8 [org.graylog.plugins.threatintel.ThreatIntelPlugin]
2020-11-24 15:42:34,434 INFO : org.graylog2.bootstrap.CmdLineTool - Running with JVM arguments: -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -XX:NewRatio=1 -XX:MaxMetaspaceSize=256m -XX:+ResizeTLAB -XX:+UseConcMarkSweepGC -XX:+CMSConcurrentMTEnabled -XX:+CMSClassUnloadingEnabled -XX:+UseParNewGC -XX:-OmitStackTraceInFastThrow -Dlog4j.configurationFile=/usr/share/graylog/data/config/log4j2.xml -Djava.library.path=/usr/share/graylog/lib/sigar/ -Dgraylog2.installation_source=docker
2020-11-24 15:42:35,305 INFO : org.hibernate.validator.internal.util.Version - HV000001: Hibernate Validator null
Exception in thread "main" com.google.common.util.concurrent.ExecutionError: java.lang.NoClassDefFoundError: org/graylog/plugins/license/api/LicenseManager
        at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2049)
        at com.google.common.cache.LocalCache.get(LocalCache.java:3951)
        at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3974)
        at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4958)
        at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4964)
        at com.google.inject.internal.FailableCache.get(FailableCache.java:51)
        at com.google.inject.internal.ConstructorInjectorStore.get(ConstructorInjectorStore.java:48)
        at com.google.inject.internal.ConstructorBindingImpl.initialize(ConstructorBindingImpl.java:155)
        at com.google.inject.internal.InjectorImpl.initializeJitBinding(InjectorImpl.java:595)
        at com.google.inject.internal.InjectorImpl.createJustInTimeBinding(InjectorImpl.java:932)
        at com.google.inject.internal.InjectorImpl.createJustInTimeBindingRecursive(InjectorImpl.java:852)
        at com.google.inject.internal.InjectorImpl.getJustInTimeBinding(InjectorImpl.java:291)
        at com.google.inject.internal.InjectorImpl.getBindingOrThrow(InjectorImpl.java:222)
        at com.google.inject.internal.InjectorImpl.getInternalFactory(InjectorImpl.java:938)
        at com.google.inject.internal.FactoryProxy.notify(FactoryProxy.java:48)
        at com.google.inject.internal.ProcessedBindingData.runCreationListeners(ProcessedBindingData.java:60)
        at com.google.inject.internal.InternalInjectorCreator.initializeStatically(InternalInjectorCreator.java:133)
        at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:106)
        at com.google.inject.Guice.createInjector(Guice.java:87)
        at org.graylog2.shared.bindings.GuiceInjectorHolder.createInjector(GuiceInjectorHolder.java:34)
        at org.graylog2.bootstrap.CmdLineTool.setupInjector(CmdLineTool.java:379)
        at org.graylog2.bootstrap.CmdLineTool.run(CmdLineTool.java:194)
        at org.graylog2.bootstrap.Main.main(Main.java:50)
Caused by: java.lang.NoClassDefFoundError: org/graylog/plugins/license/api/LicenseManager
        at java.lang.Class.getDeclaredConstructors0(Native Method)
        at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671)
        at java.lang.Class.getDeclaredConstructors(Class.java:2020)
        at com.google.inject.spi.InjectionPoint.forConstructorOf(InjectionPoint.java:245)
        at com.google.inject.internal.ConstructorBindingImpl.create(ConstructorBindingImpl.java:115)
        at com.google.inject.internal.InjectorImpl.createUninitializedBinding(InjectorImpl.java:706)
        at com.google.inject.internal.InjectorImpl.createJustInTimeBinding(InjectorImpl.java:930)
        at com.google.inject.internal.InjectorImpl.createJustInTimeBindingRecursive(InjectorImpl.java:852)
        at com.google.inject.internal.InjectorImpl.getJustInTimeBinding(InjectorImpl.java:291)
        at com.google.inject.internal.InjectorImpl.getBindingOrThrow(InjectorImpl.java:222)
        at com.google.inject.internal.InjectorImpl.createParameterInjector(InjectorImpl.java:991)
        at com.google.inject.internal.InjectorImpl.getParametersInjectors(InjectorImpl.java:978)
        at com.google.inject.internal.ConstructorInjectorStore.createConstructor(ConstructorInjectorStore.java:69)
        at com.google.inject.internal.ConstructorInjectorStore.access$000(ConstructorInjectorStore.java:29)
        at com.google.inject.internal.ConstructorInjectorStore$1.create(ConstructorInjectorStore.java:37)
        at com.google.inject.internal.ConstructorInjectorStore$1.create(ConstructorInjectorStore.java:33)
        at com.google.inject.internal.FailableCache$1.load(FailableCache.java:40)
        at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3529)
        at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2278)
        at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2155)
        at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2045)
        ... 22 more
Caused by: java.lang.ClassNotFoundException: org.graylog.plugins.license.api.LicenseManager
        at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
        at java.net.FactoryURLClassLoader.loadClass(URLClassLoader.java:817)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
        ... 43 more

I hope somebody can help me finding out what I am doing wrong. Loading container with only integration plugin enabled, it starts. When I run it with the Enterprise plugin enabled, I receive above exception.

From what it looks like, you’re still missing some bits. Can you try running this branch of the docker image and let me know how you get along? https://github.com/Graylog2/graylog-docker/tree/create_enterprise_docker

Hi Aaron, Thanks for the quick help. I believe I should be running that branch.

From my compose file I use 3.3

 graylog:
    image: graylog/graylog:3.3
CONTAINER ID        IMAGE                                                      COMMAND                  CREATED             STATUS                  PORTS                                                                                                                                                NAMES
0e808d66f2c9        graylog/graylog:3.3

Also the GUI reports 3.3.8. Might be I am still doing something wrong, as I am not that proficient yet with docker. Thanks

Small update: I did a complete reinstall of my vm and docker where I now also followed the steps to run docker as a non-root user. Initially I started docker and docker-compose under sudo.

As docker graylog/graylog:3.3 now points to branch 3.3.9, I also downloaded the plugins for 3.3.9 but I run into the same java crash when trying to load the Enterprise plugin.

Hmmmm, so you’re pulling down all of these in your Docker setup:

  • graylog-enterprise-integrations-plugins
  • graylog-integrations-plugins
  • graylog-enterprise-plugins

And still seeing a crash? That’s curious. One other thing, are you certain you have the right package names for the jar? Our docs indicate that the packages are named graylog-integrations-plugins and graylog-enterprise-integrations-plugins and from what I’m seeing in your docker image, it looks like you’ve transposed some of the elements of those package names:

  • graylog-plugin-integrations
  • graylog-plugin-enterprise-integrations

While I’d tend to think that that shouldn’t matter, I’m wondering if the application isn’t loading those jars because they’re not following the convention that we’ve established. I’ve not personally tested this yet, but it is one thing that is sticking out to met after reviewing your initial post.

Hi Aaron,

Thank you very much. Your last reply showed me what I missed and overlooked. I only mounted the 2 tar files under the Integrations. I missed the tar file graylog-enterprise-plugins.

I can now start up Graylog with Enterpise plugin succesfully loaded.

Also I didn’t transpose the filenames, they are like that in the tar files.

1 Like

Ah! Good to know, ignore me on the names then :upside_down_face:. Glad to hear things got resolved for you!

1 Like

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.