Skip to content

Releases: memfault/memfaultd

1.25.1

12 Nov 21:05

Choose a tag to compare

This is a patch release fixing a bug introduced in 1.25.0 affecting disk
statsitics.

Fixed

  • Fixed a bug with disk statistics (bytes_written, lifetime_remaining, etc.)
    that would prevent them from being captured in certain kernel versions.

1.25.0

04 Nov 21:02

Choose a tag to compare

This release adds some new clippy configs, as well as the ability to filter
coredumps by path. Additionally, we've added a configuration that allows you to
specify where individual data types are stored. We've also added a decent chunk
of bug fixes, see the fixed section for more info.

We're also cooking up something interesting using eBPF to track per process disk
writes. It's not quite ready for prime time, so it's added here as an
experimental feature. Keep an eye out for it in a future release!

Added

  • Added some clippy configs to Cargo.toml that are now available in Rust
    1.80.0.
  • Added the ability to filter coredumps by path. This configuration will not
    collect coredumps for any program that has crashed in the provided directory,
    or passed as a direct file.
  • Added a configuration that allows you to specify where individual data types
    are stored. If you specify both a tmp_dir and persist_dir, this config
    will allow you to set individual data types (e.g. coredumps/reboots) to be
    stored in your persistent directory. This can help you strike a balance
    between keeping data between reboots, and limiting the number of writes to
    disk.

Changed

  • Updated MSRV of memfaultd to 1.80.0
  • veth and usb network interfaces will now be ignored in metrics auto
    mode. These interfaces are generally ephemeral and can result in a large
    number of metrics that are hard to read.
  • eMMC lifetime metrics will now default to fetching from sysfs for newer
    kernel versions. For older kernels where this is not available, we will still
    fall back to using ioctl.
  • Moved the memfaultd PID file to /run/memfauld instead of the root /run
    dir. This follows more closely with suggested configuration of systemd, and
    allows for configurations that do not want to run as root.
  • Internal message passing for the metrics subsystem saw some improvements in
    memory usage and allocation.

Fixed

  • Fixed an issue with certain file systems that are not able to rename a file
    while a descriptor is open.
  • Fixed a bug where the bytes_written metric was not properly tracked for
    systems with multiple disks. This bug resulted in no bytes_written metric
    readings being collected due to overflow protection.
  • Fixed a rare race condition where a coredump could be uploaded before the
    gzip encoder finished writing. This would result in a bad header for the
    compressed file, and make it impossible to decompress it.

Experimental

  • Added an experimental configuration for some in progress eBPF based work.

1.24.0

18 Aug 19:49

Choose a tag to compare

This release adds an example recipe for a systemd service that depends on
memfaultd. Additionally it changes the query frequency of eMMC lifetime
metrics.

Added

  • Added an example service that depends on memfaultd. This is useful for when
    you want to run some code after memfaultd has finished starting.

Changed

  • Changed the read interval for eMMC lifetime values to only happen once an hour
    regardless of configuration. The lifetime values will change very
    infrequently. Reading them at a lower frequency can help lower CPU utilization
    and reduce eMMC controller wakeups without sacrificing any resolution. This
    can improve battery life for battery powered devices.

1.23.0

11 Aug 16:49

Choose a tag to compare

This release adds support for Python based stacktraces, as well as a few minor
changes. Additionally we've made some changes to flash lifetime metrics, and how
they're collected.

Added

  • Add generic custom trace support
    • This allows you to send text based backtraces to memfaultd.
    • They can be sent via the memfaultctl save-trace command
    • They can also be sent via /v1/trace/save local endpoint
  • Added Python stack trace support
    • Python stack traces utilize the above custom backtrace support
    • By integrating pyfault you can send
      backtraces directly from a crashing python process.
  • Add new virtual memory metrics from /proc/vmstat. These are represented as
    the following keys:
    • memory/vm/swaps_in_per_second
    • memory/vm/swaps_out_per_second
    • memory/vm/pages_in_per_second
    • memory/vm/pages_out_per_second
  • Added OUI (Organizationally Unique Identifier) collection for network device
    identification and troubleshooting

Changed

  • Changed flash lifetime metrics to use pct_remaining format instead of
    previous representation, providing clearer visibility into remaining device
    lifespan

Fixed

  • Fixed MMC lifetime reading where memfaultd would attempt to read lifetime
    values from older MMC devices that don't support this feature
  • Fixed handling of invalid individual lifetime values - they no longer cause
    the entire lifetime collection to fail
  • Fixed overly verbose device info logging that was cluttering log output
  • Fixed build configuration for macOS by removing
    --compress-debug-sections=zlib from cargo config that was causing
    compilation issues
  • Fixed unit test reliability by properly mocking boottime_ms values

1.22.0

12 Jun 21:17

Choose a tag to compare

Added

  • The Lifetime Estimation B value for monitored eMMCs is now reported as
    diskstats/<disk>/lifetime_b_pct
  • A warning is now emitted when there is an issue parsing the output from
    memfault-device-info in memfault-core-handler. Previously, this would
    cause coredump collection to fail silently.
  • Built-in CPU, memory, and thermal metrics can now be disabled individually
    with the new metrics.system_metric_collection.{cpu,memory,thermal}.enable
    boolean config.
  • memfaultd's .cargo/config.toml now sets --compress-debug-sections to
    zlib and --force-unwind-tables to yes by default. These settings enable
    building efficient debug sections and binaries whose coredumps can be fully
    processed. We strongly recommend using them with any Rust programs you intend
    to monitor with Memfault.

Changed

  • collectd-based metrics that overlap with built-in metrics will now be
    selectively filtered out if both are enabled based on whether the overlapping
    built-in metric group itself is enabled. This allows for using a mix of
    collectd-based metrics and built-in metrics more easily.

Fixed

  • A bug in which the values for the MemfaultSdkMetric_os_name and
    MemfaultSdkMetric_os_version built-in Attributes were reversed.

1.21.1

22 May 12:40

Choose a tag to compare

This is a patch release that fixes an overflow issue with the recently added
diskstats/<disk>/bytes_written metric.

Fixed

  • Fixed an issue with the diskstats/<disk>/bytes_written metric where it would
    overflow when the diskstats counter wrapped. This would cause very large
    readings to be sent. Whenever there is a potential overflow now the reading
    will be discarded.

1.21.0

08 May 21:10

Choose a tag to compare

This release adds several new metrics for tracking flash wear, as well as a new
syslog log source. It also includes a config flag to enable legacy statsd metric
names, and a data retention check to the upload process. For more information on
the new metrics, check out the
docs.

Added

  • Added metrics for tracking flash wear for mmc block devices like eMMC and SD
    cards
    • diskstats/<disk_name>/bytes_written
    • diskstats/<disk_name>/lifetime_pct
    • diskstats/<disk_name>/manufacturer_id
    • diskstats/<disk_name>/name
  • Added syslog as a logs source. This adds support for messages in both RFC5424
    and RFC3164 format sent over UDP. This is enabled with the syslog feature
    which defaults to enabled.
  • Added a config flag to enable legacy statsd metric names. This will generate
    metrics that follow the format generated by the collectd statsd server. This
    is a helpful option for people looking to remove collectd as a dependency,
    but keep the legacy format for metric keys. The config value can be found in
    metrics->statsd_server->legacy_key_names.
  • Added time-based data filtering: When upgrading multiple devices' visibility
    levels, the Memfault backend now tells memfaultd to only upload data from
    the time of the change forward. This prevents unexpected large data uploads
    from device history.
  • Added interface/<interface>/total_bytes/{tx,rx} metrics. These allow us to
    track the total bytes sent over an interface over the course of an hour.

Changed

  • Added intelligent traffic distribution: Device initial connections now include
    a random delay (up to 25% of the configured upload interval). This prevents
    traffic spikes when many devices connect simultaneously, ensuring smoother
    backend performance.
  • ram and loop disks are no longer tracked with diskstats in auto mode.
    These are virtual disks, and provide little value when tracking metrics.

1.20.0

10 Apr 18:45

Choose a tag to compare

This release adds support for log filtering as well as a few bug fixes. Check
out the logging docs for more
information on log filtering!

Added

  • Added support for log message filtering. This feature gives you the ability to
    exclude log lines that are spammy or contain potentially sensitive information
    from being uploaded to Memfault.
  • Added built-in logs-to-metric rules that increment counter metrics when a
    systemd_restarts or oomkill event is detected. These are widely applicable
    to most Linux distros, and represent a good base for metric collection

Fixed

  • Fixed a problem where large HRT files could take a long time to write. This
    was due to the file writer not being buffered.
  • Fixed a race condition that caused the journald cursor to not be written.
    This would lead to the journald log collector capturing duplicate log lines
    if memfaultd is restarted.
  • Fixed a problem where daily heartbeats were being saved when they were not
    enabled.

Removed

  • Combined the regex feature with the logging feature to simplify feature
    management as log filtering and matching based on regexes becomes a key part
    of our logging offering.

1.19.0

31 Mar 14:29

Choose a tag to compare

This release adds memfaultctl upload as a command to allow
users to force memfaultd to upload data without forcing a
write and sync of in-progress data.

Added

  • memfaultctl upload, which tells memfaultd to upload
    any data that has been written to the staging direcoty.

1.18.1

18 Mar 18:17

Choose a tag to compare

This release adds mickledore to the list of compatible
Yocto versions for meta-memfault.

Added

  • mickledore to LAYERSERIES_COMPAT_memfault in meta-memfault's
    layer.conf