[GH-ISSUE #37] [Bug]: in docker log pentAGI have error: Unable to create langfuse client: failed to create langfuse client: public key is required service ssl crt and key already exist #17

Closed
opened 2026-06-06 22:07:59 -04:00 by yindo · 11 comments
Owner

Originally created by @khomkrit-xfinit on GitHub (Apr 28, 2025).
Original GitHub issue: https://github.com/vxcontrol/pentagi/issues/37

Originally assigned to: @asdek on GitHub.

Affected Component

Core Services (Frontend UI/Backend API)

Describe the bug

when "docker compose up -d" everything look fine. but pentagi container loop restart. i try to read log on this container it have "Unable to create langfuse client: failed to create langfuse client: public key is required service ssl crt and key already exist" i don't know how to fix it.

Steps to Reproduce

try to remove all volume, image and container. and retry command from quick start guide

System Configuration

Deployment Type : Docker compose
environment: macOS 15.4.1 (intel)

Logs and Artifacts

2025/04/28 08:18:52 Unable to create langfuse client: failed to create langfuse client: public key is required

Screenshots or Recordings

Image

Verification

  • I have checked that this issue hasn't been already reported
  • I have provided all relevant configuration files (with sensitive data removed)
  • I have included relevant logs and error messages
  • I am running the latest version of PentAGI
Originally created by @khomkrit-xfinit on GitHub (Apr 28, 2025). Original GitHub issue: https://github.com/vxcontrol/pentagi/issues/37 Originally assigned to: @asdek on GitHub. ### Affected Component Core Services (Frontend UI/Backend API) ### Describe the bug when "docker compose up -d" everything look fine. but pentagi container loop restart. i try to read log on this container it have "Unable to create langfuse client: failed to create langfuse client: public key is required service ssl crt and key already exist" i don't know how to fix it. ### Steps to Reproduce try to remove all volume, image and container. and retry command from quick start guide ### System Configuration Deployment Type : Docker compose environment: macOS 15.4.1 (intel) ### Logs and Artifacts 2025/04/28 08:18:52 Unable to create langfuse client: failed to create langfuse client: public key is required ### Screenshots or Recordings ![Image](https://github.com/user-attachments/assets/e9998876-5fe3-4a09-b50c-b0ce7452b34b) ### Verification - [x] I have checked that this issue hasn't been already reported - [x] I have provided all relevant configuration files (with sensitive data removed) - [x] I have included relevant logs and error messages - [x] I am running the latest version of PentAGI
yindo added the bug label 2026-06-06 22:07:59 -04:00
yindo closed this issue 2026-06-06 22:08:00 -04:00
Author
Owner

@asdek commented on GitHub (Apr 28, 2025):

Hello @khomkrit-xfinit

Thank you for reporting this issue! The problem relates to the Langfuse client configuration in your .env file. The error message "Unable to create langfuse client: failed to create langfuse client: public key is required" indicates that your container is trying to initialize the Langfuse client but cannot do so without proper configuration.

You have two options:

Option 1: Disable Langfuse Integration (Simpler)

If you don't need Langfuse observability, ensure Langfuse-related environment variable LANGFUSE_BASE_URL is completely empty. Double-check that there are no trailing spaces or newlines after the equals sign in your .env file for these variables.

For example, make sure each line looks exactly like:

LANGFUSE_BASE_URL=
LANGFUSE_PROJECT_ID=
LANGFUSE_PUBLIC_KEY=
LANGFUSE_SECRET_KEY=

Option 2: Set Up Langfuse Integration (More Features)

If you want to integrate PentAGI with Langfuse for observability features, follow the instructions in the Langfuse Integration section of the README.

Your configuration should look something like:

LANGFUSE_BASE_URL=http://langfuse-web:3000
LANGFUSE_PROJECT_ID=cm47619l0000872mcd2dlbqwb
LANGFUSE_PUBLIC_KEY=pk-lf-00000000-0000-0000-0000-000000000000
LANGFUSE_SECRET_KEY=sk-lf-00000000-0000-0000-0000-000000000000

Then, run the Langfuse stack alongside PentAGI:

curl -O https://raw.githubusercontent.com/vxcontrol/pentagi/master/docker-compose-langfuse.yml
docker compose -f docker-compose.yml -f docker-compose-langfuse.yml up -d

With this setup, you can access the Langfuse Web UI at http://localhost:4000 to analyze execution traces.

Additional Troubleshooting

If you're still experiencing issues after trying the above solutions:

  1. Remove all containers, volumes, and images completely:
docker compose down -v
docker rmi $(docker images -q vxcontrol/pentagi)
  1. Re-download the latest configuration files:
curl -O https://raw.githubusercontent.com/vxcontrol/pentagi/master/docker-compose.yml
curl -O https://raw.githubusercontent.com/vxcontrol/pentagi/master/.env.example
  1. Update your .env file with the proper configuration (make sure to properly set the required LLM provider like OpenAI or Anthropic).

  2. Start again with a clean configuration:

docker compose up -d

This should resolve the issue with the container restarting in a loop. Please, let me know if you need further assistance!

<!-- gh-comment-id:2834771064 --> @asdek commented on GitHub (Apr 28, 2025): Hello @khomkrit-xfinit Thank you for reporting this issue! The problem relates to the Langfuse client configuration in your `.env` file. The error message "Unable to create langfuse client: failed to create langfuse client: public key is required" indicates that your container is trying to initialize the Langfuse client but cannot do so without proper configuration. You have two options: #### Option 1: Disable Langfuse Integration (Simpler) If you don't need Langfuse observability, ensure Langfuse-related environment variable `LANGFUSE_BASE_URL` is completely empty. Double-check that there are no trailing spaces or newlines after the equals sign in your `.env` file for these variables. For example, make sure each line looks exactly like: ```env LANGFUSE_BASE_URL= LANGFUSE_PROJECT_ID= LANGFUSE_PUBLIC_KEY= LANGFUSE_SECRET_KEY= ``` #### Option 2: Set Up Langfuse Integration (More Features) If you want to integrate PentAGI with Langfuse for observability features, follow the instructions in the [Langfuse Integration section](https://github.com/vxcontrol/pentagi?tab=readme-ov-file#langfuse-integration) of the README. Your configuration should look something like: ```env LANGFUSE_BASE_URL=http://langfuse-web:3000 LANGFUSE_PROJECT_ID=cm47619l0000872mcd2dlbqwb LANGFUSE_PUBLIC_KEY=pk-lf-00000000-0000-0000-0000-000000000000 LANGFUSE_SECRET_KEY=sk-lf-00000000-0000-0000-0000-000000000000 ``` Then, run the Langfuse stack alongside PentAGI: ```bash curl -O https://raw.githubusercontent.com/vxcontrol/pentagi/master/docker-compose-langfuse.yml docker compose -f docker-compose.yml -f docker-compose-langfuse.yml up -d ``` With this setup, you can access the Langfuse Web UI at http://localhost:4000 to analyze execution traces. ### Additional Troubleshooting If you're still experiencing issues after trying the above solutions: 1. Remove all containers, volumes, and images completely: ```bash docker compose down -v docker rmi $(docker images -q vxcontrol/pentagi) ``` 2. Re-download the latest configuration files: ```bash curl -O https://raw.githubusercontent.com/vxcontrol/pentagi/master/docker-compose.yml curl -O https://raw.githubusercontent.com/vxcontrol/pentagi/master/.env.example ``` 3. Update your `.env` file with the proper configuration (make sure to properly set the required LLM provider like OpenAI or Anthropic). 4. Start again with a clean configuration: ```bash docker compose up -d ``` This should resolve the issue with the container restarting in a loop. Please, let me know if you need further assistance!
Author
Owner

@khomkrit-xfinit commented on GitHub (Apr 28, 2025):

oh thank can i ask you something. how can i generate inital langfuse public key and secret key to improve security deploy?

<!-- gh-comment-id:2834826773 --> @khomkrit-xfinit commented on GitHub (Apr 28, 2025): oh thank can i ask you something. how can i generate inital langfuse public key and secret key to improve security deploy?
Author
Owner

@asdek commented on GitHub (Apr 28, 2025):

@khomkrit-xfinit You have two main options too 😄

Option 1: Manual generate custom keys by yourself (Simpler)

You can generate your own custom keys and update them in both the Langfuse initialization variables and in the PentAGI configuration:

  1. Generate a unique project ID (can be a UUID or a custom format):

    # Example UUID generation
    PROJECT_ID=$(uuidgen | tr -d '-')
    echo $PROJECT_ID
    
  2. Generate public and secret keys with the appropriate format:

    # Public key (usually has format pk-lf-xxxx...)
    PUBLIC_KEY="pk-lf-$(openssl rand -hex 16)"
    echo $PUBLIC_KEY
    
    # Secret key (usually has format sk-lf-xxxx...)
    SECRET_KEY="sk-lf-$(openssl rand -hex 16)"
    echo $SECRET_KEY
    
  3. Update these values in your .env file for both initialization and usage:

    # Keys used to initialize Langfuse
    LANGFUSE_INIT_PROJECT_ID=$PROJECT_ID
    LANGFUSE_INIT_PROJECT_PUBLIC_KEY=$PUBLIC_KEY
    LANGFUSE_INIT_PROJECT_SECRET_KEY=$SECRET_KEY
    
    # Keys used by PentAGI to connect to Langfuse
    LANGFUSE_PROJECT_ID=$PROJECT_ID
    LANGFUSE_PUBLIC_KEY=$PUBLIC_KEY
    LANGFUSE_SECRET_KEY=$SECRET_KEY
    

These values need to match between initialization and usage to ensure proper connection.

Option 2: Create keys through the Langfuse UI (Official Method)

If you prefer using the official Langfuse UI to manage your keys:

  1. First, deploy the Langfuse stack alongside PentAGI:

    curl -O https://raw.githubusercontent.com/vxcontrol/pentagi/master/docker-compose-langfuse.yml
    docker compose -f docker-compose.yml -f docker-compose-langfuse.yml up -d
    
  2. Access the Langfuse web interface at http://localhost:4000

  3. Sign up for a new account (for first-time setup) or use LANGFUSE_INIT_USER_NAME and LANGFUSE_INIT_USER_PASSWORD variables

  4. Create a new organization and project:

    • Click on "Create Organization" if prompted
    • Give your organization a name
    • Create a new project within that organization
  5. Generate API keys:

    • Go to your project settings
    • Navigate to the "API Keys" section
    • Click "Create New API Key"
    • Save both the public key (starts with pk-lf-) and secret key (starts with sk-lf-)
  6. Update your .env file with these new values:

    LANGFUSE_BASE_URL=http://langfuse-web:3000
    LANGFUSE_PROJECT_ID=[your-project-id]
    LANGFUSE_PUBLIC_KEY=[your-public-key]
    LANGFUSE_SECRET_KEY=[your-secret-key]
    
  7. Restart your containers:

    docker compose -f docker-compose.yml -f docker-compose-langfuse.yml down
    docker compose -f docker-compose.yml -f docker-compose-langfuse.yml up -d
    
<!-- gh-comment-id:2834944137 --> @asdek commented on GitHub (Apr 28, 2025): @khomkrit-xfinit You have two main options too 😄 ### Option 1: Manual generate custom keys by yourself (Simpler) You can generate your own custom keys and update them in both the Langfuse initialization variables and in the PentAGI configuration: 1. Generate a unique project ID (can be a UUID or a custom format): ```bash # Example UUID generation PROJECT_ID=$(uuidgen | tr -d '-') echo $PROJECT_ID ``` 2. Generate public and secret keys with the appropriate format: ```bash # Public key (usually has format pk-lf-xxxx...) PUBLIC_KEY="pk-lf-$(openssl rand -hex 16)" echo $PUBLIC_KEY # Secret key (usually has format sk-lf-xxxx...) SECRET_KEY="sk-lf-$(openssl rand -hex 16)" echo $SECRET_KEY ``` 3. Update these values in your `.env` file for both initialization and usage: ```env # Keys used to initialize Langfuse LANGFUSE_INIT_PROJECT_ID=$PROJECT_ID LANGFUSE_INIT_PROJECT_PUBLIC_KEY=$PUBLIC_KEY LANGFUSE_INIT_PROJECT_SECRET_KEY=$SECRET_KEY # Keys used by PentAGI to connect to Langfuse LANGFUSE_PROJECT_ID=$PROJECT_ID LANGFUSE_PUBLIC_KEY=$PUBLIC_KEY LANGFUSE_SECRET_KEY=$SECRET_KEY ``` These values need to match between initialization and usage to ensure proper connection. ### Option 2: Create keys through the Langfuse UI (Official Method) If you prefer using the official Langfuse UI to manage your keys: 1. First, deploy the Langfuse stack alongside PentAGI: ```bash curl -O https://raw.githubusercontent.com/vxcontrol/pentagi/master/docker-compose-langfuse.yml docker compose -f docker-compose.yml -f docker-compose-langfuse.yml up -d ``` 2. Access the Langfuse web interface at http://localhost:4000 3. Sign up for a new account (for first-time setup) or use LANGFUSE_INIT_USER_NAME and LANGFUSE_INIT_USER_PASSWORD variables 4. Create a new organization and project: - Click on "Create Organization" if prompted - Give your organization a name - Create a new project within that organization 5. Generate API keys: - Go to your project settings - Navigate to the "API Keys" section - Click "Create New API Key" - Save both the public key (starts with `pk-lf-`) and secret key (starts with `sk-lf-`) 6. Update your `.env` file with these new values: ```env LANGFUSE_BASE_URL=http://langfuse-web:3000 LANGFUSE_PROJECT_ID=[your-project-id] LANGFUSE_PUBLIC_KEY=[your-public-key] LANGFUSE_SECRET_KEY=[your-secret-key] ``` 7. Restart your containers: ```bash docker compose -f docker-compose.yml -f docker-compose-langfuse.yml down docker compose -f docker-compose.yml -f docker-compose-langfuse.yml up -d ```
Author
Owner

@khomkrit-xfinit commented on GitHub (May 5, 2025):

okay i tried from your recommend but have new error langfuse web can't access and pentagi too.

Image

Image

Image

<!-- gh-comment-id:2849884919 --> @khomkrit-xfinit commented on GitHub (May 5, 2025): okay i tried from your recommend but have new error langfuse web can't access and pentagi too. ![Image](https://github.com/user-attachments/assets/707bee54-6754-457c-93b8-ae6b80d478a3) ![Image](https://github.com/user-attachments/assets/09df8c55-4d50-49dc-a823-282dd2feca3d) ![Image](https://github.com/user-attachments/assets/59d48e18-7248-46d7-98ff-400e1f5ab2ec)
Author
Owner

@asdek commented on GitHub (May 5, 2025):

Hello @khomkrit-xfinit

Could you show me logs from langfuse-web container?
I think that it was not start correctly.

<!-- gh-comment-id:2850106278 --> @asdek commented on GitHub (May 5, 2025): Hello @khomkrit-xfinit Could you show me logs from langfuse-web container? I think that it was not start correctly.
Author
Owner

@khomkrit-xfinit commented on GitHub (May 5, 2025):

oh... it fix by step 1. i try "docker compose up -d" by i config .env (just api key for AI) without langfuse config (make sure pentagi work nomally). and step 2. i config .env about langfuse config. and "docker compose -f docker-compose.yml -f docker-compose-langfuse.yml up -d" it can't deploy sametime like config .env pentagi and langfuse and single command "docker compose -f docker-compose.yml -f docker-compose-langfuse.yml up -d". i don't know why this step it work?

Image

<!-- gh-comment-id:2850207013 --> @khomkrit-xfinit commented on GitHub (May 5, 2025): oh... it fix by step 1. i try "docker compose up -d" by i config .env (just api key for AI) without langfuse config (make sure pentagi work nomally). and step 2. i config .env about langfuse config. and "docker compose -f docker-compose.yml -f docker-compose-langfuse.yml up -d" it can't deploy sametime like config .env pentagi and langfuse and single command "docker compose -f docker-compose.yml -f docker-compose-langfuse.yml up -d". i don't know why this step it work? ![Image](https://github.com/user-attachments/assets/2ebd307b-f36e-4635-b638-ef4c31a87c89)
Author
Owner

@asdek commented on GitHub (May 5, 2025):

Great to hear you've resolved the issue! Let me clarify what happened:

The .env file is shared between all docker-compose*.yml files and it should be consistent for all services. When configuring services that depend on each other, the order of operations matters.

Here's why your two-step approach worked:

  1. Docker Compose creates networks defined in the compose files. The docker-compose.yml file creates the pentagi-network, while the docker-compose-langfuse.yml file relies on this network to function properly.

  2. When you first ran only PentAGI (docker compose up -d) with just the AI API keys, it created the necessary network infrastructure.

  3. Then, after configuring Langfuse parameters in the .env file and running both stacks together (docker compose -f docker-compose.yml -f docker-compose-langfuse.yml up -d), the Langfuse services could properly connect to the existing network.

If you try to do everything in one step without proper configuration, the container initialization fails because the Langfuse client in PentAGI attempts to connect before everything is ready.

For the future, you can use this two-step process:

  1. First ensure your core PentAGI services work
  2. Then add the observability layer with Langfuse

After that you can just apply new images/changes like these:

docker compose -f docker-compose.yml -f docker-compose-langfuse.yml pull
docker compose -f docker-compose.yml -f docker-compose-langfuse.yml up -d
<!-- gh-comment-id:2850319027 --> @asdek commented on GitHub (May 5, 2025): Great to hear you've resolved the issue! Let me clarify what happened: The `.env` file is shared between all `docker-compose*.yml` files and it should be consistent for all services. When configuring services that depend on each other, the order of operations matters. Here's why your two-step approach worked: 1. Docker Compose creates networks defined in the compose files. The `docker-compose.yml` file creates the `pentagi-network`, while the `docker-compose-langfuse.yml` file relies on this network to function properly. 2. When you first ran only PentAGI (`docker compose up -d`) with just the AI API keys, it created the necessary network infrastructure. 3. Then, after configuring Langfuse parameters in the `.env` file and running both stacks together (`docker compose -f docker-compose.yml -f docker-compose-langfuse.yml up -d`), the Langfuse services could properly connect to the existing network. If you try to do everything in one step without proper configuration, the container initialization fails because the Langfuse client in PentAGI attempts to connect before everything is ready. For the future, you can use this two-step process: 1. First ensure your core PentAGI services work 2. Then add the observability layer with Langfuse After that you can just apply new images/changes like these: ```bash docker compose -f docker-compose.yml -f docker-compose-langfuse.yml pull docker compose -f docker-compose.yml -f docker-compose-langfuse.yml up -d ```
Author
Owner

@khomkrit-xfinit commented on GitHub (May 6, 2025):

okay i found another error when try Monitoring and Observability setup have loop error and produce error log

otel log:
2025-05-06 12:28:23.826 | Error: failed to get config: cannot resolve the configuration: cannot retrieve the configuration: unable to read the file file:/etc/otel/config.yml: open /etc/otel/config.yml: no such file or directory
2025-05-06 12:28:23.826 | 2025/05/06 05:28:23 collector server run finished with error: failed to get config: cannot resolve the configuration: cannot retrieve the configuration: unable to read the file file:/etc/otel/config.yml: open /etc/otel/config.yml: no such file or directory

loki log:
failed parsing config: read /etc/loki/config.yml: is a directory. Use -config.expand-env=true flag if you want to expand environment variables in your config file

jaeger log:
2025/05/06 05:33:15 maxprocs: Leaving GOMAXPROCS=16: CPU quota undefined
2025/05/06 05:33:15 application version: git-commit=ecbae67ea32f189df1ddb4ec2da46d5fcd328b03, git-version=v1.56.0, build-date=2024-04-03T19:57:40Z
{"level":"info","ts":1746509595.9415228,"caller":"flags/service.go:110","msg":"Mounting metrics handler on admin server","route":"/metrics"}
{"level":"info","ts":1746509595.9416108,"caller":"flags/service.go:116","msg":"Mounting expvar handler on admin server","route":"/debug/vars"}
{"level":"info","ts":1746509595.9419613,"caller":"flags/admin.go:130","msg":"Mounting health check on admin server","route":"/"}
{"level":"info","ts":1746509595.9420395,"caller":"flags/admin.go:144","msg":"Starting admin HTTP server","http-addr":":14269"}
{"level":"info","ts":1746509595.942083,"caller":"flags/admin.go:122","msg":"Admin server started","http.host-port":"[::]:14269","health-status":"unavailable"}
{"level":"info","ts":1746509595.942255,"caller":"grpc@v1.62.1/clientconn.go:429","msg":"[core][Channel #1] Channel created","system":"grpc","grpc_log":true}
{"level":"info","ts":1746509595.942348,"caller":"grpc@v1.62.1/clientconn.go:1724","msg":"[core][Channel #1] original dial target is: "localhost:4317"","system":"grpc","grpc_log":true}
{"level":"info","ts":1746509595.9423869,"caller":"grpc@v1.62.1/clientconn.go:1731","msg":"[core][Channel #1] parsed dial target is: resolver.Target{URL:url.URL{Scheme:"localhost", Opaque:"4317", User:(*url.Userinfo)(nil), Host:"", Path:"", RawPath:"", OmitHost:false, ForceQuery:false, RawQuery:"", Fragment:"", RawFragment:""}}","system":"grpc","grpc_log":true}
{"level":"info","ts":1746509595.9424033,"caller":"grpc@v1.62.1/clientconn.go:1745","msg":"[core][Channel #1] fallback to scheme "passthrough"","system":"grpc","grpc_log":true}
{"level":"info","ts":1746509595.942416,"caller":"grpc@v1.62.1/clientconn.go:1753","msg":"[core][Channel #1] parsed dial target is: passthrough:///localhost:4317","system":"grpc","grpc_log":true}
{"level":"info","ts":1746509595.9424262,"caller":"grpc@v1.62.1/clientconn.go:1876","msg":"[core][Channel #1] Channel authority set to "localhost:4317"","system":"grpc","grpc_log":true}
{"level":"info","ts":1746509595.9426208,"caller":"grpc@v1.62.1/resolver_wrapper.go:197","msg":"[core][Channel #1] Resolver state updated: {\n "Addresses": [\n {\n "Addr": "localhost:4317",\n "ServerName": "",\n "Attributes": null,\n "BalancerAttributes": null,\n "Metadata": null\n }\n ],\n "Endpoints": [\n {\n "Addresses": [\n {\n "Addr": "localhost:4317",\n "ServerName": "",\n "Attributes": null,\n "BalancerAttributes": null,\n "Metadata": null\n }\n ],\n "Attributes": null\n }\n ],\n "ServiceConfig": null,\n "Attributes": null\n} (resolver returned new addresses)","system":"grpc","grpc_log":true}
{"level":"info","ts":1746509595.9427135,"caller":"grpc@v1.62.1/balancer_wrapper.go:161","msg":"[core][Channel #1] Channel switches to new LB policy "pick_first"","system":"grpc","grpc_log":true}
{"level":"info","ts":1746509595.942885,"caller":"grpc@v1.62.1/balancer_wrapper.go:213","msg":"[core][Channel #1 SubChannel #2] Subchannel created","system":"grpc","grpc_log":true}
{"level":"info","ts":1746509595.942941,"caller":"grpc@v1.62.1/clientconn.go:532","msg":"[core][Channel #1] Channel Connectivity change to CONNECTING","system":"grpc","grpc_log":true}
{"level":"info","ts":1746509595.9429898,"caller":"grpc@v1.62.1/clientconn.go:335","msg":"[core][Channel #1] Channel exiting idle mode","system":"grpc","grpc_log":true}
{"level":"info","ts":1746509595.943188,"caller":"grpc@v1.62.1/clientconn.go:1223","msg":"[core][Channel #1 SubChannel #2] Subchannel Connectivity change to CONNECTING","system":"grpc","grpc_log":true}
{"level":"info","ts":1746509595.94326,"caller":"grpc@v1.62.1/clientconn.go:1338","msg":"[core][Channel #1 SubChannel #2] Subchannel picks a new address "localhost:4317" to connect","system":"grpc","grpc_log":true}
2025/05/06 05:33:15 (deprecated, will be removed after 2024-03-01) using sidecar model of grpc-plugin storage, please upgrade to 'reomte' gRPC storage. https://github.com/jaegertracing/jaeger/issues/4647⁠
{"level":"warn","ts":1746509595.9466314,"caller":"grpc@v1.62.1/clientconn.go:1400","msg":"[core][Channel #1 SubChannel #2] grpc: addrConn.createTransport failed to connect to {Addr: "localhost:4317", ServerName: "localhost:4317", }. Err: connection error: desc = "transport: Error while dialing: dial tcp [::1]:4317: connect: connection refused"","system":"grpc","grpc_log":true}
{"level":"info","ts":1746509595.9467044,"caller":"grpc@v1.62.1/clientconn.go:1225","msg":"[core][Channel #1 SubChannel #2] Subchannel Connectivity change to TRANSIENT_FAILURE, last error: connection error: desc = "transport: Error while dialing: dial tcp [::1]:4317: connect: connection refused"","system":"grpc","grpc_log":true}
{"level":"info","ts":1746509595.9467242,"caller":"grpc@v1.62.1/clientconn.go:532","msg":"[core][Channel #1] Channel Connectivity change to TRANSIENT_FAILURE","system":"grpc","grpc_log":true}
{"level":"fatal","ts":1746509595.9472194,"caller":"all-in-one/main.go:114","msg":"Failed to init storage factory","error":"grpc-plugin builder failed to create a store: error attempting to connect to plugin rpc client: fork/exec /etc/jaeger/bin/jaeger-clickhouse-linux-amd64: no such file or directory","stacktrace":"main.main.func1\n\tgithub.com/jaegertracing/jaeger/cmd/all-in-one/main.go:114\ngithub.com/spf13/cobra.(*Command).execute\n\tgithub.com/spf13/cobra@v1.8.0/command.go:983\ngithub.com/spf13/cobra.(*Command).ExecuteC\n\tgithub.com/spf13/cobra@v1.8.0/command.go:1115\ngithub.com/spf13/cobra.(*Command).Execute\n\tgithub.com/spf13/cobra@v1.8.0/command.go:1039\nmain.main\n\tgithub.com/jaegertracing/jaeger/cmd/all-in-one/main.go:249\nruntime.main\n\truntime/proc.go:271"}

grafana log:
You may have issues with file permissions, more information here: http://docs.grafana.org/installation/docker/#migrate-to-v51-or-later⁠
logger=settings t=2025-05-06T05:37:20.835021825Z level=error msg="failed to parse "/etc/grafana/grafana.ini": open /etc/grafana/grafana.ini: no such file or directory"

<!-- gh-comment-id:2853335563 --> @khomkrit-xfinit commented on GitHub (May 6, 2025): okay i found another error when try Monitoring and Observability setup have loop error and produce error log otel log: 2025-05-06 12:28:23.826 | Error: failed to get config: cannot resolve the configuration: cannot retrieve the configuration: unable to read the file file:/etc/otel/config.yml: open /etc/otel/config.yml: no such file or directory 2025-05-06 12:28:23.826 | 2025/05/06 05:28:23 collector server run finished with error: failed to get config: cannot resolve the configuration: cannot retrieve the configuration: unable to read the file file:/etc/otel/config.yml: open /etc/otel/config.yml: no such file or directory loki log: failed parsing config: read /etc/loki/config.yml: is a directory. Use `-config.expand-env=true` flag if you want to expand environment variables in your config file jaeger log: 2025/05/06 05:33:15 maxprocs: Leaving GOMAXPROCS=16: CPU quota undefined 2025/05/06 05:33:15 application version: git-commit=ecbae67ea32f189df1ddb4ec2da46d5fcd328b03, git-version=v1.56.0, build-date=2024-04-03T19:57:40Z {"level":"info","ts":1746509595.9415228,"caller":"flags/service.go:110","msg":"Mounting metrics handler on admin server","route":"/metrics"} {"level":"info","ts":1746509595.9416108,"caller":"flags/service.go:116","msg":"Mounting expvar handler on admin server","route":"/debug/vars"} {"level":"info","ts":1746509595.9419613,"caller":"flags/admin.go:130","msg":"Mounting health check on admin server","route":"/"} {"level":"info","ts":1746509595.9420395,"caller":"flags/admin.go:144","msg":"Starting admin HTTP server","http-addr":":14269"} {"level":"info","ts":1746509595.942083,"caller":"flags/admin.go:122","msg":"Admin server started","http.host-port":"[::]:14269","health-status":"unavailable"} {"level":"info","ts":1746509595.942255,"caller":"grpc@v1.62.1/clientconn.go:429","msg":"[core][Channel #1] Channel created","system":"grpc","grpc_log":true} {"level":"info","ts":1746509595.942348,"caller":"grpc@v1.62.1/clientconn.go:1724","msg":"[core][Channel #1] original dial target is: \"localhost:4317\"","system":"grpc","grpc_log":true} {"level":"info","ts":1746509595.9423869,"caller":"grpc@v1.62.1/clientconn.go:1731","msg":"[core][Channel #1] parsed dial target is: resolver.Target{URL:url.URL{Scheme:\"localhost\", Opaque:\"4317\", User:(*url.Userinfo)(nil), Host:\"\", Path:\"\", RawPath:\"\", OmitHost:false, ForceQuery:false, RawQuery:\"\", Fragment:\"\", RawFragment:\"\"}}","system":"grpc","grpc_log":true} {"level":"info","ts":1746509595.9424033,"caller":"grpc@v1.62.1/clientconn.go:1745","msg":"[core][Channel #1] fallback to scheme \"passthrough\"","system":"grpc","grpc_log":true} {"level":"info","ts":1746509595.942416,"caller":"grpc@v1.62.1/clientconn.go:1753","msg":"[core][Channel #1] parsed dial target is: passthrough:///localhost:4317","system":"grpc","grpc_log":true} {"level":"info","ts":1746509595.9424262,"caller":"grpc@v1.62.1/clientconn.go:1876","msg":"[core][Channel #1] Channel authority set to \"localhost:4317\"","system":"grpc","grpc_log":true} {"level":"info","ts":1746509595.9426208,"caller":"grpc@v1.62.1/resolver_wrapper.go:197","msg":"[core][Channel #1] Resolver state updated: {\n \"Addresses\": [\n {\n \"Addr\": \"localhost:4317\",\n \"ServerName\": \"\",\n \"Attributes\": null,\n \"BalancerAttributes\": null,\n \"Metadata\": null\n }\n ],\n \"Endpoints\": [\n {\n \"Addresses\": [\n {\n \"Addr\": \"localhost:4317\",\n \"ServerName\": \"\",\n \"Attributes\": null,\n \"BalancerAttributes\": null,\n \"Metadata\": null\n }\n ],\n \"Attributes\": null\n }\n ],\n \"ServiceConfig\": null,\n \"Attributes\": null\n} (resolver returned new addresses)","system":"grpc","grpc_log":true} {"level":"info","ts":1746509595.9427135,"caller":"grpc@v1.62.1/balancer_wrapper.go:161","msg":"[core][Channel #1] Channel switches to new LB policy \"pick_first\"","system":"grpc","grpc_log":true} {"level":"info","ts":1746509595.942885,"caller":"grpc@v1.62.1/balancer_wrapper.go:213","msg":"[core][Channel #1 SubChannel #2] Subchannel created","system":"grpc","grpc_log":true} {"level":"info","ts":1746509595.942941,"caller":"grpc@v1.62.1/clientconn.go:532","msg":"[core][Channel #1] Channel Connectivity change to CONNECTING","system":"grpc","grpc_log":true} {"level":"info","ts":1746509595.9429898,"caller":"grpc@v1.62.1/clientconn.go:335","msg":"[core][Channel #1] Channel exiting idle mode","system":"grpc","grpc_log":true} {"level":"info","ts":1746509595.943188,"caller":"grpc@v1.62.1/clientconn.go:1223","msg":"[core][Channel #1 SubChannel #2] Subchannel Connectivity change to CONNECTING","system":"grpc","grpc_log":true} {"level":"info","ts":1746509595.94326,"caller":"grpc@v1.62.1/clientconn.go:1338","msg":"[core][Channel #1 SubChannel #2] Subchannel picks a new address \"localhost:4317\" to connect","system":"grpc","grpc_log":true} 2025/05/06 05:33:15 (deprecated, will be removed after 2024-03-01) using sidecar model of grpc-plugin storage, please upgrade to 'reomte' gRPC storage. https://github.com/jaegertracing/jaeger/issues/4647⁠ {"level":"warn","ts":1746509595.9466314,"caller":"grpc@v1.62.1/clientconn.go:1400","msg":"[core][Channel #1 SubChannel #2] grpc: addrConn.createTransport failed to connect to {Addr: \"localhost:4317\", ServerName: \"localhost:4317\", }. Err: connection error: desc = \"transport: Error while dialing: dial tcp [::1]:4317: connect: connection refused\"","system":"grpc","grpc_log":true} {"level":"info","ts":1746509595.9467044,"caller":"grpc@v1.62.1/clientconn.go:1225","msg":"[core][Channel #1 SubChannel #2] Subchannel Connectivity change to TRANSIENT_FAILURE, last error: connection error: desc = \"transport: Error while dialing: dial tcp [::1]:4317: connect: connection refused\"","system":"grpc","grpc_log":true} {"level":"info","ts":1746509595.9467242,"caller":"grpc@v1.62.1/clientconn.go:532","msg":"[core][Channel #1] Channel Connectivity change to TRANSIENT_FAILURE","system":"grpc","grpc_log":true} {"level":"fatal","ts":1746509595.9472194,"caller":"all-in-one/main.go:114","msg":"Failed to init storage factory","error":"grpc-plugin builder failed to create a store: error attempting to connect to plugin rpc client: fork/exec /etc/jaeger/bin/jaeger-clickhouse-linux-amd64: no such file or directory","stacktrace":"main.main.func1\n\tgithub.com/jaegertracing/jaeger/cmd/all-in-one/main.go:114\ngithub.com/spf13/cobra.(*Command).execute\n\tgithub.com/spf13/cobra@v1.8.0/command.go:983\ngithub.com/spf13/cobra.(*Command).ExecuteC\n\tgithub.com/spf13/cobra@v1.8.0/command.go:1115\ngithub.com/spf13/cobra.(*Command).Execute\n\tgithub.com/spf13/cobra@v1.8.0/command.go:1039\nmain.main\n\tgithub.com/jaegertracing/jaeger/cmd/all-in-one/main.go:249\nruntime.main\n\truntime/proc.go:271"} grafana log: You may have issues with file permissions, more information here: http://docs.grafana.org/installation/docker/#migrate-to-v51-or-later⁠ logger=settings t=2025-05-06T05:37:20.835021825Z level=error msg="failed to parse \"/etc/grafana/grafana.ini\": open /etc/grafana/grafana.ini: no such file or directory"
Author
Owner

@asdek commented on GitHub (Jun 3, 2025):

Hello @khomkrit-xfinit

I see the issue now! Based on the error logs, it looks like you're missing the configuration files that should be mounted into the containers. All errors point to missing files:

open /etc/otel/config.yml: no such file or directory
read /etc/loki/config.yml: is a directory
fork/exec /etc/jaeger/bin/jaeger-clickhouse-linux-amd64: no such file or directory
open /etc/grafana/grafana.ini: no such file or directory

This happens because you need the actual observability directory from the PentAGI repository. When these files don't exist on your host but are defined as volumes in docker-compose, Docker creates empty directories instead of files.

To fix this:

  1. Clone the PentAGI repository or download it as a ZIP from GitHub:

    git clone https://github.com/vxcontrol/pentagi.git
    

    or download from https://github.com/vxcontrol/pentagi/archive/refs/heads/master.zip

  2. Copy just the observability directory to your PentAGI installation location:

    cp -r pentagi/observability /path/to/your/pentagi/installation/
    
  3. Then try running the compose commands again:

    docker compose up -d
    docker compose -f docker-compose.yml -f docker-compose-langfuse.yml up -d
    

The observability directory contains all the configuration files that need to be mounted into the containers. Without these files, the services can't start properly.

Let me know if this resolves your issue!

<!-- gh-comment-id:2934460761 --> @asdek commented on GitHub (Jun 3, 2025): Hello @khomkrit-xfinit I see the issue now! Based on the error logs, it looks like you're missing the configuration files that should be mounted into the containers. All errors point to missing files: ``` open /etc/otel/config.yml: no such file or directory read /etc/loki/config.yml: is a directory fork/exec /etc/jaeger/bin/jaeger-clickhouse-linux-amd64: no such file or directory open /etc/grafana/grafana.ini: no such file or directory ``` This happens because you need the actual `observability` directory from the PentAGI repository. When these files don't exist on your host but are defined as volumes in docker-compose, Docker creates empty directories instead of files. To fix this: 1. Clone the PentAGI repository or download it as a ZIP from GitHub: ``` git clone https://github.com/vxcontrol/pentagi.git ``` or download from https://github.com/vxcontrol/pentagi/archive/refs/heads/master.zip 2. Copy just the `observability` directory to your PentAGI installation location: ``` cp -r pentagi/observability /path/to/your/pentagi/installation/ ``` 3. Then try running the compose commands again: ``` docker compose up -d docker compose -f docker-compose.yml -f docker-compose-langfuse.yml up -d ``` The observability directory contains all the configuration files that need to be mounted into the containers. Without these files, the services can't start properly. Let me know if this resolves your issue!
Author
Owner

@ibndias commented on GitHub (Jul 24, 2025):

Changing the langfuse to cloud seems to be fine

in .env
LANGFUSE_BASE_URL=https://cloud.langfuse.com

<!-- gh-comment-id:3112686080 --> @ibndias commented on GitHub (Jul 24, 2025): Changing the langfuse to cloud seems to be fine in .env `LANGFUSE_BASE_URL=https://cloud.langfuse.com`
Author
Owner

@asdek commented on GitHub (Jul 24, 2025):

@ibndias tnx for this check, I'll get the hint into README

<!-- gh-comment-id:3112927271 --> @asdek commented on GitHub (Jul 24, 2025): @ibndias tnx for this check, I'll get the hint into README
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: vxcontrol/pentagi#17