Ad Widget

Collapse

Мониторинг размера базы данных MySQL

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • NoOneIsPerfect
    Member
    • Feb 2015
    • 37

    #16
    Originally posted by Jimson
    вставь в конвеер tee /tmp/userparms.log, перед mysql, и посмотри что ты скармливаешь mysql-у
    а еще к этим всяким echo добавь 2>&1 что бы увидеть заодно ругань в логе
    Вставил. Скармливается select sum(data_length+index_length) from information_schema.tables;
    В mysql эта команда выполняется без проблем.

    Comment

    • Jimson
      Senior Member
      • Jan 2008
      • 1327

      #17
      Ну блин, тянуть все из тебя по капле, нам оно что ли надо?
      Вставь теперь tee после mysql и посмотри в файле что на выходе, есть ли левые символы, пробелы и тп. Если число с плавающей запятой, то там должна быть точка (man locale), и тип ЭД должен быть вещественный.
      Короче больше информации.

      Comment

      • NoOneIsPerfect
        Member
        • Feb 2015
        • 37

        #18
        Originally posted by Jimson
        Ну блин, тянуть все из тебя по капле, нам оно что ли надо?
        Вставь теперь tee после mysql и посмотри в файле что на выходе, есть ли левые символы, пробелы и тп. Если число с плавающей запятой, то там должна быть точка (man locale), и тип ЭД должен быть вещественный.
        Короче больше информации.
        Tee после mysql выдает 279761214. Т.е. правильно число, которое должен увидеть zabbix.
        Получается, что ошибки not found и permission denied вылетают где-то в этом выражении: "select sum($(case "$3" in both|"") echo "data_length+index_length";; data|index) echo "$3_length";; free) echo "data_free";; esac)) from information_schema.tables$([[ "$1" = "all" || ! "$1" ]] || echo " where table_schema='$1'")$([[ "$2" = "all" || ! "$2" ]] || echo "and table_name='$2'");"

        Comment

        • sadman
          Senior Member
          • Dec 2010
          • 1611

          #19
          Code:
          a='123'
          [[ "$a" = "all" || ! "$a" ]] || echo "234"
          Code:
          keeper:~$ sh test2.sh
          test2.sh: 2: [[: not found
          test2.sh: 2: 123: not found
          
          keeper:~$ bash test2.sh
          234

          Comment

          • NoOneIsPerfect
            Member
            • Feb 2015
            • 37

            #20
            Originally posted by sadman
            Code:
            a='123'
            [[ "$a" = "all" || ! "$a" ]] || echo "234"
            Code:
            keeper:~$ sh test2.sh
            test2.sh: 2: [[: not found
            test2.sh: 2: 123: not found
            
            keeper:~$ bash test2.sh
            234
            Осталось только понять какой интерпретатор использует zabbix_agent и где это настраивается?

            Comment

            • sadman
              Senior Member
              • Dec 2010
              • 1611

              #21

              Comment

              • NoOneIsPerfect
                Member
                • Feb 2015
                • 37

                #22
                Спасибо, но я знаю, как менять шелл для пользователя Я уже писал выше, что замена шелла для zabbix не влияет на результат.

                Comment

                • Jimson
                  Senior Member
                  • Jan 2008
                  • 1327

                  #23
                  хз, я бы, например, конструкции вида "a" = "b" || ! "a" не использовал, во первых в подобных местах нагляднее просто позвать test, во вторых использовать его ключи а не ||

                  test "$a" = "$b" -o -z "$a"

                  ну и с case еще сомнения, я без понятия как он в разных шелах себя ведет и где надо ставить точку с запятой при написании case в одну строку

                  P.S. шелл для пользователя тут вообще никаким боком, кто вооще сказал что system() будет смотреть какой там шелл у EUID? ну т.е. я не знаю ответа на этот вопрос, но для начала надо явно гуглить не то как сделать через жопу `vi /etc/passwd` в линуксах, а то грести от man 3 system и дальше
                  Last edited by Jimson; 07-07-2015, 16:57.

                  Comment

                  • sadman
                    Senior Member
                    • Dec 2010
                    • 1611

                    #24
                    Так я и не использовал - я выдрал с примера топикстартера

                    Comment

                    • NoOneIsPerfect
                      Member
                      • Feb 2015
                      • 37

                      #25
                      Originally posted by sadman
                      Так я и не использовал - я выдрал с примера топикстартера
                      а я взял код из стандартной инсталляции zabbix 2.4, и мы теперь пытаемся понять, что же там наверчено

                      Comment

                      • sadman
                        Senior Member
                        • Dec 2010
                        • 1611

                        #26
                        Нда, ситуация интересная:

                        Code:
                        UserParameter=test,/home/zabbix/test2.sh
                        1.
                        Code:
                        #!/bin/bash
                        set
                        a='123'
                        [[ "$a" = "all" || ! "$a" ]] || echo "234"
                        Code:
                        keeper:~$ zabbix_agentd -t "test"
                        test                                          [t|BASH=/bin/bash
                        ...
                        PWD=/home/zabbix
                        SHELL=/bin/bash
                        _=/usr/local/sbin/zabbix_agentd
                        234]
                        2.
                        Code:
                        set
                        a='123'
                        [[ "$a" = "all" || ! "$a" ]] || echo "234"
                        Code:
                        keeper:~$zabbix_agentd -t "test"
                        test                                          [t|....
                        PWD='/home/zabbix'
                        SHELL='/bin/bash'
                        _='/usr/local/sbin/zabbix_agentd'
                        /home/zabbix/test2.sh: 4: [[: not found
                        /home/zabbix/test2.sh: 4: 123: not found]

                        Code:
                        keeper:~$ ls -l /bin/sh
                        lrwxrwxrwx 1 root root 4 Mar 10  2014 /bin/sh -> dash
                        Грязный хак:
                        Code:
                        ln -f /bin/bash /bin/sh
                        Code:
                        keeper:~$ cat /etc/issue
                        OpenMediaVault 0.5.60 (Sardaukar)
                        Т.е. Debian.

                        Comment

                        • Jimson
                          Senior Member
                          • Jan 2008
                          • 1327

                          #27
                          Originally posted by sadman
                          Нда, ситуация интересная:
                          Что то я мысли не понял, #!/bin/bash это, тащемта, не комментарий. Что должно показать нам удаление этой строки, то что исполняемый текстовый файл без #! в первой строки является не валидным?

                          Comment

                          • sadman
                            Senior Member
                            • Dec 2010
                            • 1611

                            #28
                            Наверное то, что по умолчанию в Debian (и Ubuntu) в качестве интерпретатора используется не bash, несмотря на "SHELL=/bin/bash" и пока явно его не укажешь в качестве шелла - [[ всегда будет валить ошибки и пример из конфига Zabbix будет нерабочим.

                            А уж как это дело исправить - релинком или чтением man-ов на ночь - решать тому, кто этот ключ использует. В конце концов никто не мешает вынести код в .sh с прямым указаниеми на #!/bin/bash.

                            Comment

                            • NoOneIsPerfect
                              Member
                              • Feb 2015
                              • 37

                              #29
                              Итого: слинковал /bin/sh на /bin/bash. Скрипт мониторинга базы заработал. Что это могло пуптно сломать пока не выяснил

                              Comment

                              • sadman
                                Senior Member
                                • Dec 2010
                                • 1611

                                #30
                                Немного некропостинга, раскрывающего тему шелла.

                                execute.c, function: zbx_execute_nowait

                                Code:
                                ....
                                pid = zbx_fork();
                                switch (pid)
                                ...
                                       case 0:
                                       /* this is the grand child process */
                                ...
                                       /* replace the process with actual command to be executed */
                                [B]       execl("/bin/sh", "sh", "-c", command, NULL);[/B]
                                ...

                                Comment

                                Working...