diff --git a/error_reporting/fluent_on_compute/README.md b/error_reporting/fluent_on_compute/README.md new file mode 100644 index 000000000000..d3a58c167d82 --- /dev/null +++ b/error_reporting/fluent_on_compute/README.md @@ -0,0 +1,35 @@ +# Google Error Reorting Samples Samples + +[![Open in Cloud Shell][shell_img]][shell_link] + +[shell_img]: http://gstatic.com/cloudssh/images/open-btn.png +[shell_link]: https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/GoogleCloudPlatform/python-docs-samples&page=editor&open_in_editor=error_reporting/fluent_on_compute/README.md + +This section contains samples for [Google Cloud Error Reporting](https://cloud.google.com/error-reporting). + +A startup script has been provided to demonstrated how to properly provision a GCE +instance with fluentd configured. Note the intallation of fluentd, the addition of the config file, + and the restarting of the fluetnd service. You can start an instance using +it like this: + + gcloud compute instances create example-instance --metadata-from-file startup-script=startup_script.sh + +or simply use it as reference when creating your own instance. + +After fluentd is configured, main.py could be used to simulate an error: + + gcloud compute copy-files main.py example-instance:~/main.py + +Then, + + gcloud compute ssh example-instance + python ~/main.py + +And you will see the message in the Errors Console. + + +These samples are used on the following documentation page: + +> https://cloud.google.com/error-reporting/docs/setting-up-on-compute-engine + + diff --git a/error_reporting/fluent_on_compute/main.py b/error_reporting/fluent_on_compute/main.py new file mode 100644 index 000000000000..5d7a773e3ca4 --- /dev/null +++ b/error_reporting/fluent_on_compute/main.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python +# Copyright 2016 Google, Inc +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# All rights reserved. + +# [START error_reporting_fluent_on_compute] +import traceback + +import fluent.event +import fluent.sender + + +def simulate_error(): + fluent.sender.setup('myapp', host='localhost', port=24224) + + def report(ex): + data = {} + data['message'] = '{0}'.format(ex) + data['serviceContext'] = {'service': 'myapp'} + # ... add more metadata + fluent.event.Event('errors', data) + + # report exception data using: + try: + # simulate calling a method that's not defined + raise NameError + except Exception: + report(traceback.format_exc()) +# [END error_reporting_fluent_on_compute] + + +if __name__ == '__main__': + simulate_error() diff --git a/error_reporting/fluent_on_compute/main_test.py b/error_reporting/fluent_on_compute/main_test.py new file mode 100644 index 000000000000..67d5979b6286 --- /dev/null +++ b/error_reporting/fluent_on_compute/main_test.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python +# Copyright 2016 Google, Inc +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# All rights reserved. + +import mock + +import main + + +@mock.patch("fluent.event") +def test_error_sends(event_mock): + main.simulate_error() + event_mock.Event.assert_called_once_with(mock.ANY, mock.ANY) diff --git a/error_reporting/fluent_on_compute/requirements-test.txt b/error_reporting/fluent_on_compute/requirements-test.txt new file mode 100644 index 000000000000..980c425b9393 --- /dev/null +++ b/error_reporting/fluent_on_compute/requirements-test.txt @@ -0,0 +1,2 @@ +pytest==7.2.0 +mock==4.0.3 diff --git a/error_reporting/fluent_on_compute/requirements.txt b/error_reporting/fluent_on_compute/requirements.txt new file mode 100644 index 000000000000..693841f66b8e --- /dev/null +++ b/error_reporting/fluent_on_compute/requirements.txt @@ -0,0 +1 @@ +fluent-logger==0.10.0 diff --git a/error_reporting/fluent_on_compute/startup_script.sh b/error_reporting/fluent_on_compute/startup_script.sh new file mode 100644 index 000000000000..e4a1a57ad003 --- /dev/null +++ b/error_reporting/fluent_on_compute/startup_script.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env bash +# Copyright 2016 Google, Inc +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# All rights reserved. + +set -v + +curl -sSO "https://dl.google.com/cloudagents/install-logging-agent.sh" +chmod +x install-logging-agent.sh +./install-logging-agent.sh +mkdir -p /etc/google-fluentd/config.d/ +cat < /etc/google-fluentd/config.d/forward.conf + + type forward + port 24224 + +EOF +service google-fluentd restart + +apt-get update +apt-get install -yq \ + git build-essential supervisor python python-dev python-pip libffi-dev \ + libssl-dev +pip install fluent-logger +