Why my geoip lookup is failing?

If you are running in ECS mode v8 (the default) then you should be getting an error message for each lookup

GeoIP Filter in ECS-Compatiblity mode requires a target when source is not an ip sub-field, eg. [client][ip]>,

If you change your mutate to

mutate { rename => { "source_ip" => "[source][ip]" } }

then you will get

    "source" => {
     "ip" => "103.161.42.21",
    "geo" => {
                "location" => {
            "lon" => 79.0011,
            "lat" => 21.9974
        },
        "country_iso_code" => "IN",
                "timezone" => "Asia/Kolkata",
          "continent_code" => "AS",
            "country_name" => "India"
    }