Stackdriver logging of stdout/stderr suddenly stopped working - google-app-engine

I have NodeJS 10 based Standard code hosted on google-app-engine. Until last update, stdout and stderr logs were being imported automatically to the stackdriver logging. However after last deployment, the stdout/stderr completely stopped appearing in stackdriver. I tried to migrate traffic to the earlier known version but the logs still won't appear. The service appears to be working without any issues, just the logging functionality is gone. Any pointers?

You are correct, there is nothing wrong with your service versioning, the logging functionality for stdout and stderr is deprecated and no longer write any logs to Stackdriver. Instead, you can use the Stackdriver Logging API.
Here's a step-by-step guide to configure the Stackdriver Logging API for Node.js that you can follow, and you should be good to go.
Let me know if this helps!

Related

Stackdriver logs not showing in UI

For some reason my project is not showing logs in the page https://console.cloud.google.com/logs/viewer and I'm prompted with the message:
Welcome to Cloud Logging
View, search, analyze, and download your project's log data, all in one place. This is where you will find the logs for all your projects and Cloud Platform services.
You do not have any logs in your project right now.
However I definitely have logs generated by a google app engine and cloud build, I can access them without a problem using the gcloud command:
gcloud logging read "resource.type=gae_app" --limit 10 --format json
Also, I've enabled error reporting and I can see the logs there for errors, but if I click the label "View Logs" it does nothing.
There's something broken in my project but I'm not sure how to reach support in this case, also has anyone ever experienced something similar ? Is there any action that I can perform that could fix this issue ?
Thank you for any help :)
It magically fixed itself this morning. Yesterday I've enabled stackdriver monitoring in the hope that it could fix the issue, I don't know if that is relevant.
For anyone facing the same problem, best suggestion would be to contact support. For me it fixed automatically after few days :)

Can't find Google AppEngine logs to stdout

My python application on the Google App Engine (standard environment) writes some logs to stdout.
I used to be able to see them on the Logs Viewer but not anymore.
The default options under the "Log name" drop down menu do not show stdout, and I have tried to manually add logName="projects/airlib-main/logs/stdout" into the Query Builder but it doesn't find anything.
I solved my problem by NOT using basicConfig to configure the logs and rather instantiate my own loggers and use them throughout the application. The python documentation says that < This function does nothing if the root logger already has handlers configured > and maybe the Google App Engine does that now. My application used to produce logs properly so there might have been a change recently in the way the Google App Engine works in this environment.
I would recommend you to take a look at the post from the Community:
How to group related request log entries GAE python 3.7 standard env. This post provides you with possible solutions to your stdout logging.
For example, as mentioned on this answer here - that it's in Python language - there are some methods that you can use to set the stdout as the pattern for logs. So, checking this post should assist you in configuring the use of stdout on your App Engine.
Let me know if the information helped you!

Logging into Google with curl?

I'm working on a project with Google App Engine. I am using continuous integration via Travis, and wish to be able to deploy directly from it. Due to a bug that will not be resolved directly, I can't rely on Travis' built-in GAE deployment, so I basically have to use mvn appengine:update manually. This requires me navigate to a generated URL and manually paste to the terminal an authentication code, which I can't do in automated builds.
It was suggested to me, however, that I do some Unix magic instead. While I can easily pick out the URL I need to navigate to from grep, I still need to log in to Google with my credentials in order to actually get the authentication code (which I can then grep out and pipe to the deployment program).
Given that, how do I log in to Google with my credentials, using only curl or similar command-line utilities?
I've accomplished similar things in the past using Service Accounts. These are likely a good fit for your problem.
Service Accounts will allow you to authenticate and upload your app without manual intervention.
Overview
A Service Account will allow you to do "passwordless" authentication like you may already do with ssh, and git, etc. by setting up your keys. This will remove the requirement that you log in manually, or follow the road to madness by trying to do a "manual" login automatically.
There are basically two steps:
Create your service account and key (with the right permissions)
Use that credential instead of what you're doing now
Resources
I think it's better to give a list of resources than concrete instructions since it's basically impossible to express concisely (even though it's a simple process, there's bound to be a lot of little things that annoy), everyone's requirements will be slightly different, and Google is likely to change the process at some point.
Using the Google Cloud Platform Console for App Engine | Permissions
Using OAuth 2.0 for Server to Server Applications
Setting up OAuth 2.0 | Service Accounts
gcloud auth activate-service-account
Hopefully that's enough to get you headed in the right direction.
Note
You'll likely have to spend some time looking at your .appcfg_oauth2_tokens_java and sorting out a variety of other annoyances, but I believe that this approach is the best way to solve your problem.
It sounds like you have a pretty straight-forward setup and that a Service Account alone will get you there, but if you need to get a little weird, the App Engine Admin API is always there.

View Request Logs on AppEngine Java Dev Server

While it is relatively simple to get the app logs on the AppEngine Java Dev server, I haven't been able to find how to get the request logs. This seems like such a basic feature that there must be an easy way to do it, but so far, I'm stumped. Any help would be appreciated.
There is no nice log viewer, logs are directly dumped to server STDOUT, if you use Idea IDE, you will see logs in Application Servers tab at the bottom. Logs are just dumped as they come in (each log.info("logged event"), it is not possible to view logs per request base.

Where are the GAE Backends logs?

As soon as I figured out how to invoke my app as a Backends app, my log messages stopped appearing.
I found this helpful post which says the Backends logs are kept separately and that I need to switch to Backends view by selecting the named backend from the dropdown at the top of the admin console, but I don't see anything Backends specific in that list to select.
Perhaps this is a clue... when I invoke my app via myapp.appspot.com/dostuff, in the log I see I'm getting the DeadlineExceededError after 60 secs, indicating it's not running as a Backends app. But when I invoke it via mybackend.myapp.appspot.com/dostuff, it continues running as needed, but no log entries!
Seems like I'm missing something. Thanks.
Somehow my app wasn't fully recognized by GAE as a Backend app. And therefore my backend instances weren't available in the drop-list. Seeing that others had similar trouble with a Python 2.7 app (ex.) that had been initially uploaded as a 2.5 app, I created a new app in GAE and uploaded to there and it worked. Sorry I don't have a more definitive answer.
Before all was working well, I also ended up creating an empty /_ah/start handler as suggested by someone in this thread. Also if you're deploying a multi-threaded backend, make sure to check this post out -- there's some important stuff I didn't run across in the docs.

Resources