|
13 | 13 | # limitations under the License. |
14 | 14 |
|
15 | 15 | import argparse |
| 16 | +import os |
| 17 | +import pprint |
| 18 | +import time |
16 | 19 |
|
17 | | -from google.cloud import monitoring |
| 20 | +from google.cloud import monitoring_v3 |
18 | 21 |
|
19 | 22 |
|
20 | | -def create_metric_descriptor(): |
| 23 | +def create_metric_descriptor(project_id): |
21 | 24 | # [START monitoring_create_metric] |
22 | | - client = monitoring.Client() |
23 | | - descriptor = client.metric_descriptor( |
24 | | - 'custom.googleapis.com/my_metric', |
25 | | - metric_kind=monitoring.MetricKind.GAUGE, |
26 | | - value_type=monitoring.ValueType.DOUBLE, |
27 | | - description='This is a simple example of a custom metric.') |
28 | | - descriptor.create() |
| 25 | + client = monitoring_v3.MetricServiceClient() |
| 26 | + project_name = client.project_path(project_id) |
| 27 | + descriptor = monitoring_v3.types.MetricDescriptor() |
| 28 | + descriptor.type = 'custom.googleapis.com/my_metric' |
| 29 | + descriptor.metric_kind = ( |
| 30 | + monitoring_v3.enums.MetricDescriptor.MetricKind.GAUGE) |
| 31 | + descriptor.value_type = ( |
| 32 | + monitoring_v3.enums.MetricDescriptor.ValueType.DOUBLE) |
| 33 | + descriptor.description = 'This is a simple example of a custom metric.' |
| 34 | + descriptor = client.create_metric_descriptor(project_name, descriptor) |
| 35 | + print('Created {}.'.format(descriptor.name)) |
29 | 36 | # [END monitoring_create_metric] |
30 | 37 |
|
31 | 38 |
|
32 | 39 | def delete_metric_descriptor(descriptor_name): |
33 | 40 | # [START monitoring_delete_metric] |
34 | | - client = monitoring.Client() |
35 | | - |
36 | | - descriptor = client.metric_descriptor(descriptor_name) |
37 | | - descriptor.delete() |
38 | | - |
| 41 | + client = monitoring_v3.MetricServiceClient() |
| 42 | + client.delete_metric_descriptor(descriptor_name) |
39 | 43 | print('Deleted metric descriptor {}.'.format(descriptor_name)) |
40 | 44 | # [END monitoring_delete_metric] |
41 | 45 |
|
42 | 46 |
|
43 | | -def write_time_series(): |
| 47 | +def write_time_series(project_id): |
44 | 48 | # [START monitoring_write_timeseries] |
45 | | - client = monitoring.Client() |
46 | | - resource = client.resource( |
47 | | - 'gce_instance', |
48 | | - labels={ |
49 | | - 'instance_id': '1234567890123456789', |
50 | | - 'zone': 'us-central1-f', |
51 | | - } |
52 | | - ) |
53 | | - |
54 | | - metric = client.metric( |
55 | | - type_='custom.googleapis.com/my_metric', |
56 | | - labels={ |
57 | | - } |
58 | | - ) |
59 | | - client.write_point(metric, resource, 3.14) |
| 49 | + client = monitoring_v3.MetricServiceClient() |
| 50 | + project_name = client.project_path(project_id) |
| 51 | + |
| 52 | + series = monitoring_v3.types.TimeSeries() |
| 53 | + series.metric.type = 'custom.googleapis.com/my_metric' |
| 54 | + series.resource.type = 'gce_instance' |
| 55 | + series.resource.labels['instance_id'] = '1234567890123456789' |
| 56 | + series.resource.labels['zone'] = 'us-central1-f' |
| 57 | + point = series.points.add() |
| 58 | + point.value.double_value = 3.14 |
| 59 | + now = time.time() |
| 60 | + point.interval.end_time.seconds = int(now) |
| 61 | + point.interval.end_time.nanos = int( |
| 62 | + (now - point.interval.end_time.seconds) * 10**9) |
| 63 | + client.create_time_series(project_name, [series]) |
60 | 64 | # [END monitoring_write_timeseries] |
61 | 65 |
|
62 | 66 |
|
63 | | -def list_time_series(): |
| 67 | +def list_time_series(project_id): |
64 | 68 | # [START monitoring_read_timeseries_simple] |
65 | | - client = monitoring.Client() |
66 | | - metric = 'compute.googleapis.com/instance/cpu/utilization' |
67 | | - query_results = client.query(metric, minutes=5) |
68 | | - for result in query_results: |
| 69 | + client = monitoring_v3.MetricServiceClient() |
| 70 | + project_name = client.project_path(project_id) |
| 71 | + interval = monitoring_v3.types.TimeInterval() |
| 72 | + now = time.time() |
| 73 | + interval.end_time.seconds = int(now) |
| 74 | + interval.end_time.nanos = int( |
| 75 | + (now - interval.end_time.seconds) * 10**9) |
| 76 | + interval.start_time.seconds = int(now - 300) |
| 77 | + interval.start_time.nanos = interval.end_time.nanos |
| 78 | + results = client.list_time_series( |
| 79 | + project_name, |
| 80 | + 'metric.type = "compute.googleapis.com/instance/cpu/utilization"', |
| 81 | + interval, |
| 82 | + monitoring_v3.enums.ListTimeSeriesRequest.TimeSeriesView.FULL) |
| 83 | + for result in results: |
69 | 84 | print(result) |
70 | 85 | # [END monitoring_read_timeseries_simple] |
71 | 86 |
|
72 | 87 |
|
73 | | -def list_time_series_header(): |
| 88 | +def list_time_series_header(project_id): |
74 | 89 | # [START monitoring_read_timeseries_fields] |
75 | | - client = monitoring.Client() |
76 | | - metric = 'compute.googleapis.com/instance/cpu/utilization' |
77 | | - query_results = client.query(metric, minutes=5).iter(headers_only=True) |
78 | | - for result in query_results: |
| 90 | + client = monitoring_v3.MetricServiceClient() |
| 91 | + project_name = client.project_path(project_id) |
| 92 | + interval = monitoring_v3.types.TimeInterval() |
| 93 | + now = time.time() |
| 94 | + interval.end_time.seconds = int(now) |
| 95 | + interval.end_time.nanos = int( |
| 96 | + (now - interval.end_time.seconds) * 10**9) |
| 97 | + interval.start_time.seconds = int(now - 300) |
| 98 | + interval.start_time.nanos = interval.end_time.nanos |
| 99 | + results = client.list_time_series( |
| 100 | + project_name, |
| 101 | + 'metric.type = "compute.googleapis.com/instance/cpu/utilization"', |
| 102 | + interval, |
| 103 | + monitoring_v3.enums.ListTimeSeriesRequest.TimeSeriesView.HEADERS) |
| 104 | + for result in results: |
79 | 105 | print(result) |
80 | 106 | # [END monitoring_read_timeseries_fields] |
81 | 107 |
|
82 | 108 |
|
83 | | -def list_time_series_aggregate(): |
| 109 | +def list_time_series_aggregate(project_id): |
84 | 110 | # [START monitoring_read_timeseries_align] |
85 | | - client = monitoring.Client() |
86 | | - metric = 'compute.googleapis.com/instance/cpu/utilization' |
87 | | - query_results = client.query(metric, hours=1).align( |
88 | | - monitoring.Aligner.ALIGN_MEAN, minutes=5) |
89 | | - for result in query_results: |
| 111 | + client = monitoring_v3.MetricServiceClient() |
| 112 | + project_name = client.project_path(project_id) |
| 113 | + interval = monitoring_v3.types.TimeInterval() |
| 114 | + now = time.time() |
| 115 | + interval.end_time.seconds = int(now) |
| 116 | + interval.end_time.nanos = int( |
| 117 | + (now - interval.end_time.seconds) * 10**9) |
| 118 | + interval.start_time.seconds = int(now - 3600) |
| 119 | + interval.start_time.nanos = interval.end_time.nanos |
| 120 | + aggregation = monitoring_v3.types.Aggregation() |
| 121 | + aggregation.alignment_period.seconds = 300 # 5 minutes |
| 122 | + aggregation.per_series_aligner = ( |
| 123 | + monitoring_v3.enums.Aggregation.Aligner.ALIGN_MEAN) |
| 124 | + |
| 125 | + results = client.list_time_series( |
| 126 | + project_name, |
| 127 | + 'metric.type = "compute.googleapis.com/instance/cpu/utilization"', |
| 128 | + interval, |
| 129 | + monitoring_v3.enums.ListTimeSeriesRequest.TimeSeriesView.FULL, |
| 130 | + aggregation) |
| 131 | + for result in results: |
90 | 132 | print(result) |
91 | 133 | # [END monitoring_read_timeseries_align] |
92 | 134 |
|
93 | 135 |
|
94 | | -def list_time_series_reduce(): |
| 136 | +def list_time_series_reduce(project_id): |
95 | 137 | # [START monitoring_read_timeseries_reduce] |
96 | | - client = monitoring.Client() |
97 | | - metric = 'compute.googleapis.com/instance/cpu/utilization' |
98 | | - query_results = client.query(metric, hours=1).align( |
99 | | - monitoring.Aligner.ALIGN_MEAN, minutes=5).reduce( |
100 | | - monitoring.Reducer.REDUCE_MEAN, 'resource.zone') |
101 | | - for result in query_results: |
| 138 | + client = monitoring_v3.MetricServiceClient() |
| 139 | + project_name = client.project_path(project_id) |
| 140 | + interval = monitoring_v3.types.TimeInterval() |
| 141 | + now = time.time() |
| 142 | + interval.end_time.seconds = int(now) |
| 143 | + interval.end_time.nanos = int( |
| 144 | + (now - interval.end_time.seconds) * 10**9) |
| 145 | + interval.start_time.seconds = int(now - 3600) |
| 146 | + interval.start_time.nanos = interval.end_time.nanos |
| 147 | + aggregation = monitoring_v3.types.Aggregation() |
| 148 | + aggregation.alignment_period.seconds = 300 # 5 minutes |
| 149 | + aggregation.per_series_aligner = ( |
| 150 | + monitoring_v3.enums.Aggregation.Aligner.ALIGN_MEAN) |
| 151 | + aggregation.cross_series_reducer = ( |
| 152 | + monitoring_v3.enums.Aggregation.Reducer.REDUCE_MEAN) |
| 153 | + aggregation.group_by_fields.append('resource.zone') |
| 154 | + |
| 155 | + results = client.list_time_series( |
| 156 | + project_name, |
| 157 | + 'metric.type = "compute.googleapis.com/instance/cpu/utilization"', |
| 158 | + interval, |
| 159 | + monitoring_v3.enums.ListTimeSeriesRequest.TimeSeriesView.FULL, |
| 160 | + aggregation) |
| 161 | + for result in results: |
102 | 162 | print(result) |
103 | 163 | # [END monitoring_read_timeseries_reduce] |
104 | 164 |
|
105 | 165 |
|
106 | | -def list_metric_descriptors(): |
| 166 | +def list_metric_descriptors(project_id): |
107 | 167 | # [START monitoring_list_descriptors] |
108 | | - client = monitoring.Client() |
109 | | - for descriptor in client.list_metric_descriptors(): |
| 168 | + client = monitoring_v3.MetricServiceClient() |
| 169 | + project_name = client.project_path(project_id) |
| 170 | + for descriptor in client.list_metric_descriptors(project_name): |
110 | 171 | print(descriptor.type) |
111 | 172 | # [END monitoring_list_descriptors] |
112 | 173 |
|
113 | 174 |
|
114 | | -def list_monitored_resources(): |
| 175 | +def list_monitored_resources(project_id): |
115 | 176 | # [START monitoring_list_resources] |
116 | | - client = monitoring.Client() |
117 | | - for descriptor in client.list_resource_descriptors(): |
| 177 | + client = monitoring_v3.MetricServiceClient() |
| 178 | + project_name = client.project_path(project_id) |
| 179 | + resource_descriptors = ( |
| 180 | + client.list_monitored_resource_descriptors(project_name)) |
| 181 | + for descriptor in resource_descriptors: |
118 | 182 | print(descriptor.type) |
119 | 183 | # [END monitoring_list_resources] |
120 | 184 |
|
121 | 185 |
|
122 | | -def get_monitored_resource_descriptor(resource_type_name): |
| 186 | +def get_monitored_resource_descriptor(project_id, resource_type_name): |
123 | 187 | # [START monitoring_get_resource] |
124 | | - client = monitoring.Client() |
125 | | - print(client.fetch_resource_descriptor(resource_type_name)) |
| 188 | + client = monitoring_v3.MetricServiceClient() |
| 189 | + resource_path = client.monitored_resource_descriptor_path( |
| 190 | + project_id, resource_type_name) |
| 191 | + pprint.pprint(client.get_monitored_resource_descriptor(resource_path)) |
126 | 192 | # [END monitoring_get_resource] |
127 | 193 |
|
128 | 194 |
|
129 | | -def get_metric_descriptor(metric_type_name): |
| 195 | +def get_metric_descriptor(metric_name): |
130 | 196 | # [START monitoring_get_descriptor] |
131 | | - client = monitoring.Client() |
132 | | - print(client.fetch_metric_descriptor(metric_type_name)) |
| 197 | + client = monitoring_v3.MetricServiceClient() |
| 198 | + descriptor = client.get_metric_descriptor(metric_name) |
| 199 | + pprint.pprint(descriptor) |
133 | 200 | # [END monitoring_get_descriptor] |
134 | 201 |
|
135 | 202 |
|
| 203 | +class MissingProjectIdError(Exception): |
| 204 | + pass |
| 205 | + |
| 206 | + |
| 207 | +def project_id(): |
| 208 | + """Retreives the project id from the environment variable. |
| 209 | +
|
| 210 | + Raises: |
| 211 | + MissingProjectIdError -- When not set. |
| 212 | +
|
| 213 | + Returns: |
| 214 | + str -- the project name |
| 215 | + """ |
| 216 | + project_id = (os.environ['GOOGLE_CLOUD_PROJECT'] or |
| 217 | + os.environ['GCLOUD_PROJECT']) |
| 218 | + |
| 219 | + if not project_id: |
| 220 | + raise MissingProjectIdError( |
| 221 | + 'Set the environment variable ' + |
| 222 | + 'GCLOUD_PROJECT to your Google Cloud Project Id.') |
| 223 | + return project_id |
| 224 | + |
| 225 | + |
136 | 226 | if __name__ == '__main__': |
137 | 227 | parser = argparse.ArgumentParser( |
138 | 228 | description='Demonstrates Monitoring API operations.') |
@@ -215,24 +305,25 @@ def get_metric_descriptor(metric_type_name): |
215 | 305 | args = parser.parse_args() |
216 | 306 |
|
217 | 307 | if args.command == 'create-metric-descriptor': |
218 | | - create_metric_descriptor() |
| 308 | + create_metric_descriptor(project_id()) |
219 | 309 | if args.command == 'list-metric-descriptors': |
220 | | - list_metric_descriptors() |
| 310 | + list_metric_descriptors(project_id()) |
221 | 311 | if args.command == 'get-metric-descriptor': |
222 | 312 | get_metric_descriptor(args.metric_type_name) |
223 | 313 | if args.command == 'delete-metric-descriptor': |
224 | 314 | delete_metric_descriptor(args.metric_descriptor_name) |
225 | 315 | if args.command == 'list-resources': |
226 | | - list_monitored_resources() |
| 316 | + list_monitored_resources(project_id()) |
227 | 317 | if args.command == 'get-resource': |
228 | | - get_monitored_resource_descriptor(args.resource_type_name) |
| 318 | + get_monitored_resource_descriptor( |
| 319 | + project_id(), args.resource_type_name) |
229 | 320 | if args.command == 'write-time-series': |
230 | | - write_time_series() |
| 321 | + write_time_series(project_id()) |
231 | 322 | if args.command == 'list-time-series': |
232 | | - list_time_series() |
| 323 | + list_time_series(project_id()) |
233 | 324 | if args.command == 'list-time-series-header': |
234 | | - list_time_series_header() |
| 325 | + list_time_series_header(project_id()) |
235 | 326 | if args.command == 'list-time-series-reduce': |
236 | | - list_time_series_reduce() |
| 327 | + list_time_series_reduce(project_id()) |
237 | 328 | if args.command == 'list-time-series-aggregate': |
238 | | - list_time_series_aggregate() |
| 329 | + list_time_series_aggregate(project_id()) |
0 commit comments