Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
Initial sketch of logging API usage docs.
  • Loading branch information
tseaver committed Feb 18, 2016
commit 2e8b2dac95857a97d8ad0181ef493e272569c202
7 changes: 7 additions & 0 deletions docs/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,13 @@
search-index
search-document

.. toctree::
:maxdepth: 0
:hidden:
:caption: Cloud Logging

logging-usage

.. toctree::
:maxdepth: 0
:hidden:
Expand Down
295 changes: 295 additions & 0 deletions docs/logging-usage.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,295 @@
Using the API
=============

Authentication / Configuration
------------------------------

- Use :class:`Client <gcloud.logging.client.Client>` objects to configure
your applications.

- :class:`Client <gcloud.logging.client.Client>` objects hold both a ``project``
and an authenticated connection to the Logging service.

- The authentication credentials can be implicitly determined from the
environment or directly via
:meth:`from_service_account_json <gcloud.logging.client.Client.from_service_account_json>`
and
:meth:`from_service_account_p12 <gcloud.logging.client.Client.from_service_account_p12>`.

This comment was marked as spam.

This comment was marked as spam.


- After setting ``GOOGLE_APPLICATION_CREDENTIALS`` and ``GCLOUD_PROJECT``
environment variables, create a :class:`Client <gcloud.logging.client.Client>`

.. doctest::

>>> from gcloud import logging
>>> client = logging.Client()

Writing log entries

This comment was marked as spam.

This comment was marked as spam.

-------------------

Write a simple text entry to a log.

.. doctest::

>>> from gcloud import logging
>>> client = logging.Client()
>>> log = client.log('log_name')

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.

>>> log.text("A simple entry") # API call

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.


Write a dictionary entry to a log.

.. doctest::

>>> from gcloud import logging
>>> client = logging.Client()
>>> log = client.log('log_name')
>>> log.struct(message="My second entry",

This comment was marked as spam.

This comment was marked as spam.

... weather="partly cloudy") # API call

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.


Retrieving log entries
----------------------

Fetch entries for the default project.

.. doctest::

>>> from gcloud import logging
>>> client = logging.Client()
>>> entries, token = client.list_entries() # API call

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.

>>> for entry in entries:
... timestamp = entry.timestamp.ISO()

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.

... print(timestamp, entry.text_payload, entry.struct_payload)
('2016-02-17T20:35:49.031864072Z', 'A simple entry', None)
('2016-02-17T20:38:15.944418531Z,' None, {'message': 'My second entry', 'weather': 'partly cloudy'})

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.



Fetch entries across multiple projects.

.. doctest::

>>> from gcloud import logging
>>> client = logging.Client()
>>> entries, token = client.list_entries(
... project_ids=['one-project', 'another-project']) # API call


This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.

Filter entries retrieved using the "Advance Logs Filters" syntax (see
https://cloud.google.com/logging/docs/view/advanced_filters).

This comment was marked as spam.

This comment was marked as spam.


.. doctest::

>>> from gcloud import logging
>>> client = logging.Client()
>>> FILTER = "log:log_name AND textPayload:simple"

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.

>>> entries, token = client.list_entries(filter=FILTER) # API call

Sort entries in descending timestamp order.

.. doctest::

>>> from gcloud import logging
>>> client = logging.Client()
>>> entries, token = client.list_entries(order_by='timestamp desc') # API call

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.


Retrieve entities in batches of 10, iterating until done.

.. doctest::

>>> from gcloud import logging
>>> client = logging.Client()
>>> retrieved = []
>>> token = None
>>> while True:
... entries, token = client.list_entries(page_size=10) # API call

This comment was marked as spam.

This comment was marked as spam.

... retrieved.extend(entries)
... if token is None:
... break


Deleting all entries for a log
------------------------------

.. doctest::

>>> from gcloud import logging
>>> client = logging.Client()
>>> log = client.log('log_name')
>>> log.delete() # API call


Manage log metrics
------------------

Metrics are counters of entries which match a given filter. They can be
used within Cloud Monitoring to create charts and alerts.

Create a metric:

.. doctest::

>>> from gcloud import logging
>>> client = logging.Client()
>>> metric = client.metric("robots", "Robots all up in your server",
... filter='log:apache-access AND textPayload:robot')

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.

>>> metric.exists() # API call
False
>>> metric.create() # API call
>>> metric.exists() # API call
True

List all metrics for a project:

.. doctest::

>>> from gcloud import logging
>>> client = logging.Client()
>>> metrics, token = client.list_metrics()
>>> len(metrics)
0
>>> metric = metrics[0]

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.

>>> metric.name
"robots"

Refresh local information about a metric:

.. doctest::

>>> from gcloud import logging
>>> client = logging.Client()
>>> metric = client.metric("robots")
>>> metric.get() # API call
>>> metric.description
"Robots all up in your server"
>>> metric.filter
"log:apache-access AND textPayload:robot"

Update a metric:

.. doctest::

>>> from gcloud import logging
>>> client = logging.Client()
>>> metric = client.metric("robots")
>>> metric.exists() # API call
True
>>> metric.get() # API call

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.

>>> metric.description = "Danger, Will Robinson!"
>>> metric.update() # API call

Delete a metric:

.. doctest::

>>> from gcloud import logging
>>> client = logging.Client()
>>> metric = client.metric("robots")
>>> metric.exists() # API call
True
>>> metric.delete() # API call
>>> metric.exists() # API call
False


Export log entries using sinks
------------------------------

Sinks allow exporting entries which match a given filter to Cloud Storage
buckets, BigQuery datasets, or Pubsub topics.

This comment was marked as spam.

This comment was marked as spam.


Create a CloudStorage sink:

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.


.. doctest::

>>> from gcloud import logging
>>> client = logging.Client()
>>> sink = client.sink("robots-storage",
... filter='log:apache-access AND textPayload:robot')

This comment was marked as spam.

>>> sink.storage_bucket = "my-bucket-name"
>>> sink.exists() # API call
False
>>> sink.create() # API call
>>> sink.exists() # API call
True

Create a BigQuery sink:

.. doctest::

>>> from gcloud import logging
>>> client = logging.Client()
>>> sink = client.sink("robots-bq",
... filter='log:apache-access AND textPayload:robot')

This comment was marked as spam.

>>> sink.bigquery_dataset = "projects/my-project/datasets/my-dataset"

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.

>>> sink.exists() # API call
False
>>> sink.create() # API call
>>> sink.exists() # API call
True

Create a Pubsub sink:

.. doctest::

>>> from gcloud import logging
>>> client = logging.Client()
>>> sink = client.sink("robots-pubsub",
... filter='log:apache-access AND textPayload:robot')
>>> sink.pubsub_topic = 'projects/my-project/topics/my-topic'

This comment was marked as spam.

This comment was marked as spam.

>>> sink.exists() # API call
False
>>> sink.create() # API call
>>> sink.exists() # API call
True

List all sinks for a project:

.. doctest::

>>> from gcloud import logging
>>> client = logging.Client()
>>> sinks, token = client.list_sinks()
>>> for sink in sinks:
... print(sink.name, sink.destination)

This comment was marked as spam.

This comment was marked as spam.

('robots-storage', 'storage.googleapis.com/my-bucket-name')
('robots-bq', 'bigquery.googleapis.com/projects/my-project/datasets/my-dataset')
('robots-pubsub', 'pubsub.googleapis.com/projects/my-project/topics/my-topic')

This comment was marked as spam.

This comment was marked as spam.


Refresh local information about a sink:

.. doctest::

>>> from gcloud import logging
>>> client = logging.Client()
>>> sink = client.sink('robots-storage')
>>> sink.filter is None
True
>>> sink.get() # API call

This comment was marked as spam.

This comment was marked as spam.

>>> sink.filter
'log:apache-access AND textPayload:robot'
>>> sink.destination
'storage.googleapis.com/my-bucket-name')

This comment was marked as spam.

This comment was marked as spam.


Update a sink:

.. doctest::

>>> from gcloud import logging
>>> client = logging.Client()
>>> sink = client.sink("robots")
>>> sink.get() # API call
>>> sink.filter = "log:apache-access"
>>> sink.update() # API call

Delete a sink:

.. doctest::

>>> from gcloud import logging
>>> client = logging.Client()
>>> sink = client.sink("robots",
... filter='log:apache-access AND textPayload:robot')

This comment was marked as spam.

This comment was marked as spam.

>>> sink.exists() # API call
True
>>> sink.delete() # API call
>>> sink.exists() # API call
False