Skip to content

Commit a4b80de

Browse files
committed
Update README image links and add local assets
Replaced external image URLs in README.md with local paths under docs/images for improved reliability and maintainability. Added all referenced images to the repository to ensure documentation visuals are available offline and versioned with the project. Expanded Application panel documentation for clarity.
1 parent 333eaa1 commit a4b80de

File tree

11 files changed

+21
-11
lines changed

11 files changed

+21
-11
lines changed

README.md

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
Observer CLI is a library to be dropped into any beam nodes, to be used to assist DevOps people diagnose problems in production nodes. Based on [recon](https://github.com/ferd/recon).
1313

14-
<img src="https://github.com/user-attachments/assets/ce797033-732a-4178-a9c5-df4de559ed0c" width="100%" alt="Home"> </img>
14+
<img src="https://github.com/zhongwencool/observer_cli/raw/main/docs/images/home.png" width="100%" alt="Home"> </img>
1515

1616
- Provide a high-performance tool usable both in development and production settings.
1717
- Focus on important and detailed information about real-time running system.
@@ -96,7 +96,7 @@ iex(1)> :observer_cli.start(:'target@host', :'magic_cookie')
9696

9797
### Home Panel
9898

99-
![Home](https://user-images.githubusercontent.com/3116225/96714573-ede2f280-13d4-11eb-999c-f2aedb0d6ab1.jpg)
99+
![Home](https://github.com/zhongwencool/observer_cli/raw/main/docs/images/home_panel.jpg)
100100

101101
The Home panel provides a comprehensive overview of your Erlang node:
102102

@@ -151,15 +151,15 @@ Scheduler utilization by [`erlang:statistics(scheduler_wall_time)`](http://erlan
151151

152152
When looking for high memory usage, for example it's interesting to be able to list all of a node's processes and find the top N consumers. Enter `m` then press `Enter` will use the `recon:proc_count(memory, N)` function, and you will get output like the following. On OTP 27+ nodes, process rows also display any label set through [`proc_lib:set_label/1`](https://www.erlang.org/doc/apps/stdlib/proc_lib.html#set_label/1), which helps correlate supervised jobs with their metrics.
153153

154-
![Top](https://user-images.githubusercontent.com/3116225/96717499-25539e00-13d9-11eb-85af-fdde633da098.jpg)
154+
![Top](https://github.com/zhongwencool/observer_cli/raw/main/docs/images/process.jpg)
155155

156156
[`recon:proc_count/2`](http://ferd.github.io/recon/recon.html#proc_count-2) and [`recon:proc_window/3`](http://ferd.github.io/recon/recon.html#proc_window-3) are to be used when you require information about processes in a larger sense: biggest consumers of given process `memory`, `reductions`, `binary`, `total_heap_size`, `message_queue_len`, either absolutely or over a sliding time window, respectively.
157157

158158
More detail about sliding time windows see [`recon:proc_window/3`](http://ferd.github.io/recon/recon.html#proc_window-3)
159159

160160
When an abnormal process is found, enter the suspected process sequence(Integer) then press `Enter` will use [`erlang:process_info/2`](http://erlang.org/doc/man/erlang.html#process_info-2) to show a lot of information available (which is safe to use in production) about processes.
161161

162-
![Process](https://user-images.githubusercontent.com/3116225/39091219-66ba0398-4622-11e8-81b1-f489251f111a.jpg)
162+
![Process](https://github.com/zhongwencool/observer_cli/raw/main/docs/images/process_info.jpg)
163163

164164
* **registered_name**: if the process has a name (as registered with `erlang:register/2`), it is given here.
165165
* **trap_exit**: set `trap_exit` to true, exit signals arriving to a process are converted to `{EXIT,From,Reason}` messages, which can be received as ordinary messages. If `trap_exit` is set to false, the process exits if it receives an exit signal other than normal and the exit signal is propagated to its linked processes. Application processes are normally not to trap exits.
@@ -184,7 +184,7 @@ When an abnormal process is found, enter the suspected process sequence(Integer)
184184

185185
### Network
186186

187-
![Network](https://user-images.githubusercontent.com/3116225/96717492-2389da80-13d9-11eb-9795-0f77ee441329.jpg)
187+
![Network](https://github.com/zhongwencool/observer_cli/raw/main/docs/images/network.jpg)
188188

189189
* **Byte input/output**: The byte of growth input/output during the refresh interval.
190190
* **Total input/output**: [`erlang:statistics(io)`](http://erlang.org/doc/man/erlang.html#statistics-1) returns `Input`, which is the total number of bytes received through ports, and `Output`, which is the total number of bytes output to ports.
@@ -200,7 +200,7 @@ Fetches a given attribute from all inet ports (`TCP, UDP, SCTP`) and returns the
200200

201201
When find out who is slowly but surely eating up all your bandwidth, enter the suspected port sequence(Integer) then press `Enter` will use [`recon:port_info/2`](http://ferd.github.io/recon/recon.html#port_info-2) to show a lot of information available about port.
202202

203-
![Port](https://user-images.githubusercontent.com/3116225/39091218-6687caf4-4622-11e8-86c7-190c2106d41e.jpg)
203+
![Port](https://github.com/zhongwencool/observer_cli/raw/main/docs/images/port_info.jpg)
204204

205205
* **id**: internal index of a port. Of no particular use except to differentiate ports.
206206
* **name**: type of the port — with names such as `"tcp_inet"`, `"udp_inet"`, or `"efile"`.
@@ -217,7 +217,7 @@ When find out who is slowly but surely eating up all your bandwidth, enter the s
217217

218218
### System
219219

220-
![System](https://user-images.githubusercontent.com/3116225/39091213-55b9aaf8-4622-11e8-91ed-b37c04e20173.jpg)
220+
![System](https://github.com/zhongwencool/observer_cli/raw/main/docs/images/system.jpg)
221221

222222
* **System Info**: [`erlang:system_info/1`](http://erlang.org/doc/man/erlang.html#system_info-1) returns various information about the allocators of the current system (emulator).
223223
* **Allocator Info**: [`recon_alloc:average_block_sizes(current|max)`](https://ferd.github.io/recon/recon_alloc.html#average_block_sizes-1) check all allocators in `allocator` and returns the average block sizes being used for mbcs and sbcs. This value is interesting to use because it will tell us how large most blocks are. This can be related to the VM's largest multiblock carrier size (lmbcs) and smallest multiblock carrier size (smbcs) to specify allocation strategies regarding the carrier sizes to be used.
@@ -226,20 +226,30 @@ When find out who is slowly but surely eating up all your bandwidth, enter the s
226226

227227
### ETS
228228

229-
![Ets](https://user-images.githubusercontent.com/3116225/39091214-55eae91a-4622-11e8-95c2-bc514219b5d9.jpg)
229+
![Ets](https://github.com/zhongwencool/observer_cli/raw/main/docs/images/ets.jpg)
230230

231231
ETS tables are never garbage collected, and will maintain their memory usage as long as records will be left undeleted in a table. Only removing records manually (or deleting the table) will reclaim memory.
232232

233233
Top N list sort by memory size, all items defined in [`ets:info/2`](http://erlang.org/doc/man/ets.html#info-2)
234234

235235
### Mnesia
236236

237-
![Mnesia](https://user-images.githubusercontent.com/3116225/39091215-5637b4fc-4622-11e8-9639-99405318fc09.jpg)
237+
![Mnesia](https://github.com/zhongwencool/observer_cli/raw/main/docs/images/mnesia.jpg)
238238

239239
Top N list sort by memory size, all items defined in [`mnesia:table_info/2`](http://erlang.org/doc/man/mnesia.html#table_info-2)
240240

241241
### Application
242242

243-
![Application](https://user-images.githubusercontent.com/3116225/39091216-567ddab8-4622-11e8-8b32-db0f621d6b90.jpg)
243+
![Application](https://github.com/zhongwencool/observer_cli/raw/main/docs/images/application.jpg)
244244

245-
Find application debug information by [`application_controller:info()`](https://github.com/erlang/otp/blob/master/lib/kernel/src/application_controller.erl#L280).
245+
The Application panel aggregates supervision data from [`application_controller:info()`](https://github.com/erlang/otp/blob/master/lib/kernel/src/application_controller.erl#L280), groups processes by their application master, and shows their live resource usage. Each row includes:
246+
247+
- **No/App**: position in the table and the OTP application name. `no_group` collects processes that do not belong to any application supervisor.
248+
- **ProcessCount** (`p`): number of processes currently owned by that application. Toggle sorting with `p` to track churn.
249+
- **Memory** (`m`): total heap/stack memory used by those processes, formatted via `{byte, Size}`.
250+
- **Reductions** (`r`): cumulative reduction count, useful to spot CPU-heavy apps.
251+
- **MsgQ** (`mq`): total pending messages across the application’s processes.
252+
- **Status**: lifecycle state derived from `application_controller` (one of `Loading`, `Loaded`, `Starting`, `Started`, `StartPFalse`, or `Unknown`).
253+
- **Version**: semantic version reported by the application specification when available.
254+
255+
Shortcuts follow the same pattern as other panels: `p/m/r/mq` switch the primary sort column, `F/B` paginate large installations, numeric input jumps to a row, and entering a PID delegates to the process view. Use `{interval, Milliseconds}` to adjust the refresh cadence.

docs/images/application.png

81 KB
Loading

docs/images/ets.jpg

294 KB
Loading

docs/images/home.png

289 KB
Loading

docs/images/home_panel.jpg

230 KB
Loading

docs/images/mnesia.jpg

286 KB
Loading

docs/images/network.jpg

560 KB
Loading

docs/images/port_info.jpg

144 KB
Loading

docs/images/process.jpg

318 KB
Loading

docs/images/process_info.jpg

171 KB
Loading

0 commit comments

Comments
 (0)