Monday, 17 April 2017

Comparing fabio and traefik

I was tasked to compare two modern dynamic load balancers: Traefik and Fabio.

Consul support

Both balancers can be configured to store their’s configuration in Consul and get info for routing table from Consul catalog.

Proxy protocol

Fabio supports proxy protocol.
There’s PR in Traefik’s repo requesting this feature.

Let’s Encrypt

Out of two, only Traefik allows you to request certificates from Let’s Encrypt.
There’s issue in Fabio’s repo requesting this feature.

Websocket

Both balancers support websockets.

TLS ciphers

Only in Traefik TLS ciphers and minimal TLS version can be configured.
There’s issue in Fabio’s repo.

Auth for admin UI

Both Traefik and Fabio provide admin web UI but only in Traefik web UI can be “secured” with basic auth.

Keep-alive

Only Fabio can be configured with keep-alive for outgoing connections.

Dropping root privileges

Neither Fabio nor Traefik drops privileges after start.
setcap 'cap_net_bind_service=+ep' $(which traefik) can be utilized as a workaround.
Issue in Fabio’s repo.
Issue in Traefiks’ repo.

Basic configurations

Fabio and Traefik have different approach in exposing services to the outside world.
With Fabio a service has to be explicitly configured to be exposed:

{
    "services": [
        {
            "name": "nginx", 
            "port": 80, 
            "tags": [
                "urlprefix-/nginx"
            ]
        }
    ]
}

If service is not configured with urlprefix tag nothing will be exposed.
Traefik will expose all the services it will find in Consul’s catalog with default frontend.rule.
That may or may be not what is required.
For example, if there are only a couple of services you want to expose to the outside world.
To restrain all the services from being exposed Traefik provides constraints:

{
    "services": [
        {
            "name": "nginx", 
            "port": 80, 
            "tags": [
                "traefik.tags=trk", 
                "traefik.frontend.rule=PathPrefix:/nginx", 
            ]
        }
    ]
}

Fabio

fabio.properties

proxy.cs = cs=fasten;type=file;cert=fasten.com.c;key=fasten.com.key
proxy.addr=:9999;cs=fasten
./fabio-1.4.2-go1.8.1-linux_amd64 -cfg fabio.properties

Traefik

traefik.toml

checkNewVersion = false
defaultEntryPoints = ["https"]

[entryPoints]
  [entryPoints.https]
  address = ":8443"
    [entryPoints.https.tls]
      [[entryPoints.https.tls.certificates]]
      CertFile = "fasten.com.c"
      KeyFile = "fasten.com.key"

[consulCatalog]
endpoint = "127.0.0.1:8500"
constraints = ["tag==trk"]
domain = "fasten.com"

[web]
address = ":8888"
ReadOnly = true
./traefik_linux-amd64 -c traefik.toml --debug

Benchmarks

balancers were given t2.micro instance and configured like this:

sudo sysctl -w fs.file-max="9999999"
sudo sysctl -w fs.nr_open="9999999"
cat > /etc/security/limits.d/95-nofile.conf <<EOF
kostyrev soft nofile 102400
kostyrev hard nofile 102400
EOF

Behind each balancer there were two t2.medium instances with nginx installed.
AB and wrk were used to perform the benchmarks.

AB

Fabio

$ ab -c 1000 -t 60 https://52.23.178.71:8443/nginx/
This is ApacheBench, Version 2.3 <$Revision: 1757674 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 52.23.178.71 (be patient)
Completed 5000 requests
Completed 10000 requests
Finished 11091 requests


Server Software:        nginx/1.10.2
Server Hostname:        52.23.178.71
Server Port:            8443
SSL/TLS Protocol:       TLSv1.2,ECDHE-RSA-AES128-GCM-SHA256,2048,128

Document Path:          /nginx/
Document Length:        3770 bytes

Concurrency Level:      1000
Time taken for tests:   60.024 seconds
Complete requests:      11091
Failed requests:        0
Total transferred:      44429898 bytes
HTML transferred:       42013728 bytes
Requests per second:    184.78 [#/sec] (mean)
Time per request:       5411.977 [ms] (mean)
Time per request:       5.412 [ms] (mean, across all concurrent requests)
Transfer rate:          722.85 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:      580 3121 4384.5   1736   49182
Processing:   144 1180 1945.7    631   44713
Waiting:      139  753 956.5    456   27828
Total:        828 4300 4876.4   2897   49507

Percentage of the requests served within a certain time (ms)
  50%   2897
  66%   3667
  75%   4487
  80%   5365
  90%   8403
  95%  12731
  98%  20592
  99%  28657
 100%  49507 (longest request)

Traefik

$ ab -c 1000 -t 60 https://54.144.22.55:8443/nginx/
This is ApacheBench, Version 2.3 <$Revision: 1757674 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 54.144.22.55 (be patient)
Completed 5000 requests
Completed 10000 requests
Finished 10727 requests


Server Software:        nginx/1.10.2
Server Hostname:        54.144.22.55
Server Port:            8443
SSL/TLS Protocol:       TLSv1.2,ECDHE-RSA-AES128-GCM-SHA256,2048,128

Document Path:          /nginx/
Document Length:        3770 bytes

Concurrency Level:      1000
Time taken for tests:   60.004 seconds
Complete requests:      10727
Failed requests:        0
Total transferred:      42949883 bytes
HTML transferred:       40616058 bytes
Requests per second:    178.77 [#/sec] (mean)
Time per request:       5593.777 [ms] (mean)
Time per request:       5.594 [ms] (mean, across all concurrent requests)
Transfer rate:          699.00 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:      547 2988 4769.6   1652   57481
Processing:   136 1037 1664.9    564   37961
Waiting:      133  729 811.3    477   23277
Total:        786 4025 5242.2   2567   59809

Percentage of the requests served within a certain time (ms)
  50%   2567
  66%   3199
  75%   3817
  80%   4378
  90%   7032
  95%  11544
  98%  21974
  99%  34017
 100%  59809 (longest request)

wrk

Fabio

$ ./wrk -t20 -c1000 -d60s --latency https://52.23.178.71:8443/nginx/
Running 1m test @ https://52.23.178.71:8443/nginx/
  20 threads and 1000 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   416.75ms  192.19ms   1.99s    86.01%
    Req/Sec   106.37     46.31   333.00     67.31%
  Latency Distribution
     50%  365.10ms
     75%  408.54ms
     90%  646.54ms
     99%    1.21s 
  121651 requests in 1.00m, 462.32MB read
  Socket errors: connect 0, read 0, write 0, timeout 289
Requests/sec:   2026.39
Transfer/sec:      7.70MB

Traefik

$ ./wrk -t20 -c1000 -d60s --latency https://54.144.22.55:8443/nginx/
Running 1m test @ https://54.144.22.55:8443/nginx/
  20 threads and 1000 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   478.76ms  239.89ms   2.00s    85.90%
    Req/Sec    95.34     44.76   470.00     68.26%
  Latency Distribution
     50%  385.02ms
     75%  490.87ms
     90%  768.83ms
     99%    1.47s 
  106907 requests in 1.00m, 406.29MB read
  Socket errors: connect 0, read 0, write 0, timeout 359
Requests/sec:   1779.92
Transfer/sec:      6.76MB
compare fabio traefik
proxy protocol + -
letsencrypt - +
consul backend + +
websockets + +
tls ciphers - +
basic auth - +
config in consul + +
community - +
keepalive + -
benchmarks + -

Written with StackEdit.

Tuesday, 11 October 2016

Configuring Google Cloud SDK and kubectl

quick and dirty steps
  1. install sdk
  2. configure kubectl:
gcloud config set container/use_client_certificate True

gcloud container clusters get-credentials cluster-name

Saturday, 13 August 2016

Koji build system

There are many ways you can create RPM packages for your code.
If you are an open source project you can always use Copr. It is very easy to get started with.
But when you want to build RPM packages for company’s closed source projects you don’t have much of a choice:
- OBS
- Koji

OBS

OBS forces you to download appliance with OpenSUSE on-board. So you have to learn how OpenSUSE operates. Over seven years I’ve been working in Rhel/CentOS environments and that’s why OBS was not an option for me.
But OBS can build for many platforms.

Luckily for me, the team I currently work in, needs to build packages just for CentOS6/7.

Koji

Koji is the software that builds RPM packages for the Fedora project.
Koji heavily uses existing tools:
- mock
- yum
- rpmbuild
- createrepo

Koji is not that easy to deploy and to understand the terminology.
I found those blog posts to be very useful.
Also there are very useful videos:
- Building RPMS: How Fedora’s Koji Works by Dennis Gilmore who is Fedora Release Engineering Lead
- CentOS: Community build service by Thomas Oulevey who is System Engineer at CERN

Because Ansible is the new sexy, I’ve developed a bunch of roles used to deploy an all-in-one PoC setup of Koji.

For creating SRPMs and submitting tasks to Koji we use tito configured to utilize KojiReleaser.

Friday, 19 February 2016

IBM: disable pxebooting on NICs

ssh USERID@X.X.X.X

system> asu set PXE.NicPortPxeMode.1 "UEFI and Legacy Support"
system> asu set PXE.NicPortPxeMode.2 "Disabled"
system> asu set PXE.NicPortPxeMode.3 "Disabled"
system> asu set PXE.NicPortPxeMode.4 "Disabled"

I needed to change

system> asu show BroadcomGigabitEthernet*.LegacyBootProtocol
BroadcomGigabitEthernetBCM5719-40F2E9BA7038.LegacyBootProtocol=PXE
BroadcomGigabitEthernetBCM5719-40F2E9BA7039.LegacyBootProtocol=NONE
BroadcomGigabitEthernetBCM5719-40F2E9BA703A.LegacyBootProtocol=NONE
BroadcomGigabitEthernetBCM5719-40F2E9BA703B.LegacyBootProtocol=NONE

IBM: Force PXE booting on next reboot

ssh USERID@X.X.X.X

system> pxeboot -en enabled

Thursday, 15 January 2015

PXELinux global default

LABEL discovery
MENU LABEL Foreman Discovery
MENU DEFAULT
KERNEL boot/fdi-image/vmlinuz0
APPEND rootflags=loop initrd=boot/fdi-image/initrd0.img root=live:/fdi.iso foreman.url=https://url rootfstype=auto ro rd.live.image rd.lvm=0 rootflags=ro crashkernel=128M
elevator=deadline max_loop=256 rd.luks=0 rd.md=0 rd.dm=0 nomodeset selinux=0 stateless
IPAPPEND 2

Saturday, 13 December 2014

foreman rhev-h autoinstall

DEFAULT ovirt
TIMEOUT 20
PROMPT 0
LABEL ovirt
KERNEL boot/vmlinuz0
APPEND rootflags=loop initrd=boot/initrd0.img root=live:/rhevh-6.5-20140930.1.el6ev.iso BOOTIF=link storage_init rootfstype=auto ro liveimg check local_boot_trigger=<%= foreman_url("built") %>  management_server=rhevm.example.com:443 rhevm_admin_password=$1$1OIs7Iry$7iD0YeFzWMlphfu7ar1 adminpw=$1$1OIs7Iry$7iD0YeFMlphf7Or1 ssh_pwauth=1 hostname=<%= @host %> ip=<%=@host.ip %> netmask=<%=@host.subnet.mask %> gateway=<%=@host.subnet.gateway %> dns=<%=[@host.subnet.dns_primary,@host.subnet.dns_secondary].reject{|n| n.blank?}.join(',')%> ntp=ntp.ix.ru RD_NO_LVM rd_NO_MULTIPATH rootflags=ro crashkernel=128M elevator=deadline reinstall max_loop=256 rd_NO_LUKS rd_NO_MD rd_NO_DM

Tuesday, 5 August 2014

Как узнать Host ID при работе через FC

через утилиту systool, входящую в пакет sysfsutils (CentOS6)

[root@c1 ~]# systool -c fc_host -v | grep port_name
    port_name           = "0x5001438026682306"
[root@c1 ~]#

Загоны multipath'а

Если мы видим, что multipath загоняет, выдавая нам что-то типа такого:
multipath -ll
mpathr (3600c0ff00012e06d0000000000000000) dm-38
size=5.5T features='1 queue_if_no_path' hwhandler='0' wp=rw
mpathg (360000000000000000000000000000000) dm-8 ,
size=9.3G features='1 queue_if_no_path' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=0 status=enabled
  |- #:#:#:# -   #:# failed faulty running
  |- #:#:#:# -   #:# failed faulty running
  |- #:#:#:# -   #:# failed faulty running
  |- #:#:#:# -   #:# failed faulty running
  |- #:#:#:# -   #:# failed faulty running
  |- #:#:#:# -   #:# failed faulty running
  |- #:#:#:# -   #:# failed faulty running
  |- #:#:#:# -   #:# failed faulty running
  |- #:#:#:# -   #:# failed faulty running
  |- #:#:#:# -   #:# failed faulty running
  |- #:#:#:# -   #:# failed faulty running
  |- #:#:#:# -   #:# failed faulty running
  |- #:#:#:# -   #:# failed faulty running
  |- #:#:#:# -   #:# failed faulty running
  |- #:#:#:# -   #:# failed faulty running
  |- #:#:#:# -   #:# failed faulty running
  |- #:#:#:# -   #:# failed faulty running
  |- #:#:#:# -   #:# failed faulty running
  |- #:#:#:# -   #:# failed faulty running
  |- #:#:#:# -   #:# failed faulty running
  |- #:#:#:# -   #:# failed faulty running
  `- #:#:#:# -   #:# failed faulty running
[root@c1 ~]# multipath -F
Aug 05 18:24:13 | mpathr: map in use
Aug 05 18:24:13 | mpathg: map in use


причем, мы абсолютно уверены, что со стороны хранилища мы уже давно поудаляли все луны и их там просто физически уже нет, то

[root@c1 ~]# rm /etc/multipath/bindings 
rm: remove regular file `/etc/multipath/bindings'? y
[root@c1 ~]# rm /etc/multipath/wwids 
rm: remove regular file `/etc/multipath/wwids'? y
[root@c1 ~]# service ^C
[root@c1 ~]# /etc/init.d/multipathd restart
ok
Stopping multipathd daemon:                                [  OK  ]
Starting multipathd daemon:                                [  OK  ]
[root@c1 ~]# multipath -F
[root@c1 ~]# multipath -v0
[root@c1 ~]# multipath -v4

[root@c1 ~]# multipath -ll
[root@c1 ~]# 

Friday, 28 March 2014

Apache Prefork and Worker

Prefork MPM uses multiple child processes with one thread each and each process handles one connection at a time.
Worker MPM uses multiple child processes with many threads each. Each thread handles one connection at a time.

Friday, 21 March 2014

Полезные алиасы git

git config --global alias.st status
git config --global alias.ci 'commit -v'
git config --global alias.br branch
git config --global alias.co checkout

Monday, 17 March 2014

Bind's statistics channel and selinux


Mar 17 18:58:19 dns01 named[12144]: /etc/named.conf:39: couldn't allocate statistics channel 127.0.0.1#8053: permission denied

# setenforce 0
# semanage port -a -t dns_port_t -p tcp 8053
# setenforce 1

/etc/init.d/named restart

Tuesday, 18 February 2014

Инкрементальные бэкапы с помощью tar



rm -rf /tmp/*

mkdir /tmp/test_filesystem/{a,b,c} -p

echo 1 > /tmp/test_filesystem/a/file1
echo 2 > /tmp/test_filesystem/b/file2
echo 3 > /tmp/test_filesystem/b/file3

tar cvzf /tmp/archive.1.tar.gz --no-check-device --listed-incremental=/tmp/test.snar /tmp/test_filesystem

echo 4 > /tmp/test_filesystem/b/file4
echo 5 > /tmp/test_filesystem/b/file5

tar cvzf /tmp/archive.2.tar.gz --no-check-device --listed-incremental=/tmp/test.snar /tmp/test_filesystem

rm /tmp/test_filesystem/a/file1 -f

tar cvzf /tmp/archive.3.tar.gz --no-check-device --listed-incremental=/tmp/test.snar /tmp/test_filesystem

mkdir /tmp/test-extract



чтобы восстановить состояние файловой системы, восстанавливаем архивы в порядке возрастания номеров архивов:



первым идет полный архив:
tar xvf /tmp/archive.1.tar.gz -C /tmp/test-extract

потом инкрементальные, с указание соответствующей опции:
tar xvf /tmp/archive.2.tar.gz --incremental -C /tmp/test-extract
tar xvf /tmp/archive.3.tar.gz --incremental -C /tmp/test-extract




Sunday, 2 February 2014

Синхронизация реп


yum -y install yum-utils createrepo
yum repolist
repo id        repo name        
base           CentOS-6 - Base  
extras         CentOS-6 - Extras
updates        CentOS-6 - Updates

mkdir -p /media/repos/base
cd /media/repos/base
reposync -r base

Когда partprobe не спасает

У нас есть диск, на котором создан раздел.
Этот раздел примонтирован.

[root@node01 ~]# mount | grep sdb
/dev/sdb1 on /mnt/int_p1 type ext4 (rw)

Допустим, нам необходимо создать новый раздел на этом же диске:

[root@node01 ~]# fdisk -cu /dev/sdb
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First sector (104448-10485759, default 104448): 
Using default value 104448
Last sector, +sectors or +size{K,M,G} (104448-10485759, default 10485759): +100M

Command (m for help): p

Disk /dev/sdb: 5368 MB, 5368709120 bytes
128 heads, 57 sectors/track, 1437 cylinders, total 10485760 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x522f1a6e

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048      104447       51200   83  Linux
/dev/sdb2          104448      309247      102400   83  Linux
Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.

Новый раздел не виден ядром и собственно ОС.
Пробуем воспользоваться подсказанными утилитами:
[root@node01 ~]#  partprobe /dev/sdb
Warning: WARNING: the kernel failed to re-read the partition table on /dev/sdb (Device or resource busy).  As a result, it may not reflect all of your changes until after reboot.
[root@node01 ~]# mkfs.ext4 /dev/sdb2
mke2fs 1.41.12 (17-May-2010)
Could not stat /dev/sdb2 --- No such file or directory

The device apparently does not exist; did you specify it correctly?

[root@node01 ~]# kpartx -a /dev/sdb
device-mapper: reload ioctl on sdb1 failed: Invalid argument
create/reload failed on sdb1
device-mapper: reload ioctl on sdb2 failed: Invalid argument
create/reload failed on sdb2

И наконец, только partx нас спасёт, хоть и выдаст ошибку:
[root@node01 ~]# partx -a /dev/sdb
BLKPG: Device or resource busy
error adding partition 1

[root@node01 ~]# mkfs.ext4 /dev/sdb2
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
25688 inodes, 102400 blocks
5120 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
13 block groups
8192 blocks per group, 8192 fragments per group
1976 inodes per group
Superblock backups stored on blocks: 
8193, 24577, 40961, 57345, 73729

Writing inode tables: done                            
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done



Friday, 4 October 2013

INFO: make: *** [nmccollector] Error 2

Metalink ID 957982.1 talks about it.

Solution:
1. The popup error concerning the linking of target "collector" at about 83% of the linking process of the 10.2.0.1 base-release install should be ignored.
2. Apply 10.2.0.4 or 10.2.0.5 patchset

Thursday, 26 September 2013

Postfix: релей через EXIM с шифрованием и авторизацией


Имеется:
- свежеустановленный centos 6.4 и нетронутый postfix на нем,
- почтовый сервер (mail.example.ru) с настроенным exim с авторизацией через TLS-сессию.

Нужно научить postfix отправлять письма через exim, удостоверяя себя логином/паролем, передаваемым только в зашифрованном виде через TLS-соединение.

Настраиваем /etc/postfix/main.cf:

/usr/sbin/postconf -e 'smtp_sasl_type = cyrus'
/usr/sbin/postconf -e 'smtp_sasl_security_options = noanonymous, noplaintext'
/usr/sbin/postconf -e 'smtp_sasl_tls_security_options = noanonymous'
/usr/sbin/postconf -e 'smtp_sasl_mechanism_filter = plain, login'

/usr/sbin/postconf -e 'relayhost = [mail.example.ru]:587'
/usr/sbin/postconf -e 'smtp_sasl_auth_enable = yes'
/usr/sbin/postconf -e 'smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd'
/usr/sbin/postconf -e 'smtp_tls_security_level = encrypt'

пишем логин/пароль в /etc/postfix/sasl_passwd:
echo -e '[mail.example.ru]:587 \t username@example.ru:yourpassword' > /etc/postfix/sasl_passwd
chown root.root /etc/postfix/sasl_passwd
chmod 640 /etc/postfix/sasl_passwd
postmap hash:/etc/postfix/sasl_passwd

service postfix restart

P.S. Если вы видете в логах postfix'а строку
(SASL authentication failed; cannot authenticate to server no mechanism available)
значит нужно доставить пакет cyrus-sasl-plain:

yum install cyrus-sasl-plain

Monday, 9 September 2013

Выполнение множества команд из history

Понадобилось мне выполнить кучу команд из списка history:
$ history | grep echo
606  echo "- - - " > /sys/class/scsi_host/host0/scan
607  echo "- - - " > /sys/class/scsi_host/host1/scan
608  echo "- - - " > /sys/class/scsi_host/host2/scan
609  echo "- - - " > /sys/class/scsi_host/host3/scan

копировать по-одной - не хотелось,
небольшое гугление вывело на незнакомую до сих пор встроенную в bash команду fc [Fix Command].
В моем случае, fc нужно запустить так: 
$ fc 606 609
что откроет нам дефолтный редактор, с указанными командами для возможного исправления. Если нас всё устраивает, то просто выходим из него, сохраняя.
В результате, команды по списку поочередно исполнятся.

Как всегда, подробнее за команду и аргументы читаем man fc.
 

Saturday, 7 September 2013

df; переполнение раздела; поиск виновника

Мониторинг показал, что раздел с логами перевалил за критический порог.

Вывод df показывал:
  Filesystem                                     Size     Used    Avail Use%   Mounted on
/dev/mapper/vg_fgrp-varlog    485M  393M   67M  86%     /var/log
 Но вывод du настаивал, что:

 $ du -s -h /var/log
30M    /var/log

Знания по unix-системам подсказывали, что наверняка какой-то процесс держит файл.

Найти виновника помог lsof:

$ lsof | grep deleted
mysqld    19662 mysql   10u      REG              253,1          0         23 /tmp/ibOgBc1X (deleted)
mysqld    19662 mysql   12u      REG              253,1          0         48 /tmp/ib4l1LpF (deleted)
mysqld    19662 mysql   13u      REG              253,1          0      11212 /tmp/ibC8bmOm (deleted)
mysqld    19662 mysql   14u      REG              253,1          0      11235 /tmp/ibA6wpd4 (deleted)
mysqld    19662 mysql   17w      REG              253,3  370401307      65028 /var/log/mysql/log-slow-queries.log (deleted)
mysqld    19662 mysql   18u      REG              253,1          0      24419 /tmp/ibCNep2L (deleted)

выполняем:
$ kill -HUP 19662
и место отвоевано!

$ df -h
Filesystem                                   Size     Used  Avail   Use% Mounted on
/dev/mapper/vg_fmail-varlog  485M   40M  445M   9%    /var/log