Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Question about deleted paths #409

Open
kaage opened this issue Apr 13, 2024 · 6 comments
Open

Question about deleted paths #409

kaage opened this issue Apr 13, 2024 · 6 comments
Labels
enhancement New feature or request

Comments

@kaage
Copy link

kaage commented Apr 13, 2024

I'm trying to build solution based for gnmi data which is more like table formatted than metrics. This type of data can be routing table, ARP table, MAC address table etc.

In the first phase trying present the data in Grafana at selected point in time as a table. Later I will show difference of same table between two points in time. This means I need to get add, change and delete events to the database.

I saw in the gnmic changelog following:

v 0.36.0 - February 13th 2024
Event Message

gNMI updates with deleted paths are now converted into separate event messages where the keys are extracted from the path and set as event tags.

Is this feature related to what I'm looking for? I updated gnmic and tried to see how delete events are written in to InfluxDB but couldn't find them. How it is supposed to work?

Ps. I have demostrated table and diff visualization with Grafana & Postgres. Not sure if same will work with InfluxDB (InfluxQL or Flux). Any plans to have Postgres output for gnmic?

@karimra
Copy link
Collaborator

karimra commented Apr 13, 2024

If I understand what you are trying to achieve correctly, I would say you don't really need delete events.
All you need is knowing that a certain row in your table does not exist anymore after a certain timestamp.
That way you can show the same table at different points (intervals?) in time highlighting the diffs.

Deletes are more for a system that ingests events and reacts to a change (e.g: trigger an alarm)
Keep in mind that gNMI sample subscriptions do not include delete notifications.

Postgres will be config heavy, you need to create a schema and explicitly map each received path to a key/field.

@kaage
Copy link
Author

kaage commented Apr 14, 2024

I think I forgot to add one detail. In my solution data collection is based on stream mode on-change rather than sample. So we don't get full table data every interval. Those tables in network devices are changing relativety rarely. It doesn't make sense to subscribe interval based.

So in order to tell rows in the table at given point in time, I need to:

  1. Take latest entries of each row within time range starting from when the subsribtion has started (or restarted) as every time it starts full table is sent. (Or maybe I use heartbeat-interval of 1h to make it easier)
  2. Remove rows where last event was delete

Or is there way to solve the issue without delete events?

@karimra
Copy link
Collaborator

karimra commented Apr 23, 2024

I see your point, an additional tag that says delete=true can be added when a delete is received.

@karimra
Copy link
Collaborator

karimra commented May 13, 2024

Added in v0.37.0.
You can use the attribute delete-tag: xyz under your influxdb output.
gNMIc will create entries with tag xyz: true for delete notifications.

@karimra karimra closed this as completed May 14, 2024
@kaage
Copy link
Author

kaage commented Jul 3, 2024

I tried this but for some reason when delete-tag is in the output (gnmic.yaml):

-- clip  --
outputs:
  influxdb-output:
    type: influxdb
    url: http://influxdb:8086
    bucket: telemetry
    token: <removed>
    batch-size: 1000
    flush-timer: 10s
    org: acme
    override-timestamps: true
    delete-tag: deleted
    event-processors:
      - remove_openconfig_origin
-- clip  --

Nothing gets written into InfluxDB. Not even additions. gnmic logs look like this:

2024/07/03 08:11:22.082512 [gnmic] version=0.37.0, commit=05a3e785, date=2024-05-13T23:27:31Z, gitURL=https://github.com/openconfig/gnmic, docs=https://gnmic.openconfig.net
2024/07/03 08:11:22.082523 [gnmic] using config file "/app/gnmic.yaml"
2024/07/03 08:11:22.082598 [config] validating processor "remove_openconfig_origin" config
2024/07/03 08:11:22.082689 [gnmic] starting output type influxdb
2024/07/03 08:11:22.082842 [gnmic] added event processor 'remove_openconfig_origin' of type=event-strings to output
2024/07/03 08:11:22.082923 [influxdb_output:influxdb-output] initialized influxdb client: {"Cfg":{"URL":"http://influxdb:8086","Org":"acme","Bucket":"telemetry","Token":"<removed>","BatchSize":1000,"FlushTimer":10000000000,"UseGzip":false,"EnableTLS":false,"HealthCheckPeriod":0,"Debug":false,"AddTarget":"","TargetTemplate":"","EventProcessors":["remove_openconfig_origin"],"EnableMetrics":false,"OverrideTimestamps":true,"TimestampPrecision":"","CacheConfig":null,"CacheFlushTimer":0,"DeleteTag":"deleted"}}
2024/07/03 08:11:22.082961 [influxdb_output:influxdb-output] starting worker-0
2024/07/03 08:11:22.082986 [gnmic] queuing target "clab-tellab-xrd-telemetry-rtr1"
2024/07/03 08:11:22.082991 [gnmic] subscribing to target: "clab-tellab-xrd-telemetry-rtr1"
2024/07/03 08:11:22.082994 [gnmic] starting target "clab-tellab-xrd-telemetry-rtr1" listener
2024/07/03 08:11:22.085245 [gnmic] target "clab-tellab-xrd-telemetry-rtr1" gNMI client created
2024/07/03 08:11:22.085251 [gnmic] sending gNMI SubscribeRequest: subscribe='subscribe:{subscription:{path:{elem:{name:"Cisco-IOS-XR-ip-rib-ipv4-oper:rib"}  elem:{name:"vrfs"}  elem:{name:"vrf"}  elem:{name:"afs"}  elem:{name:"af"}  elem:{name:"safs"}  elem:{name:"saf"}  elem:{name:"ip-rib-route-table-names"}  elem:{name:"ip-rib-route-table-name"}  elem:{name:"routes"}}  mode:ON_CHANGE}  encoding:PROTO}', mode='STREAM', encoding='PROTO', to clab-tellab-xrd-telemetry-rtr1

@karimra karimra reopened this Jul 3, 2024
@kaage
Copy link
Author

kaage commented Oct 12, 2024

Same problem still appears to be in 0.38.2. Writes to db gets broken if delete-tag is present.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants