LogMan.io Assets configuration¶
LogMan.io Assets requires the following dependencies:
- Apache ZooKeeper
- Apache Kafka
- MongoDB
- SeaCat Auth
- LogMan.io Library with
/EventLanes/(activity and complex lanes) and tenant schemas in/Schemas/ - LogMan.io Watcher (optional, for per asset risk score weight lookups)
Model¶
Include the service in the site model and click Apply:
define:
type: rc/model
services:
lmio-assets:
instances:
<tenant>-1:
node: <node>
asab:
config:
tenant:
name: <tenant>
Example¶
Minimal ASAB configuration:
[zookeeper]
servers=zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181
[library]
providers=zk:///library
[kafka]
bootstrap_servers=kafka-1:9092,kafka-2:9092,kafka-3:9092
[asab:storage]
type=mongodb
mongodb_uri=mongodb://mongodb1,mongodb2,mongodb3/?replicaSet=rs0
mongodb_database=assets
[auth]
multitenancy=yes
public_keys_url=http://seacat-auth.service_id.asab/.well-known/jwks.json
[pipeline:ActivityAssetsPipeline:KafkaSource]
group.id=lmio_assets
[pipeline:ComplexAssetsPipeline:KafkaSource]
group.id=lmio_assets
Topics are not hardcoded in INI: on Library ready, the service discovers each tenant activity.yaml and complex.yaml and subscribes to their Kafka event topics.
Activity messages are produced by LogMan.io Parsec IndicatorOfActivityProcessor (principal host.id / user.id, auxiliary related.*, observer.name, observer.type). Principal field names and identity resolution come from /Schemas/Mappings/Asset_<schema>.yaml merged with parsec.asset on each Parsec event lane. See Parsec asset management.
[assets] section¶
| Key | Default | Description |
|---|---|---|
mongo_collection |
assets |
Mongo collection for asset rows |
mongo_tags_collection |
asset_tags |
Tag sidecar collection |
mongo_suppress_collection |
asset_suppress |
Shared merge/delete suppress (multi-instance) |
activity_mongo_batch_max |
100 |
Activity updates before bulk_write |
activity_mongo_batch_max_age |
60 |
Max seconds before partial activity flush (0 = size only) |
complex_mongo_batch_max |
100 |
Risk score samples before Mongo flush |
complex_mongo_batch_max_age |
60 |
Max seconds before partial risk flush |
default_alert_after_sec |
7200 (2h) |
alert_after on first activity insert (0 = disabled) |
risk_score_decay_half_life |
24h |
Entity risk half life (see Entity risk score) |
risk_score_decay_clear_below |
0.5 |
Clear decayed scores below this |
risk_score_cas_retries |
8 |
Optimistic concurrency retries for risk score merge |
deleted_activity_suppress_ttl |
600 |
Ignore Kafka upserts after HTTP delete (0 = off); Mongo TTL |
stale_alert_cooldown_sec |
900 |
Min seconds between repeat stale asset signals |
Library skip (/Assets/Skip/)¶
Filter host and user assets (activity and complex). Matching is case-insensitive (except min_hyphens, which counts - characters).
| Key | Match |
|---|---|
names / exact |
Full string |
prefixes |
Starts with |
suffixes |
Ends with (postfix) |
contains |
Substring |
min_hyphens |
Title contains at least this many - characters (0 = off) |
define:
type: assets/skip
host:
names:
- localhost
prefixes:
- temp-
contains:
- "-dhcp-"
user:
names:
- SYSTEM
- LOCAL SERVICE
prefixes:
- "urn:"
- "NT AUTHORITY\\"
suffixes:
- "$"
contains:
- svc_
min_hyphens: 4
Common Library defaults include user urn: prefix and min_hyphens: 4.
To drop the same patterns before they reach the activity Kafka topic, configure Parsec event lane parsec.asset.skip (see Parsec asset management). Parsec skip does not support min_hyphens.
New-asset notifications (instant + scheduled)¶
LogMan.io Assets can emit asab-iris notifications (same JSON Kafka path as lmio-alerts) for assets discovered from the activity stream. Routine last_seen updates do not notify. Creates that only come from the complex / risk-score path are not covered.
- Instant: when an asset document is first inserted (Mongo
upserted_ids). - Scheduled digest: ZooKeeper leader only; per
(tenant, channel)tracker window. When INIperiodexpires, one summary lists assets withfirst_seenafter the tracker offset.
[notifications] section¶
| Key | Default | Description |
|---|---|---|
topic |
notifications |
Kafka topic for asab-iris JSON messages |
enabled |
yes |
Master switch; no disables all new-asset notifications |
tracker_collection |
notification_trackers |
Mongo collection for scheduled digest offsets |
digest_max_assets |
50 |
Max asset rows in digest template new_assets (full count is always in new_assets_count) |
Channel INI (opt-in)¶
Add a section per channel you want to use (same pattern as Alerts). Without the section, that channel never sends. Optional period (default 3600 / 1h) controls the digest interval:
[notification:email]
from=noreply@example.com
to=soc@example.com
period=1h
[notification:slack]
period=3600
[notification:sms]
phone=+420000000000
[notification:push]
topic=assets
Library settings¶
Per tenant, place YAML under /Assets/Notifications/ (for example settings.yaml) with define.type: assets/notifications:
instant:enables one-shot messages for that channelscheduled:enables periodic digests for that channel- optional channel-level
schedule:silence windows (atcron,duration,action: delay|discard), same as lmio-alerts - optional
params/excludeinsideinstant/scheduled(attribute/op/value, opseq/gt/gte/lt/lte)
define:
type: assets/notifications
email:
instant:
params:
template: /Templates/Email/Asset Created.md
exclude:
- attribute: type
op: eq
value: user
scheduled:
params:
template: /Templates/Email/Asset Summary.md
exclude:
- attribute: type
op: eq
value: user
schedule:
- at: "0 16 * * *"
duration: 14h
action: delay
slack:
scheduled: {}
Default template paths (deploy separately in the Library):
- Instant:
/Templates/{Email,Slack,SMS,Push}/Asset Created.md - Scheduled:
/Templates/{Email,Slack,SMS,Push}/Asset Summary.md
Instant params: tenant, asset_id, type, title, first_seen / last_seen (ISO UTC), name, description.
Scheduled params: tenant, name, description, new_assets_count, new_assets (list of {asset_id, type, title, first_seen}).
HTTP API¶
The service listens on tcp/8965 by default. Asset list responses include decayed risk_score, first_seen, last_seen, and computed active. Sort by entity risk with query parameter srisk_score.
Optional per asset risk score weight overrides are managed from the asset detail UI (and via HTTP API for automation). See Entity risk score.